New version of DashboardAsCode including Traffic and Latency basing on current SLOs definitions
parent
11f3c024d6
commit
7663a9fea9
|
|
@ -5,15 +5,20 @@ import argparse
|
|||
import requests
|
||||
from datetime import datetime
|
||||
from git import Repo
|
||||
from KRParser import krparser
|
||||
import os
|
||||
import re
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore")
|
||||
#set STAGING global dashboard name
|
||||
DASHBOARD_NAME = "[STAGING]Global Offboard Reliability 2.0 - "
|
||||
DASHBOARD_NAME = "[STAGING]Global Offboard Reliability 2.1 - "
|
||||
AUTHSTRING = config("BITBUCKET_USERNAME")+":"+config("BITBUCKET_TOKEN")
|
||||
CONFIG_REPO_URL = "https://"+AUTHSTRING+"@atc.bmwgroup.net/bitbucket/scm/opapm/shared_configuration.git"
|
||||
CONFIG_REPO_NAME = "shared_configuration"
|
||||
ARCHIVE_REPO_URL = "https://"+AUTHSTRING+"@atc.bmwgroup.net/bitbucket/scm/opapm/archive.git"
|
||||
ARCHIVE_REPO_NAME = "archive"
|
||||
KEYREQ_REPO_URL = "https://"+AUTHSTRING+"@atc.bmwgroup.net/bitbucket/scm/opapm/keyrequestparser.git"
|
||||
KEYREQ_REPO_NAME = "keyrequestparser"
|
||||
BUSINESS_LINES = {'DE-3':'My Journey','DE-7':'Connected Vehicle Platform','DE-4':'My Life','EC-DE':'China Services'}
|
||||
parser = argparse.ArgumentParser(description="Generate and deploy the Dynatrace Global Dashboard as Code. Auto deployment works only for STAGING dashboard",
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
|
|
@ -318,24 +323,20 @@ def create_default_tiles():
|
|||
def getSloReqCountSelector(service_names):
|
||||
selector = ""
|
||||
if(service_names["selectortype"] == "KR"):
|
||||
service_names = service_names["namestr"]
|
||||
service_names = service_names["services"]
|
||||
print("Building Keyrequest count selector for: "+service_names)
|
||||
selector = "builtin:service.keyRequest.count.total:filter(and(or(in(\"dt.entity.service_method\",entitySelector(\"type(service_method), fromRelationship.isServiceMethodOfService( type(~\"SERVICE~\"),entityName.in("+service_names+"))\"))))):splitBy()"
|
||||
elif(service_names["selectortype"] == "SRV"):
|
||||
service_names = service_names["namestr"]
|
||||
service_names = service_names["services"]
|
||||
print("Building Service requests count selector for: "+service_names)
|
||||
selector = "builtin:service.requestCount.total:filter(and(or(in(\"dt.entity.service\",entitySelector(\"type(service),entityName.in("+service_names+")\"))))):splitBy()"
|
||||
return selector
|
||||
def getSloReqTimeSelector(service_names):
|
||||
selector = ""
|
||||
if(service_names["selectortype"] == "KR"):
|
||||
service_names = service_names["namestr"]
|
||||
print("Building Keyrequest time selector for: "+service_names)
|
||||
selector = "builtin:service.keyRequest.response.server:filter(and(or(in(\"dt.entity.service_method\",entitySelector(\"type(service_method), fromRelationship.isServiceMethodOfService( type(~\"SERVICE~\"),entityName.in("+service_names+"))\"))))):splitBy()"
|
||||
selector = "builtin:service.keyRequest.response.server:filter(and(or(in(\"dt.entity.service_method\",entitySelector(\"type(service_method), fromRelationship.isServiceMethodOfService( type(~\"SERVICE~\"),entityName.in("+service_names["services"]+"))\"))))):splitBy()"
|
||||
elif(service_names["selectortype"] == "SRV"):
|
||||
service_names = service_names["namestr"]
|
||||
print("Building Service requests time selector for: "+service_names)
|
||||
selector = "builtin:service.response.server:filter(and(or(in(\"dt.entity.service\",entitySelector(\"type(service),entityName.in("+service_names+")\"))))):splitBy()"
|
||||
selector = "builtin:service.response.server:filter(and(or(in(\"dt.entity.service\",entitySelector(\"type(service),entityName.in("+service_names["services"]+")\"))))):splitBy()"
|
||||
return selector
|
||||
def getSloSrvNames(hub_config, configuration, doc, env):
|
||||
hub = ""
|
||||
|
|
@ -346,25 +347,31 @@ def getSloSrvNames(hub_config, configuration, doc, env):
|
|||
hub = "na"
|
||||
elif env=="cnprod":
|
||||
hub = "cn"
|
||||
emeasloobj = getSLO(hub,hub_config[env]["remote_url"],configuration["ids"][hub],config(doc[env][2].get('env-token-name')))
|
||||
emeaslosrvnames = []
|
||||
krp = krparser.KRParser(name=env,options=krparser.KROption.RESOLVESERVICES, config={"threads":10, "serviceLookupParams":{"fields":"tags"}, "extendResultObjects":{"env":env}}, DTAPIURL=hub_config[env]["remote_url"], DTAPIToken=config(doc[env][2].get('env-token-name')))
|
||||
sloobj = getSLO(hub,hub_config[env]["remote_url"],configuration["ids"][hub],config(doc[env][2].get('env-token-name')))
|
||||
krs = krp.parse(sloobj)
|
||||
slosrvnames = []
|
||||
outputslos = []
|
||||
selectortype = ""
|
||||
if("builtin:service.keyRequest" in emeasloobj["metricExpression"]):
|
||||
selectortype = "KR"
|
||||
rgx = re.search("type\((service|SERVICE|~\"SERVICE~\"|~SERVICE~)\),\s*entityName.(equals|in|contains)\s*\(\s*(.+?\s*\")\s*\)",emeasloobj["metricExpression"].replace("\r","").replace("\n",""),re.IGNORECASE)
|
||||
if(rgx):
|
||||
namestr = rgx.group(3)
|
||||
elif("builtin:service.keyRequest" not in emeasloobj["metricExpression"]):
|
||||
selectortype = "SRV"
|
||||
rgx = re.search("type\((service|SERVICE|~\"SERVICE~\"|~SERVICE~)\),\s*entityName.(equals|in|contains)\s*\(\s*(.+?\s*\")\s*\)",emeasloobj["metricExpression"].replace("\r","").replace("\n",""),re.IGNORECASE)
|
||||
if(rgx):
|
||||
namestr = rgx.group(3)
|
||||
return {"selectortype":selectortype, "namestr":' '.join(namestr.split())}
|
||||
for krslo in krs:
|
||||
if("builtin:service.keyRequest" in krslo.metadata["metricExpression"]):
|
||||
selectortype = "KR"
|
||||
elif("builtin:service.keyRequest" not in krslo.metadata["metricExpression"]):
|
||||
selectortype = "SRV"
|
||||
for kr in krslo.keyRequests:
|
||||
for srv in kr["services"]:
|
||||
slosrvnames.append(srv["displayName"])
|
||||
slosrvnames = list(dict.fromkeys(slosrvnames))
|
||||
for srv in slosrvnames:
|
||||
outputslos.append("~\""+srv+"~\"")
|
||||
return {"selectortype":selectortype, "services":",".join(outputslos)}
|
||||
def main(slo_path):
|
||||
configrepo = clone_repo_if_notexist(CONFIG_REPO_URL, CONFIG_REPO_NAME)
|
||||
pull_repo(configrepo)
|
||||
archiverepo = clone_repo_if_notexist(ARCHIVE_REPO_URL, ARCHIVE_REPO_NAME)
|
||||
pull_repo(archiverepo)
|
||||
keyreqrepo = clone_repo_if_notexist(KEYREQ_REPO_URL, KEYREQ_REPO_NAME)
|
||||
pull_repo(keyreqrepo)
|
||||
print("Generating dashboard tiles...")
|
||||
with open('./environment.yaml') as file:
|
||||
doc = yaml.safe_load(file)
|
||||
|
|
@ -467,4 +474,4 @@ def main(slo_path):
|
|||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main('./shared_configuration/simplified_slo_parameter.yaml')
|
||||
main('./shared_configuration/slo_parameter.yaml')
|
||||
|
|
|
|||
|
|
@ -3,4 +3,5 @@ pyyaml
|
|||
requests
|
||||
datetime
|
||||
argparse
|
||||
GitPython
|
||||
GitPython
|
||||
keyrequestparser @ git+https://atc.bmwgroup.net/bitbucket/scm/opapm/keyrequestparser.git
|
||||
Loading…
Reference in New Issue