FlowAnalyser/koerselsOverblikUtils.py
2023-09-11 10:53:50 +02:00

118 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime
from typing import Dict, List
from sysjobs import Sysjobs
class SysjobsGroup:
name = None
listOfSysjobsInGroup:List['Sysjobs'] = []
def __init__(self,name,sysjobs:List['Sysjobs']):
self.name=name
if(sysjobs!=None and len(sysjobs)>0):
self.listOfSysjobsInGroup=sysjobs
def addToGroup(self,sysjob:Sysjobs):
self.listOfSysjobsInGroup.append(sysjob)
def getSysjobsAlike(self,stepId,antalDage,ugeDage):
sysjobsAlike=SysjobsAlike(self.name)
sysjobsAlike
sysjobsAlike.stepId=stepId
sysjobsAlike.antalDage=antalDage
sysjobsAlike.ugeDage=ugeDage
for job in self.listOfSysjobsInGroup:
if(not isinstance(job,Sysjobs)):
job=job[0]
medianDag=job.getMedianDag(stepId,antalDage,ugeDage)
if sysjobsAlike.startTime is None or sysjobsAlike.startTime>medianDag[0]:
sysjobsAlike.startTime=medianDag[0]
if sysjobsAlike.endTime is None or sysjobsAlike.endTime<medianDag[1]:
sysjobsAlike.endTime=medianDag[1]
return sysjobsAlike
class SysjobsAlike:
name=None
startTime=None
endTime=None
stepId=None
antalDage=None
ugeDage=None
def __init__(self,name):
self.name=name
def getName(self):
return self.name
def getMedianDag(self,stepId,antalDage,ugeDage):
medianDag=[self.startTime,self.endTime]
return medianDag
def mergeOneMore(self,sysjobs:Sysjobs):
medianDag=sysjobs.getMedianDag(self.stepId,self.antalDage,self.ugeDage)
if self.startTime>medianDag[0]:
self.startTime=medianDag[0]
if self.endTime<medianDag[1]:
self.endTime=medianDag[1]
def timeRangeMerge(mainList : List['Sysjobs'], name,stepId,antalDage,ugeDage):
sysjobalike = SysjobsAlike(name)
sysjobalike.stepId=stepId
sysjobalike.antalDage=antalDage
sysjobalike.ugeDage=ugeDage
for job in mainList:
medianDag=job.getMedianDag(stepId,antalDage,ugeDage)
if sysjobalike.startTime is None or sysjobalike.startTime>medianDag[0]:
sysjobalike.startTime=medianDag[0]
if sysjobalike.endTime is None or sysjobalike.endTime<medianDag[1]:
sysjobalike.endTime=medianDag[1]
return sysjobalike
def convertToAlike(mainList : List,stepId,antalDage,ugeDage):
returnList=[]
for job in mainList:
if not isinstance(job,Sysjobs) and isinstance(job[0],Sysjobs):
job=job[0]
jobAlike=SysjobsAlike(job.name)
jobAlike.stepId=stepId
jobAlike.antalDage=antalDage
jobAlike.ugeDage=ugeDage
medianDag=job.getMedianDag(stepId,antalDage,ugeDage)
if len(medianDag)==0:
continue
jobAlike.startTime=medianDag[0]
jobAlike.endTime=medianDag[1]
returnList.append(jobAlike)
return returnList
def getOverblikDag(session,dag,resList,):
return
class OverblikDag:
session=None
dagsList:Dict={}
def __init__(self,session):
self.session=session
def getKoerselsOverblikForDag(self,dag):
if(self.dagsList.get(dag)==None):
listSysjobs=[]
startStobjobs:Sysjobs = []
startStobjobs.append(Sysjobs.getSysjob(self.session,'BI - Flow - Batch Start Daglig kl. 20.00',True)[0][0])
startStobjobs.append(Sysjobs.getSysjob(self.session,'BI - Flow - Batch Slut Daglig kl. 20.00',True)[0][0])
startStopGroup=SysjobsGroup("Batch Kørsel",startStobjobs)
sysjobs=Sysjobs.getSysjob(self.session,'% - Admin - %',False)
sysjobs=[a for a in sysjobs if a[0].name not in ["BI - Admin - Kill Blocking Queries","BI - Admin - Flow Job Restarter"]]
adminPostJobs=SysjobsGroup("Batch kørsel post jobs - Admin",[a for a in sysjobs if a[0].name in ["BI - Admin - Log TableRowCounts","BI - Admin - BiBackup","BI - Admin - shrink staging filgruppe samt log filer","BI - Admin - Dimension and Map Table checker","BI - Admin - Log Post Batch Flow",
"BI - Admin - Sikkerhedskontrol","BI - Admin - Check Indexes"]])
sysjobs=[a for a in sysjobs if a[0].name not in [a[0].name for a in adminPostJobs.listOfSysjobsInGroup]]
sysjobs.extend(startStobjobs)
sysjobs=convertToAlike(sysjobs,0,30,dag)
sysjobs.append(startStopGroup.getSysjobsAlike(0,30,dag))
sysjobs.append(adminPostJobs.getSysjobsAlike(0,30,dag))
self.dagsList[dag]=sorted(sysjobs, key=lambda x: x.getMedianDag(0,30,dag)[0])
return self.dagsList.get(dag)