no data for 1w

master
ermisw 2022-12-27 17:00:36 +01:00
parent 0f228a1b23
commit 481e24bc40
4 changed files with 60 additions and 10 deletions

View File

@ -56,12 +56,13 @@ def getSLO(ENV, DTAPIToken, DTENV):
return df
def write_to_excel(ignored, notExists):
def write_to_excel(ignored, notExists, noData1W):
fileName = "./KeyRequest_Report_"+ str(datetime.date.today()) +".xlsx"
writer = pd.ExcelWriter(fileName)
notExists.to_excel(writer, sheet_name='notExists')
noData1W.to_excel(writer, sheet_name='noData1W')
ignored.to_excel(writer, sheet_name='ignored')
writer.save()
@ -79,12 +80,18 @@ def getStats(krs):
for kr in [s for s in krs if s.hasNotExistingKeyRequests()==True]:
for k in kr.getNotExistingKeyRequests():
keyReuqestsNotExists.append([kr.metadata["sloName"], kr.metadata["env"], k["displayName"], k["entityId"], kr.metadata["filter"], kr.metadata["metricExpression"]])
noData1W=[]
for kr in [s for s in krs if s.hasNoData1WKeyRequests()==True]:
for k in kr.getNoData1WKeyRequests():
noData1W.append([kr.metadata["sloName"], kr.metadata["env"], k["displayName"], k["entityId"], kr.metadata["filter"], kr.metadata["metricExpression"]])
columns =['slo', 'env', 'displayName','entityId', 'filter', 'metricExpression']
ignored=pd.DataFrame(tmpIgnoredList, columns=columns, dtype = float)
notExists=pd.DataFrame(keyReuqestsNotExists, columns = columns, dtype = float)
noData_1W=pd.DataFrame(noData1W, columns = columns, dtype = float)
return ignored, notExists
return ignored, notExists, noData_1W
def main(slo_path):
@ -114,8 +121,8 @@ def main(slo_path):
resultSlos.extend(krs)
ignoerd,notExists= getStats(resultSlos)
write_to_excel(ignoerd,notExists)
ignoerd,notExists, noData1W= getStats(resultSlos)
write_to_excel(ignoerd, notExists, noData1W)
if __name__ == "__main__":
main('./slo_parameter.yaml')

View File

@ -14,11 +14,11 @@ euprod:
- env-url: "https://onb44935.live.dynatrace.com"
- env-token-name: "NAPREPROD_TOKEN_VAR"
- jenkins: "https://jaws.bmwgroup.net/opapm/"
# naprod:
# - name: "naprod"
# - env-url: "https://wgv50241.live.dynatrace.com"
# - env-token-name: "NAPROD_TOKEN_VAR"
# - jenkins: "https://jaws.bmwgroup.net/opapm/"
naprod:
- name: "naprod"
- env-url: "https://wgv50241.live.dynatrace.com"
- env-token-name: "NAPROD_TOKEN_VAR"
- jenkins: "https://jaws.bmwgroup.net/opapm/"
# cnprod:
# - name: "cnprod"
# - env-url: "https://dyna-synth-cn.bmwgroup.com.cn/e/b921f1b9-c00e-4031-b9d1-f5a0d530757b"

View File

@ -59,10 +59,13 @@ class KeyRequestGroup(MutableSequence):
query+=",entityName.in(\""+'","'.join(val["methods"])+"\")"
val["existsQuery"]= query
def insert(self, ii, val):
self.createExistsQuery(val)
self._list.insert(ii, val)
@ -91,6 +94,16 @@ class KR:
return True
return False
def getNoData1WKeyRequests(self):
return [k for k in self.keyRequests if k['hasData_1W']==False and k['exists']==True]
def hasNoData1WKeyRequests(self):
for k in self.keyRequests:
if k['hasData_1W']==False and k['exists'] == True:
return True
return False
def checkKeyRequestsHasData(self):

View File

@ -106,6 +106,36 @@ class KRParser:
method["entityId"]=found[0]["entityId"]
else:
method["exists"]=False
def checkKeyRequetsHasData(self,kr, DTAPIURL, DTAPIToken):
DTAPIURL = DTAPIURL + "/api/v2/metrics/query"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Api-Token ' + DTAPIToken
}
existingKRs=[k for k in kr.keyRequests if k["exists"]==True]
result=[]
if len(existingKRs) > 0:
query='builtin:service.keyRequest.count.total:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),entityId(~"'+"~\",~\"".join([s["entityId"] for s in existingKRs])+'~")"))))):splitBy("dt.entity.service_method"):sort(value(auto,descending)):limit(20)'
params={"metricSelector": query, "resolution":"1d", "from":"now-1w"}
response = helper.get_request(DTAPIURL, headers, params)
result = (response.json())['result'][0]['data']
for k in kr.keyRequests:
if k["exists"]==False:
k['hasData_1W']=None
if len(result)> 0:
if len([r for r in result if k["entityId"] in r['dimensions'] and len(r['values']) > 0]) > 0:
k['hasData_1W']=True
else:
k['hasData_1W']=False
@ -125,7 +155,7 @@ class KRParser:
self.checkKeyRequetsExists(kr,self.DTAPIURL, self.DTAPIToken)
if KROption.VALIDATE_HASDATA in self.options:
x=0
self.checkKeyRequetsHasData(kr,self.DTAPIURL, self.DTAPIToken)
return kr