Compare commits
8 Commits
21745330fc
...
45f37d5180
| Author | SHA1 | Date |
|---|---|---|
|
|
45f37d5180 | |
|
|
d980a5f6cd | |
|
|
a2fb1ac457 | |
|
|
28d25e86e3 | |
|
|
a3565c78a6 | |
|
|
09b0748c55 | |
|
|
5dca61c09f | |
|
|
6c7555d956 |
|
|
@ -39,7 +39,7 @@
|
||||||
//cron('0 8 * * *')
|
//cron('0 8 * * *')
|
||||||
|
|
||||||
//every monday at 08:00
|
//every monday at 08:00
|
||||||
cron('0 4 * * 1')
|
//cron('0 4 * * 1')
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -92,8 +92,8 @@
|
||||||
emailext subject: env.JOB_NAME,
|
emailext subject: env.JOB_NAME,
|
||||||
body: 'Please find the output of the weekly QM-Report attached',
|
body: 'Please find the output of the weekly QM-Report attached',
|
||||||
//to: 'rene.forstner@nttdata.com',
|
//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, 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',
|
//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',
|
replyTo: 'coco-apm@bmw.de',
|
||||||
attachmentsPattern: '*.xlsx'
|
attachmentsPattern: '*.xlsx'
|
||||||
|
|
||||||
|
|
@ -107,6 +107,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
post {
|
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 {
|
always {
|
||||||
cleanWs()
|
cleanWs()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,10 @@ import pandas as pd
|
||||||
import requests
|
import requests
|
||||||
import openpyxl
|
import openpyxl
|
||||||
import argparse
|
import argparse
|
||||||
|
import os
|
||||||
|
|
||||||
|
os.environ['TZ'] = 'Europe/Berlin' # set new timezone
|
||||||
|
time.tzset()
|
||||||
|
|
||||||
def make_request(url, headers,verify,parameters):
|
def make_request(url, headers,verify,parameters):
|
||||||
try:
|
try:
|
||||||
|
|
@ -57,7 +61,7 @@ def getSLO(DTAPIToken, DTENV, fromDate, toDate):
|
||||||
"from": int(fromDate),
|
"from": int(fromDate),
|
||||||
"to": int(toDate),
|
"to": int(toDate),
|
||||||
"timeFrame": "GTF",
|
"timeFrame": "GTF",
|
||||||
"evaluate": True,
|
"evaluate": "true",
|
||||||
"sloSelector": "text(\"CoCo-QM-Report\")"
|
"sloSelector": "text(\"CoCo-QM-Report\")"
|
||||||
}
|
}
|
||||||
r = make_request(DTAPIURL,headers=headers,parameters=parameters,verify=verify)
|
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
|
#Add the first day
|
||||||
tempend = tempstart + datetime.timedelta(hours=24)
|
tempend = tempstart + datetime.timedelta(hours=24)
|
||||||
startms = time.mktime(tempstart.timetuple()) * 1000
|
startms = time.mktime(tempstart.timetuple()) * 1000
|
||||||
endms = time.mktime(tempend.timetuple()) * 1000
|
endms = time.mktime(tempend.timetuple()) * 1000
|
||||||
|
|
||||||
row = {'Date':tempstart,'startTime':startms, 'endTime':endms}
|
row = {'Date':tempstart,'startTime':startms, 'endTime':endms}
|
||||||
days = days.append(row,ignore_index=True)
|
days = days.append(row,ignore_index=True)
|
||||||
|
|
@ -93,8 +97,10 @@ def get_daily_slice(start_date, end_date):
|
||||||
while tempstart < end_date:
|
while tempstart < end_date:
|
||||||
tempstart = tempstart + datetime.timedelta(hours=24)
|
tempstart = tempstart + datetime.timedelta(hours=24)
|
||||||
tempend = 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}
|
row = {'Date':tempstart,'startTime':startms, 'endTime':endms}
|
||||||
days = days.append(row,ignore_index=True)
|
days = days.append(row,ignore_index=True)
|
||||||
|
|
@ -198,6 +204,10 @@ def main():
|
||||||
else:
|
else:
|
||||||
print("Invalid arguments, please use --help")
|
print("Invalid arguments, please use --help")
|
||||||
sys.exit()
|
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("fromDate: " + str(fromDate))
|
||||||
print("toDate: " + str(toDate))
|
print("toDate: " + str(toDate))
|
||||||
|
|
||||||
|
|
@ -241,22 +251,22 @@ def main():
|
||||||
dailyall = pd.concat([dailyall,df],ignore_index=True)
|
dailyall = pd.concat([dailyall,df],ignore_index=True)
|
||||||
|
|
||||||
#Calc hourly SLO
|
#Calc hourly SLO
|
||||||
if (args.preSelect == "week"):
|
#if (args.preSelect == "week"):
|
||||||
df = pd.DataFrame()
|
df = pd.DataFrame()
|
||||||
for index, row in hours.iterrows():
|
for index, row in hours.iterrows():
|
||||||
temp_df = getSLO(DTTOKEN,DTURL,row['startTime'],row['endTime'])
|
temp_df = getSLO(DTTOKEN,DTURL,row['startTime'],row['endTime'])
|
||||||
temp_df['Date'] = row['Date']
|
temp_df['Date'] = row['Date']
|
||||||
temp_df['HUB'] = item
|
temp_df['HUB'] = item
|
||||||
df = pd.concat([df,temp_df],ignore_index=True)
|
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
|
#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)
|
df[['description','Touchpoint']] = df['description'].str.split('_',expand=True)
|
||||||
try:
|
try:
|
||||||
df = df[['Date', 'HUB', 'id', 'enabled', 'name', 'description', 'Touchpoint', 'evaluatedPercentage', 'errorBudget', 'status', 'error', 'target','warning', 'evaluationType', 'timeframe', 'metricExpression', 'filter']]
|
df = df[['Date', 'HUB', 'id', 'enabled', 'name', 'description', 'Touchpoint', 'evaluatedPercentage', 'errorBudget', 'status', 'error', 'target','warning', 'evaluationType', 'timeframe', 'metricExpression', 'filter']]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Could not rearrange columns: " + str(e))
|
print("Could not rearrange columns: " + str(e))
|
||||||
hourlyall = pd.concat([hourlyall,df],ignore_index=True)
|
hourlyall = pd.concat([hourlyall,df],ignore_index=True)
|
||||||
|
|
||||||
###Calc Overall YTD SLO
|
###Calc Overall YTD SLO
|
||||||
yearstart = toDate.replace(month=2,day=28)
|
yearstart = toDate.replace(month=2,day=28)
|
||||||
|
|
@ -308,4 +318,4 @@ def main():
|
||||||
writer.close()
|
writer.close()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue