118 lines
4.6 KiB
Python
118 lines
4.6 KiB
Python
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)
|