Compare commits

...

8 Commits

Author SHA1 Message Date
PATRYK GUDALEWICZ (ext.) 45f37d5180 TZ and "evaluate" fix 2022-11-15 10:05:30 +00:00
Doris Ruppert (ext.) d980a5f6cd OPMAAS-2594 2022-11-15 10:05:22 +00:00
Patryk Gudalewicz a2fb1ac457 Fix for evaluate type change and timezone 2022-11-14 11:25:20 +01:00
Rene Forstner (ext.) 28d25e86e3 Jenkinsfile edited online with Bitbucket
Changed cron tab to not run automatically anymore
2022-08-24 12:46:58 +00:00
Andreas Danzer (DE-701) a3565c78a6 createReport.py online editiert mit Bitbucket 2022-08-04 14:03:57 +02:00
Andreas Danzer (DE-701) 09b0748c55 createReport.py online editiert mit Bitbucket 2022-08-04 14:02:51 +02:00
Andreas Danzer (DE-701) 5dca61c09f Jenkinsfile online editiert mit Bitbucket
added my email
2022-08-04 09:18:06 +02:00
rforstner 6c7555d956 adapting jenkinsfile 2022-05-31 15:18:33 +02:00
2 changed files with 45 additions and 25 deletions

16
Jenkinsfile vendored
View File

