diff --git a/rp_reporter/rp_reporter/__init__.py b/rp_reporter/rp_reporter/__init__.py
index cd4189b..d46c59e 100644
--- a/rp_reporter/rp_reporter/__init__.py
+++ b/rp_reporter/rp_reporter/__init__.py
@@ -1 +1,2 @@
-from .batch_reporter import upload_job
\ No newline at end of file
+from .settings import *
+from .batch_reporter import upload_job
diff --git a/rp_reporter/rp_reporter/batch_reporter.py b/rp_reporter/rp_reporter/batch_reporter.py
index 1f6ec61..5cbcc04 100755
--- a/rp_reporter/rp_reporter/batch_reporter.py
+++ b/rp_reporter/rp_reporter/batch_reporter.py
@@ -1,15 +1,15 @@
-from time import sleep
-
+#!/usr/bin/python
 import click
-import logging
-from collections import deque
-
-import yaml
-import itertools
-import jmespath
-from typing import List, Optional
-
 import jenkins_jinny.main as jj
+import jmespath
+import itertools
+import logging
+import yaml
+
+from collections import deque
+from time import sleep
+from typing import List, Optional
+from pbr.version import VersionInfo
 
 from rp_reporter.settings import TIME_FORMAT
 from rp_reporter.report_from_xml import timestamp, Reporter
@@ -17,7 +17,7 @@
 LOG = logging.getLogger("rp_reporter")
 
 def grep(text: List, patterns: List, context_size: int,
-         blacklist: List[str] = None ) :
+         blacklist: List[str] = None ):
     """Works like `grep -rn`
     returns found text with line before and after
     :param text:
@@ -25,25 +25,39 @@
     :param context_size: count of lines before and after to return
     :return: Yields list of lines
     """
-    context = deque(maxlen=context_size)
+
+    context = deque(maxlen=context_size + 1)
     result = list()
-    after_count = 0
+    lines_to_read_after_fail = 0
+
+    def found(_line):
+        if any(pattern.lower() in _line.lower() for pattern in patterns):
+            if any(blacklisted.lower() in _line.lower()
+                   for blacklisted in blacklist):
+                return False
+            return True
+        return False
+
     for num, line in enumerate(text, start=1):
         context.append(f"{num} {line}")
-        if any(pattern.lower() in line.lower() for pattern in patterns):
-            if any(blacklisted.lower() in line.lower()
-                   for blacklisted in blacklist):
-                continue
+
+        if result:
+            result.append(f"{num} {line}")
+
+        if found(line):
+            # import ipdb; ipdb.set_trace()
             if not result:
                 result = list(context)
-            after_count = context_size
-            continue
-        if after_count > 0:
-            result.append(f"{num} {line}")
-            after_count -= 1
-        if result and after_count == 0:
+            result.append("^" * 100)
+            lines_to_read_after_fail = context_size + 1
+
+        if lines_to_read_after_fail > 0:
+            lines_to_read_after_fail -= 1
+
+        if result and lines_to_read_after_fail == 0:
             yield result
             result = list()
+
     if result:
         yield result
 
@@ -212,7 +226,7 @@
             name=job.name,
             start_time=timestamp(),
             attributes=tags,
-            description=f"Deploy job {job.url}"
+            description=f"Deployed job {job.url} by {job.triggered_by}"
         )
         print(f"(＾-＾)＿日 report will be here {rp_client.get_launch_ui_url()}")
         job_suite_id = rp_client.start_test_item(
@@ -398,6 +412,12 @@
         title=title,
     )
 
+@cli.command()
+def version():
+    package_name = 'rp-reporter'
+    info = VersionInfo(package_name)
+    print("rp-reporter " + info.version_string_with_vcs())
+
 
 if __name__ == '__main__':
     cli()
diff --git a/rp_reporter/rp_reporter/settings.py b/rp_reporter/rp_reporter/settings.py
index 9cdd7cd..c07fe2a 100644
--- a/rp_reporter/rp_reporter/settings.py
+++ b/rp_reporter/rp_reporter/settings.py
@@ -1,7 +1,8 @@
-from os import environ
-import yaml
-from pathlib import Path
 import logging
+import yaml
+
+from os import environ
+from pathlib import Path
 
 LOG = logging.getLogger("rp_reporter")
 
@@ -23,12 +24,8 @@
     raise Exception(f"{key_name} should be defined in {RP_CONFIG_FILE} or "
                     f"by environment variable")
 
-RP_APIKEY = environ.get('RP_APIKEY') or from_conf('RP_APIKEY') or call_error("RP_APIKEY")
-RP_ENDPOINT = environ.get('RP_ENDPOINT') or from_conf('RP_ENDPOINT') or call_error("RP_ENDPOINT")
-RP_PROJECT = environ.get('RP_PROJECT') or from_conf('RP_PROJECT') or call_error("RP_PROJECT")
-
-RP_LOG_FILE = environ.get('RP_LOG_FILE') or from_conf('RP_LOG_FILE')
 RP_LOGGING = environ.get('RP_LOGGING') or from_conf('RP_LOGGING') or logging.WARNING
+RP_LOG_FILE = environ.get('RP_LOG_FILE') or from_conf('RP_LOG_FILE')
 
 logging.basicConfig(level=RP_LOGGING,
                     format='%(asctime)s %(levelname)s - %(filename)s:%(lineno)d (%(funcName)s) - %(message)s',
@@ -36,6 +33,10 @@
                     filemode='w'
                     )
 
+RP_APIKEY = environ.get('RP_APIKEY') or from_conf('RP_APIKEY') or call_error("RP_APIKEY")
+RP_ENDPOINT = environ.get('RP_ENDPOINT') or from_conf('RP_ENDPOINT') or call_error("RP_ENDPOINT")
+RP_PROJECT = environ.get('RP_PROJECT') or from_conf('RP_PROJECT') or call_error("RP_PROJECT")
+
 TIME_FORMAT = "%Y-%m-%d"
 
 if __name__ == "__main__":
