--- /dev/null
+# to add a new parameter in the config file,
+# the CONF object in config.ini must be updated
+[elastic]
+url = http://localhost:9200
+creds =
+
+[output]
+# elasticsearch or console
+destination = elasticsearch
+
+[kibana]
+url = http://10.63.243.17/kibana/app/kibana
+js = true
+js_path = /usr/share/nginx/html/kibana_dashboards/conf.js
--- /dev/null
+#! /usr/bin/env python
+
+from ConfigParser import SafeConfigParser, NoOptionError
+
+
+class ParseError(Exception):
+ """
+ Custom exception class for config file
+ """
+
+ def __init__(self, message):
+ self.msg = message
+
+ def __str__(self):
+ return 'error parsing config file : %s' % self.msg
+
+
+class APIConfig:
+ """
+ The purpose of this class is to load values correctly from the config file.
+ Each key is declared as an attribute in __init__() and linked in parse()
+ """
+
+ def __init__(self):
+ self._default_config_location = "./config.ini"
+ self.elastic_url = 'http://localhost:9200'
+ self.elastic_creds = None
+ self.destination = 'elasticsearch'
+ self.kibana_url = None
+ self.is_js = True
+ self.js_path = None
+
+ def _get_str_parameter(self, section, param):
+ try:
+ return self._parser.get(section, param)
+ except NoOptionError:
+ raise ParseError("[%s.%s] parameter not found" % (section, param))
+
+ def _get_int_parameter(self, section, param):
+ try:
+ return int(self._get_str_parameter(section, param))
+ except ValueError:
+ raise ParseError("[%s.%s] not an int" % (section, param))
+
+ def _get_bool_parameter(self, section, param):
+ result = self._get_str_parameter(section, param)
+ if str(result).lower() == 'true':
+ return True
+ if str(result).lower() == 'false':
+ return False
+
+ raise ParseError(
+ "[%s.%s : %s] not a boolean" % (section, param, result))
+
+ @staticmethod
+ def parse(config_location=None):
+ obj = APIConfig()
+
+ if config_location is None:
+ config_location = obj._default_config_location
+
+ obj._parser = SafeConfigParser()
+ obj._parser.read(config_location)
+ if not obj._parser:
+ raise ParseError("%s not found" % config_location)
+
+ # Linking attributes to keys from file with their sections
+ obj.elastic_url = obj._get_str_parameter("elastic", "url")
+ obj.elastic_creds = obj._get_str_parameter("elastic", "creds")
+ obj.destination = obj._get_str_parameter("output", "destination")
+ obj.kibana_url = obj._get_str_parameter("kibana", "url")
+ obj.is_js = obj._get_bool_parameter("kibana", "js")
+ obj.js_path = obj._get_str_parameter("kibana", "js_path")
+
+ return obj
+
+ def __str__(self):
+ return "elastic_url = %s \n" \
+ "elastic_creds = %s \n" \
+ "destination = %s \n" \
+ "kibana_url = %s \n" \
+ "is_js = %s \n" \
+ "js_path = %s \n" % (self.elastic_url,
+ self.elastic_creds,
+ self.destination,
+ self.kibana_url,
+ self.is_js,
+ self.js_path)
import argparse
-import conf_utils
import logger_utils
import shared_utils
+import testcases_parser
+from config import APIConfig
logger = logger_utils.KibanaDashboardLogger('elastic2kibana').get
+parser = argparse.ArgumentParser()
+parser.add_argument("-c", "--config-file",
+ dest='config_file',
+ help="Config file location")
+
+args = parser.parse_args()
+CONF = APIConfig().parse(args.config_file)
+
_installers = {'fuel', 'apex', 'compass', 'joid'}
:return: list of KibanaDashboards
"""
kibana_dashboards = []
- for project, case_dicts in conf_utils.testcases_yaml.items():
+ for project, case_dicts in testcases_parser.testcases_yaml.items():
for case in case_dicts:
case_name = case.get('name')
visualizations = case.get('visualizations')
if __name__ == '__main__':
- parser = argparse.ArgumentParser(description='Create Kibana dashboards from data in elasticsearch')
- parser.add_argument('-e', '--elasticsearch-url', default='http://localhost:9200',
- help='the url of elasticsearch, defaults to http://localhost:9200')
-
- parser.add_argument('-js', '--generate_js_inputs', action='store_true',
- help='Use this argument to generate javascript inputs for kibana landing page')
-
- parser.add_argument('--js_path', default='/usr/share/nginx/html/kibana_dashboards/conf.js',
- help='Path of javascript file with inputs for kibana landing page')
-
- parser.add_argument('-k', '--kibana_url', default='https://testresults.opnfv.org/kibana/app/kibana',
- help='The url of kibana for javascript inputs')
-
- parser.add_argument('-u', '--elasticsearch-username', default=None,
- help='The username with password for elasticsearch in format username:password')
-
- args = parser.parse_args()
- base_elastic_url = args.elasticsearch_url
- generate_inputs = args.generate_js_inputs
- input_file_path = args.js_path
- kibana_url = args.kibana_url
- es_creds = args.elasticsearch_username
+ base_elastic_url = CONF.elastic_url
+ generate_inputs = CONF.is_js
+ input_file_path = CONF.js_path
+ kibana_url = CONF.kibana_url
+ es_creds = CONF.elastic_creds
dashboards = construct_dashboards()
import argparse
-import conf_utils
import logger_utils
import mongo2elastic_format
import shared_utils
+import testcases_parser
+from config import APIConfig
logger = logger_utils.KibanaDashboardLogger('mongo2elastic').get
-parser = argparse.ArgumentParser(description='Modify and filter mongo json data for elasticsearch')
-parser.add_argument('-od', '--output-destination',
- default='elasticsearch',
- choices=('elasticsearch', 'stdout'),
- help='defaults to elasticsearch')
-
-parser.add_argument('-ml', '--merge-latest', default=0, type=int, metavar='N',
+parser = argparse.ArgumentParser()
+parser.add_argument("-c", "--config-file",
+ dest='config_file',
+ help="Config file location")
+parser.add_argument('-ld', '--latest-days',
+ default=0,
+ type=int,
+ metavar='N',
help='get entries old at most N days from mongodb and'
' parse those that are not already in elasticsearch.'
' If not present, will get everything from mongodb, which is the default')
-parser.add_argument('-e', '--elasticsearch-url', default='http://localhost:9200',
- help='the url of elasticsearch, defaults to http://localhost:9200')
-
-parser.add_argument('-u', '--elasticsearch-username', default=None,
- help='The username with password for elasticsearch in format username:password')
-
args = parser.parse_args()
+CONF = APIConfig().parse(args.config_file)
+
tmp_docs_file = './mongo-{}.json'.format(uuid.uuid4())
self.existed_docs = []
def export(self):
- if days > 0:
- past_time = datetime.datetime.today() - datetime.timedelta(days=days)
+ if self.days > 0:
+ past_time = datetime.datetime.today() - datetime.timedelta(days=self.days)
query = '''{{
"project_name": "{}",
"case_name": "{}",
exit(-1)
def get_existed_docs(self):
- self.existed_docs = shared_utils.get_elastic_docs_by_days(self.elastic_url, self.creds, days)
+ self.existed_docs = shared_utils.get_elastic_docs_by_days(self.elastic_url, self.creds, self.days)
return self
def publish(self):
os.remove(tmp_docs_file)
-if __name__ == '__main__':
- base_elastic_url = urlparse.urljoin(args.elasticsearch_url, '/test_results/mongo2elastic')
- to = args.output_destination
- days = args.merge_latest
- es_creds = args.elasticsearch_username
+def main():
+ base_elastic_url = urlparse.urljoin(CONF.elastic_url, '/test_results/mongo2elastic')
+ to = CONF.destination
+ days = args.latest_days
+ es_creds = CONF.elastic_creds
if to == 'elasticsearch':
to = base_elastic_url
- for project, case_dicts in conf_utils.testcases_yaml.items():
+ for project, case_dicts in testcases_parser.testcases_yaml.items():
for case_dict in case_dicts:
case = case_dict.get('name')
- fmt = conf_utils.compose_format(case_dict.get('format'))
+ fmt = testcases_parser.compose_format(case_dict.get('format'))
DocumentsPublisher(project,
case,
fmt,
base_elastic_url,
es_creds,
to).export().get_existed_docs().publish()
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file