@ -39,7 +39,7 @@
//cron('0 8 * * *')
//every monday at 08:00
cron('0 4 * * 1')
//cron('0 4 * * 1')
}
@ -92,8 +92,8 @@
emailext subject: env.JOB_NAME,
body: 'Please find the output of the weekly QM-Report attached',
//to: 'rene.forstner@nttdata.com',
//to: 'rene.forstner@nttdata.com, stephan.oertelt@bmw.de, Mohammed.Abadel@bmw.de, michaela.jaeger@bmw.de',
to: 'rene.forstner@nttdata.com, stephan.oertelt@bmw.de, Mohammed.Abadel@bmw.de, michaela.jaeger@bmw.de, OOC-Support@bmwgroup.com, Sonja.Yildizoglu@bmw.de, Andreas.DA.Danzer@partner.bmw.de',
to: 'rene.forstner@nttdata.com, stephan.oertelt@bmw.de, Mohammed.Abadel@bmw.de, michaela.jaeger@bmw.de, Andreas.DB.Danzer@bmwgroup.com',
//to: 'rene.forstner@nttdata.com, stephan.oertelt@bmw.de, Mohammed.Abadel@bmw.de, michaela.jaeger@bmw.de, OOC-Support@bmwgroup.com, Sonja.Yildizoglu@bmw.de, Andreas.DA.Danzer@partner.bmw.de',
replyTo: 'coco-apm@bmw.de',
attachmentsPattern: '*.xlsx'
@ -107,6 +107,16 @@
}
post {
failure {
emailext subject: "${env.JOB_NAME} build ${env.BUILD_ID} failed",
body: "QM report failed, see logs for details: ${env.BUILD_URL}",
to: 'BMW.CoCo.Dynatrace@nttdata.com, ermis.wieger@nttdata.com, Andreas.DB.Danzer@bmwgroup.com'
// to post to the teams channel "0 - APM Service Desk" just uncomment the following command:
// office365ConnectorSend webhookUrl: "https://bmwgroup.webhook.office.com/webhookb2/483edc00-c925-4672-8088-8299a0139fca@ce849bab-cc1c-465b-b62e-18f07c9ac198/JenkinsCI/9aca6923685b40f794134853fcbe88f1/ff31bcee-96b3-4481-9bd8-4f74180b263b",
// message: "QM report failed, see logs for details: ${env.BUILD_URL}",
// status: 'Failure',
// color: "d00000"
}
always {
cleanWs()
}

View File

@ -8,6 +8,10 @@ import pandas as pd
import requests
import openpyxl
import argparse
import os
os.environ['TZ'] = 'Europe/Berlin' # set new timezone
time.tzset()
def make_request(url, headers,verify,parameters):
try:
@ -57,7 +61,7 @@ def getSLO(DTAPIToken, DTENV, fromDate, toDate):
"from": int(fromDate),
"to": int(toDate),
"timeFrame": "GTF",
"evaluate": True,
"evaluate": "true",
"sloSelector": "text(\"CoCo-QM-Report\")"
}
r = make_request(DTAPIURL,headers=headers,parameters=parameters,verify=verify)
@ -84,8 +88,8 @@ def get_daily_slice(start_date, end_date):
#Add the first day
tempend = tempstart + datetime.timedelta(hours=24)
startms = time.mktime(tempstart.timetuple()) * 1000
endms = time.mktime(tempend.timetuple()) * 1000
startms = time.mktime(tempstart.timetuple()) * 1000
endms = time.mktime(tempend.timetuple()) * 1000
row = {'Date':tempstart,'startTime':startms, 'endTime':endms}
days = days.append(row,ignore_index=True)
@ -93,8 +97,10 @@ def get_daily_slice(start_date, end_date):
while tempstart < end_date:
tempstart = tempstart + datetime.timedelta(hours=24)
tempend = tempstart + datetime.timedelta(hours=24)
startms = time.mktime(tempstart.timetuple()) * 1000
endms = time.mktime(tempend.timetuple()) * 1000
startms = time.mktime(tempstart.timetuple()) * 1000
endms = time.mktime(tempend.timetuple()) * 1000
row = {'Date':tempstart,'startTime':startms, 'endTime':endms}
days = days.append(row,ignore_index=True)
@ -198,6 +204,10 @@ def main():
else:
print("Invalid arguments, please use --help")
sys.exit()
#Adding 2 hours to be UTC+2 on the pipeline
fromDate = fromDate + datetime.timedelta(hours=2)
toDate = toDate + datetime.timedelta(hours=2)
print("fromDate: " + str(fromDate))
print("toDate: " + str(toDate))
@ -241,22 +251,22 @@ def main():
dailyall = pd.concat([dailyall,df],ignore_index=True)
#Calc hourly SLO
if (args.preSelect == "week"):
df = pd.DataFrame()
for index, row in hours.iterrows():
temp_df = getSLO(DTTOKEN,DTURL,row['startTime'],row['endTime'])
temp_df['Date'] = row['Date']
temp_df['HUB'] = item
df = pd.concat([df,temp_df],ignore_index=True)
#sort columns in a try block - if API is returning columns which are non exist, this will not fail the script
df[['description','Touchpoint']] = df['description'].str.split('_',expand=True)
try:
df = df[['Date', 'HUB', 'id', 'enabled', 'name', 'description', 'Touchpoint', 'evaluatedPercentage', 'errorBudget', 'status', 'error', 'target','warning', 'evaluationType', 'timeframe', 'metricExpression', 'filter']]
except Exception as e:
print("Could not rearrange columns: " + str(e))
hourlyall = pd.concat([hourlyall,df],ignore_index=True)
#if (args.preSelect == "week"):
df = pd.DataFrame()
for index, row in hours.iterrows():
temp_df = getSLO(DTTOKEN,DTURL,row['startTime'],row['endTime'])
temp_df['Date'] = row['Date']
temp_df['HUB'] = item
df = pd.concat([df,temp_df],ignore_index=True)
#sort columns in a try block - if API is returning columns which are non exist, this will not fail the script
df[['description','Touchpoint']] = df['description'].str.split('_',expand=True)
try:
df = df[['Date', 'HUB', 'id', 'enabled', 'name', 'description', 'Touchpoint', 'evaluatedPercentage', 'errorBudget', 'status', 'error', 'target','warning', 'evaluationType', 'timeframe', 'metricExpression', 'filter']]
except Exception as e:
print("Could not rearrange columns: " + str(e))
hourlyall = pd.concat([hourlyall,df],ignore_index=True)
###Calc Overall YTD SLO
yearstart = toDate.replace(month=2,day=28)
@ -308,4 +318,4 @@ def main():
writer.close()
if __name__ == "__main__":
main()
main()