diff --git a/convert.py b/convert.py index 3da34ff..ee8cdf6 100644 --- a/convert.py +++ b/convert.py @@ -9,12 +9,11 @@ from nested_lookup import nested_lookup from pathlib import Path # defines -METRIC_KEYS = 4 SLOS_FOLDER_BASENAME = os.path.basename("slos") OUTPUT_FOLDER_BASENAME = os.path.basename("output") TEMPLATE_FOLDER_BASENAME = os.path.basename("templates") TEMPLATE_FILES = { - "terraform-template.j2":["builtin:service.keyRequest.errors.fivexx.rate"], + "terraform-template.j2": ["builtin:service.keyRequest.errors.fivexx.rate"], "terraform-template-2.j2":["builtin:service.keyRequest.errors.server.successCount", "builtin:service.keyRequest.count.server"], "terraform-template-3.j2":["builtin:service.keyRequest.errors.fivexx.count", @@ -31,28 +30,28 @@ FOLDERS = {"My Journey":"DE-3", "China Services":"EC-DE"} # methods -def homogenize_keyRequests(keyRequests): - for metric in metrics: - if len(metrics) < METRIC_KEYS: - metrics.append('') - return metrics +def homogenize_metrics(metricList): + for metric in metricList: + if len(metricList) < 4: + metricList.append('') + return metricList -def homogenize_services(services): - for metric in metrics: - if len(metrics) < METRIC_KEYS: - metrics.append('') - return metrics +def homogenize_services(serviceList): + for service in serviceList: + if len(serviceList) < 2: + serviceList.append('') + return serviceList -def homogenize_metrics(metrics): - for metric in metrics: - if len(metrics) < METRIC_KEYS: - metrics.append('') - return metrics +def homogenize_keyRequests(keyRequestLists): + for keyRequestList in keyRequestLists: + if len(keyRequestLists) < 2: + keyRequestLists.append('') + return keyRequestLists - -def template_logic(metrics,TEMPLATE_FILES): - for template,metric in TEMPLATE_FILES.items(): - if set(metrics) == set(metric): +def template_logic(metricList): + for template,metricTemplate in TEMPLATE_FILES.items(): + if all([item in metricTemplate for item in metricList]): + # if set(metricList) == set(metricTemplate): return template print("Problem occured while matching metric: Exiting program...") sys.exit(0) @@ -68,10 +67,11 @@ def main(configFile): doc_url = None slo_definition_tresholds_warning = None slo_definition_tresholds_failure = None - metrics = {} - services = {} - keyRequests = {} environments = {} + template = None + metricList = [] + serviceList = [] + keyRequestList = [] try: # read yaml file @@ -101,43 +101,41 @@ def main(configFile): if "CN-Prod" in slo["slo_definition"]: environments["CN-Prod"] = slo["slo_definition"][env] - # for environment in environments: - # metrics[environment] = nested_lookup('metric',slo["slo_definition"][environment]) - - # for m,metric in enumerate(metrics): - # services[metric] = '~",\n\t\t\t\t~"'.join(nested_lookup('service',slo["slo_definition"][environment][m]["filter"])) - - # keyRequests[environment] = nested_lookup('keyRequests',slo["slo_definition"][environment]) - # keyRequests[environment] = '~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequests[environment])) - - # read template file jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATE_FOLDER_BASENAME), trim_blocks=True, lstrip_blocks=True) # generate terraform file - for environment in environments: + for i,(environment,ev) in enumerate(environments.items()): folder_path = os.path.join(cwd,OUTPUT_FOLDER_BASENAME,environment.replace('-','_'),"slo") if not os.path.exists(folder_path): os.makedirs(folder_path) - with open(os.path.join(folder_path,module_name+".tf"),"w+") as file: - t = template_logic(nested_lookup('metric',environments[environment]),TEMPLATE_FILES) - m = homogenize_metrics(nested_lookup('metric',environments[environment])) - s = homogenize_services(nested_lookup('service',environments[environment])) - k = homogenize_keyRequests(nested_lookup('keyRequests',environments[environment])) - jinja_template = jinja_environment.get_template(t) - file.write(jinja_template.render(module=module_name, - slo_name=slo_name, - metric=m[0],metricA=m[0],metricB=m[1],metricC=m[2],metricD=m[3], - description=description, + template = template_logic(nested_lookup('metric',ev)) + metricList = homogenize_metrics(nested_lookup('metric',ev)) + + for service in ev[i]["filter"]: + serviceList.append(nested_lookup('service',service)) + keyRequestList.append(nested_lookup('keyRequests',service)) + i = 0 - services=s[0],servicesA=s[0],servicesB=s[1], - keyRequests=k[0],keyRequestsA=k[0],keyRequestsB=k[1], - - target=slo_definition_tresholds_failure, - warning=slo_definition_tresholds_warning)) + with open(os.path.join(folder_path,module_name+".tf"),"w+") as file: + jinja_template = jinja_environment.get_template(template) + file.write(jinja_template.render(module=module_name, + slo_name=slo_name, + metric=metricList[0], + metricA=metricList[0],metricB=metricList[1],metricC=metricList[2],metricD=metricList[3], + description=description, + services='~",\n\t\t\t\t~"'.join(serviceList[0]), + servicesA='~",\n\t\t\t\t~"'.join(serviceList[0]),servicesB='~",\n\t\t\t\t~"'.join(serviceList[1]), + keyRequests='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequestList[0])), + keyRequestsA='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequestList[0])), + keyRequestsB='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequestList[1])), + target=slo_definition_tresholds_failure, + warning=slo_definition_tresholds_warning)) + + if __name__ == "__main__": # pre-initialization get current working directory diff --git a/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf b/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf deleted file mode 100644 index 0ef7b34..0000000 --- a/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf +++ /dev/null @@ -1,51 +0,0 @@ -module TP_Mobile_Send2VehicleMGU { - - source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - - name = "TP_Mobile_Send2VehicleMGU" - - description = "2.0 SLO Mobile" - - # entity selector object - filter = "" - - # metric expression of the calculation as done in data explorer ui - metric_expression = <