diff --git a/rp_reporter/rp_reporter/batch_reporter.py b/rp_reporter/rp_reporter/batch_reporter.py
index 1d210c4..1f6ec61 100755
--- a/rp_reporter/rp_reporter/batch_reporter.py
+++ b/rp_reporter/rp_reporter/batch_reporter.py
@@ -10,8 +10,9 @@
 from typing import List, Optional
 
 import jenkins_jinny.main as jj
-from copy import deepcopy
-from .report_from_xml import timestamp, Reporter
+
+from rp_reporter.settings import TIME_FORMAT
+from rp_reporter.report_from_xml import timestamp, Reporter
 
 LOG = logging.getLogger("rp_reporter")
 
@@ -79,14 +80,12 @@
 
 def get_tags(job: jj.Build):
     tags = dict()
-    tags["start_time"] = job.start_time.strftime("%Y-%m-%d-%H-%M-%S")
+    tags["start_time"] = job.start_time.strftime(TIME_FORMAT)
 
     if context_name := job.param.OPENSTACK_CONTEXT_NAME:
         tags["openstack"] = context_name.split("/")[0]
         tags["context"] = context_name.split("/")[-1]
 
-
-
     if "mosk-24.3" in job.name:
         tags["mosk_version"] = "mosk-24.3"
     elif "mosk-25.1" in job.name:
@@ -95,6 +94,7 @@
         tags["mosk_version"] = "mosk-25.2"
     else:
         tags["mosk_version"] = "master"
+
     return tags
 
 def get_tags_from_osdpl(osdpl_file):
@@ -112,6 +112,16 @@
     else:
         tags["neutron.backend"] = "ovs"
 
+    if dvr:=jmespath.search("items[*].spec.features.neutron.dvr.enabled", osdpl_dict):
+        tags["dvr"] = dvr[0]
+    else:
+        tags["dvr"] = False
+
+    if vpnaas:=jmespath.search("items[*].spec.features.neutron.extensions.vpnaas.enabled", osdpl_dict):
+        tags["vpnaas"] = vpnaas[0]
+    else:
+        tags["vpnaas"] = False
+
     if nova_images:=jmespath.search("items[*].spec.features.nova.images.backend", osdpl_dict):
         tags["nova.images.backend"] = nova_images[0]
 
@@ -157,7 +167,6 @@
         "failureDomain:",
         "portprober_arping_target_failure",
         "ingress:[error-pages:",
-
     ]
 
     all_logs = job.get_logs()
@@ -169,7 +178,6 @@
                       item_id=subjob_item_id
                       )
         sleep(0.001)
-    # ipdb.set_trace()
     rp_client.finish_test_item(item_id=subjob_item_id,
                                status=status,
                                end_time=timestamp(),
@@ -233,10 +241,22 @@
         test_results_files = None
         match child.name:
             case "deploy-openstack-k8s-env":
+                if base_ubuntu := job.param.HEAT_BASE_IMAGE_DISTRO:
+                    tags["base_ubuntu"] = base_ubuntu
+                if masakari := job.param.INSTALL_MASAKARI:
+                    tags["masakari"] = masakari
+                if vault := job.param.INSTALL_VAULT:
+                    tags["vault"] = vault
+                if ceph := job.param.INSTALL_CEPH:
+                    tags["ceph"] = ceph
+                if telemetry := job.param.INSTALL_TELEMETRY:
+                    tags["telemetry"] = telemetry
+
                 osdpl_file = child.get_artifacts("deployed.yaml")
                 if not osdpl_file:
                     LOG.error(f"Can't find osdpl file in {job}")
                     continue
+
                 tags.update(get_tags_from_osdpl(osdpl_file))
                 rp_client.update_test_item(
                     attributes=tags,
@@ -251,9 +271,6 @@
                                if "tempest_report.xml" in file_url]
             case "stepler-runner-k8s":
                 title = "Stepler"
-                # report_path = [file_url
-                #                for file_url in child.get_link_from_description()
-                #                if "stepler_test_results.xml" in file_url ][0]
                 test_results_files = child.get_artifacts("stepler_test_results.xml")
                 if not test_results_files:
                     LOG.error(f"Can't found 'stepler_test_results.xml' in "
diff --git a/rp_reporter/rp_reporter/settings.py b/rp_reporter/rp_reporter/settings.py
index 3ca05bf..9cdd7cd 100644
--- a/rp_reporter/rp_reporter/settings.py
+++ b/rp_reporter/rp_reporter/settings.py
@@ -27,15 +27,17 @@
 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') or (Path.cwd() / "report.log")
+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
 
 logging.basicConfig(level=RP_LOGGING,
                     format='%(asctime)s %(levelname)s - %(filename)s:%(lineno)d (%(funcName)s) - %(message)s',
-                    # filename=RP_LOG_FILE,
-                    # filemode='w'
+                    filename=RP_LOG_FILE,
+                    filemode='w'
                     )
 
+TIME_FORMAT = "%Y-%m-%d"
+
 if __name__ == "__main__":
     LOG.info(f"RP_APIKEY: {RP_APIKEY}")
     LOG.info(f"RP_ENDPOINT: {RP_ENDPOINT}")
