From 3f672f0e918c5c461008a7fc0e53e63b79083d34 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 6 Dec 2017 09:07:43 +0800 Subject: remove deprecated dashboard code dashboard is not used anymore, substitute by Bitergia dashboard Change-Id: Iccfd634d0d404d23b09d88454dab38425359a2b8 Signed-off-by: SerenaFeng --- dashboard/dashboard/mongo2elastic/main.py | 259 ------------------------------ 1 file changed, 259 deletions(-) delete mode 100644 dashboard/dashboard/mongo2elastic/main.py (limited to 'dashboard/dashboard/mongo2elastic/main.py') diff --git a/dashboard/dashboard/mongo2elastic/main.py b/dashboard/dashboard/mongo2elastic/main.py deleted file mode 100644 index e33252d..0000000 --- a/dashboard/dashboard/mongo2elastic/main.py +++ /dev/null @@ -1,259 +0,0 @@ -#! /usr/bin/env python - -import datetime -import json -import os -import subprocess -import traceback -import uuid - -import argparse - -from dashboard.common import elastic_access -from dashboard.common import logger_utils -from dashboard.conf import testcases -from dashboard.conf.config import APIConfig -from dashboard.mongo2elastic import format - -logger = logger_utils.DashboardLogger('mongo2elastic').get - -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') - -args = parser.parse_args() -CONF = APIConfig().parse(args.config_file) - - -tmp_docs_file = './mongo-{}.json'.format(uuid.uuid4()) - - -class DocumentVerification(object): - - def __init__(self, doc): - super(DocumentVerification, self).__init__() - self.doc = doc - self.doc_id = doc['_id'] if '_id' in doc else None - self.skip = False - - def mandatory_fields_exist(self): - mandatory_fields = ['installer', - 'pod_name', - 'version', - 'case_name', - 'project_name', - 'details', - 'start_date', - 'scenario'] - for key, value in self.doc.items(): - if key in mandatory_fields: - if value is None: - logger.info("Skip testcase '%s' because field " - "'%s' missing" % (self.doc_id, key)) - self.skip = True - else: - mandatory_fields.remove(key) - else: - del self.doc[key] - - if len(mandatory_fields) > 0: - logger.info("Skip testcase '%s' because field(s) '%s' missing" % - (self.doc_id, mandatory_fields)) - self.skip = True - - return self - - def modify_start_date(self): - field = 'start_date' - if field in self.doc: - self.doc[field] = self._fix_date(self.doc[field]) - - return self - - def modify_scenario(self): - scenario = 'scenario' - version = 'version' - - if (scenario not in self.doc) or \ - (scenario in self.doc and self.doc[scenario] is None): - self.doc[scenario] = self.doc[version] - - return self - - def is_skip(self): - return self.skip - - def _fix_date(self, date_string): - if date_string == 'None': - return None - if isinstance(date_string, dict): - return date_string['$date'] - if 'T' not in date_string: - date_string = date_string[:-3].replace(' ', 'T') - if not date_string.endswith('Z'): - date_string += 'Z' - - return date_string - - -class DocumentPublisher(object): - - def __init__(self, doc, fmt, exist_docs, creds, elastic_url): - self.doc = doc - self.fmt = fmt - self.creds = creds - self.exist_docs = exist_docs - self.elastic_url = elastic_url - self.is_formatted = True - - def format(self): - try: - if self._verify_document() and self.fmt: - self.is_formatted = vars(format)[self.fmt](self.doc) - else: - self.is_formatted = False - except Exception: - logger.error("Fail in format testcase[%s]\nerror message: %s" % - (self.doc, traceback.format_exc())) - self.is_formatted = False - finally: - return self - - def publish(self): - if self.is_formatted and self.doc not in self.exist_docs: - self._publish() - - def _publish(self): - status, data = elastic_access.publish_docs( - self.elastic_url, self.creds, self.doc) - if status > 300: - logger.error('Publish record[{}] failed, due to [{}]' - .format(self.doc, - json.loads(data)['error']['reason'])) - - def _fix_date(self, date_string): - if isinstance(date_string, dict): - return date_string['$date'] - else: - return date_string[:-3].replace(' ', 'T') + 'Z' - - def _verify_document(self): - return not (DocumentVerification(self.doc) - .modify_start_date() - .modify_scenario() - .mandatory_fields_exist() - .is_skip()) - - -class DocumentsPublisher(object): - - def __init__(self, project, case, fmt, days, elastic_url, creds): - self.project = project - self.case = case - self.fmt = fmt - self.days = days - self.elastic_url = elastic_url - self.creds = creds - self.existed_docs = [] - - def export(self): - if self.days > 0: - past_time = datetime.datetime.today( - ) - datetime.timedelta(days=self.days) - query = '''{{ - "project_name": "{}", - "case_name": "{}", - "start_date": {{"$gt" : "{}"}} - }}'''.format(self.project, self.case, past_time) - else: - query = '''{{ - "project_name": "{}", - "case_name": "{}" - }}'''.format(self.project, self.case) - cmd = ['mongoexport', - '--db', 'test_results_collection', - '--collection', 'results', - '--query', '{}'.format(query), - '--out', '{}'.format(tmp_docs_file)] - try: - subprocess.check_call(cmd) - return self - except Exception as err: - logger.error("export mongodb failed: %s" % err) - self._remove() - exit(-1) - - def get_exists(self): - if self.days == 0: - body = '''{{ - "query": {{ - "bool": {{ - "must": [ - {{ "match": {{ "project_name": "{}" }} }}, - {{ "match": {{ "case_name": "{}" }} }} - ] - }} - }} - }}'''.format(self.project, self.case) - elif self.days > 0: - body = '''{{ - "query": {{ - "bool": {{ - "must": [ - {{ "match": {{ "project_name": "{}" }} }}, - {{ "match": {{ "case_name": "{}" }} }} - ], - "filter": {{ - "range": {{ - "start_date": {{ "gte": "now-{}d" }} - }} - }} - }} - }} - }}'''.format(self.project, self.case, self.days) - else: - raise Exception('Update days must be non-negative') - self.existed_docs = elastic_access.get_docs( - self.elastic_url, self.creds, body) - return self - - def publish(self): - fdocs = None - try: - with open(tmp_docs_file) as fdocs: - for doc_line in fdocs: - DocumentPublisher(json.loads(doc_line), - self.fmt, - self.existed_docs, - self.creds, - self.elastic_url).format().publish() - finally: - if fdocs: - fdocs.close() - self._remove() - - def _remove(self): - if os.path.exists(tmp_docs_file): - os.remove(tmp_docs_file) - - -def main(): - for project, case_dicts in testcases.testcases_yaml.items(): - for case_dict in case_dicts: - case = case_dict.get('name') - fmt = testcases.compose_format(case_dict.get('format')) - DocumentsPublisher(project, - case, - fmt, - args.latest_days, - CONF.index_url, - CONF.es_creds).export().get_exists().publish() -- cgit 1.2.3-korg