From 127243803e10b82a901c574d73242c4fceaf3569 Mon Sep 17 00:00:00 2001 From: Dennis Kerschus Date: Tue, 20 Jun 2023 15:24:48 +0200 Subject: [PATCH] test af overblik --- FlowAnalyserMain.py | 16 ++- __pycache__/FlowAnalyserMain.cpython-311.pyc | Bin 2946 -> 4051 bytes __pycache__/inn.cpython-311.pyc | Bin 1119 -> 1120 bytes __pycache__/sysjobs.cpython-311.pyc | Bin 13360 -> 20073 bytes inn.py | 2 +- sysjobs.py | 102 ++++++++++++++++++- templates/index.html | 51 +++++++++- templates/index3.html | 48 +++++++++ test.md | 40 ++++++++ 9 files changed, 246 insertions(+), 13 deletions(-) create mode 100644 templates/index3.html diff --git a/FlowAnalyserMain.py b/FlowAnalyserMain.py index f35ba0e..d71d8cc 100644 --- a/FlowAnalyserMain.py +++ b/FlowAnalyserMain.py @@ -32,8 +32,16 @@ def create_app(test_config=None): return FlowTest.test() @FlowAnalyserMain.route('/test') def test(): - html='' - return render_template('index.html', test=html) + listSysjobs=[] + jobs=['BI - Flow - Batch Start – Daglig kl. 20.00','BI - Admin - Log Index Stats', 'BI - Flow - MDS Backup','BI - Admin - shrink staging filgruppe samt log filer' + ,'BI - Flow - Batch Slut – Daglig kl. 20.00'] + for job in jobs: + listSysjobs.append(list(Sysjobs.getSysjob(session,job))[0]) + return render_template('index.html', test=listSysjobs) + @FlowAnalyserMain.route('/test3') + def test3(): + sysjobs=(Sysjobs.getNattensKoersel(session)) + return render_template('index3.html', test3=sysjobs) @FlowAnalyserMain.route('/test2') def test2(): @@ -47,5 +55,5 @@ def create_app(test_config=None): return FlowAnalyserMain engine=inn.getEngine("msdb") - -FlowAnalyserMain=create_app() +with Session(engine) as session: + FlowAnalyserMain=create_app() diff --git a/__pycache__/FlowAnalyserMain.cpython-311.pyc b/__pycache__/FlowAnalyserMain.cpython-311.pyc index 10a42680bdc705fa0ac826ec8f0401648a862244..0ea8abc4c98d9f899c20f01a5539cf51823093ee 100644 GIT binary patch delta 1497 zcmZ`(Urbw77(eI!EBynduC_x8T$jRD<^ZXPCdkI042a4Lb0%blU3#yjqqOy&)2Iy< zT$ad#iI8J5UNpo+e3;8fh>7t@UKU?WT5JNjiODjv7mZ1m`M`^RzH@IoL$ZDC`SqON z_nq(j?svb_>)~HIPJh$b=s{q;UvB7^8W8%8FY2b$CXXr`rwb!ZM&mX{=oSpe2GFcu zK!#@bflpj%xO=6cTlzh5aLiS1|f?ihAoIaK5;VzLkzY-VBP#(=j>! z0)&lDspr&->FoRPGpf0C4~@pR~{#Ob9@F8CKmI#!b``tkp(lASyTztlBrBmeK(a(n)zJLP>Hrg z)ifjp$}sb1pR6vOf3i4}7rkJ3Qe08b0$obSu;~LXrdWyw`7^pDrBj4ju9*+Xwd_2x z+)0BvbIU~xLQ>g`Df1no<>is}ILVF{Ir4X+s_Y}FdnE_cRdg>HTJu%~+%#N8by$<` zoe0CyJ&7G$8$0xc4}9(WzV+W7I$G`+t8|S0I8y1jSoTd+ zd=n-6`>Vfwb9v`%$v<574_ExdrG{a%2@WkNz0@EAjk9Jc6r2aqg?1393tqc$@ml398IGXwm}CYa%nCrIrZq~940%0kn8Zk% zA>f^AVW^%{QNnMVYWlgW6`;_PVDn12KOTbxIRmhY9t2Jv1iJSF-M0tJfp{elUvu#X zE$&Q|{6l5`P{lt~Y8cwREB%CVKl@C%G-gXMBe2_&u90lUlJ)#jj?`Y2BczRcWnH6M zf9)OBWJJMHXknW2-0rOFEsPbm)6m_=#hKhi_`il~n=RY&Buqo2#vF8vIS4*}W62zo z+~xC%e7=eR9*RimtjN)-z?mkbgbw7^eYtgWvMdANSrr8NwJHMOkzI9${qD}=0K4i5 z$9f^D$uFsC>-IY3>*q~tDLE~pYs3~gT$WX%=%%I7$Ig{CfF_8tR zUKof!YXFJq3@MDY3?+<6W-!$-tYKaTG-oy3WT0jizgrAdT$y<(sTFz|CAm48j72;^ zO+bnjOxEgHwCIWI340}wdEgHw=|_}^BhJOMn>7q51Hy20Y}vi AJOBUy diff --git a/__pycache__/sysjobs.cpython-311.pyc b/__pycache__/sysjobs.cpython-311.pyc index b3dd630eb24d58da6395111c7717af7e4610bf12..ace75c692e6609c906c14146668014bec440665f 100644 GIT binary patch literal 20073 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 E0s$KeSO5S3 diff --git a/inn.py b/inn.py index 5900fdb..e0b75e8 100644 --- a/inn.py +++ b/inn.py @@ -5,7 +5,7 @@ from sqlalchemy import sql,Table,select,MetaData import urllib def getEngine(database): - server = 'bi-dsa-udv\dsa' # to specify an alternate port + server = 'bi-dsa-test\dsa' # to specify an alternate port username = 'admindenker' password = 'biadmin#kode4rm2' diff --git a/sysjobs.py b/sysjobs.py index 1efb471..ee1e2cf 100644 --- a/sysjobs.py +++ b/sysjobs.py @@ -1,7 +1,7 @@ #from __future__ import annotations from typing import List -from sqlalchemy import BOOLEAN, Column,INTEGER,NVARCHAR, ForeignKey,Select, and_, or_ +from sqlalchemy import BOOLEAN, Column,INTEGER,NVARCHAR, ForeignKey,Select, and_, or_,DateTime,text from sqlalchemy.dialects.mssql import UNIQUEIDENTIFIER, TINYINT from sqlalchemy.orm import relationship,Session,Mapped,mapped_column from sqlalchemy.ext.declarative import declarative_base @@ -27,6 +27,8 @@ class Sysjobs(Base): enabled=Column(TINYINT) sysjobhistories: Mapped[List["Sysjobhistory"]] = relationship(back_populates="sysjob") dataflow_jobs: Mapped[List["DataflowManagement_JobListe"]] = relationship(back_populates="sysjob") + parents: Mapped[List["DataflowManagement_JobAfhaengighed"]] =relationship(back_populates="child", foreign_keys="DataflowManagement_JobAfhaengighed.ChildJobID") + children: Mapped[List["DataflowManagement_JobAfhaengighed"]] = relationship(back_populates="parent", foreign_keys="DataflowManagement_JobAfhaengighed.ParentJobID") def __iter__(self): yield from { @@ -57,15 +59,79 @@ class Sysjobs(Base): for row in res: print(row.Sysjobs.name + ' ' + str(row.Sysjobhistory.run_date) + ' ' + str(row.Sysjobhistory.run_time)) + def getMedianDag(self,ugeDag: int,stepID: int,antalDage: int): + session=Session.object_session(self) + sqlStr='''DECLARE @dage int = :antalDage + DECLARE @job VARCHAR(200) = :selfName + DECLARE @ugeDag INT = :ugeDag + DECLARE @stepID INT = :stepID +;WITH ctedateconversion AS( + SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY run_datetime) OVER() AS MedianRun_datetime + , [t].[run_datetime] + , PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY [t].[run_duration]) OVER() AS run_duration +FROM +( + SELECT job_name, run_datetime, run_duration + from + ( + SELECT TOP (@dage) + j.name as job_name, + run_datetime = CONVERT(DATETIME, '1970-01-01') + + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4, + run_duration = (run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100)*100 + from msdb..sysjobhistory h + inner join msdb..sysjobs j + ON h.job_id = j.job_id + WHERE + [j].[name] LIKE @job AND [h].[step_id]=@stepID + ''' + if(ugeDag!=0): + sqlStr+=''' AND DATEPART(WEEKDAY,CONVERT(DATETIME, RTRIM(run_date)) + + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4)=@ugeDag --1 = mandag +''' + sqlStr+=''' ORDER BY [h].[run_date] DESC + ) t +) t + +) +SELECT [ctedateconversion].[MedianRun_datetime] AS MedianRun_datetime_SpecificDate,[ctedateconversion].[run_duration] +FROM [ctedateconversion] +WHERE [ctedateconversion].[MedianRun_datetime] = [ctedateconversion].[run_datetime] +GROUP BY [ctedateconversion].[MedianRun_datetime], + [ctedateconversion].[run_duration]''' + stmt=text(sqlStr).params(antalDage=antalDage,selfName=self.name,ugeDag=ugeDag,stepID=stepID) + res=session.execute(stmt).all() + return res + + + def printParent(self, sysjobs:List['Sysjobs']): + resReturn='' + if(self.name=='BI - Flow - Batch Start – Daglig kl. 20.00'): #or self.name=='BI - Flow - Batch Slut – Daglig kl. 20.00'): + return '' + for parent in self.parents: + if(any(parent.parent in sysjob for sysjob in sysjobs)): + if(len(resReturn)>0): + resReturn+=',' + resReturn+=parent.parent.name + return resReturn + def getNattensKoersel(session) -> List['Sysjobs']: natStat=(datetime.today()-timedelta(days=1)).replace(hour=20,minute=0,second=0,microsecond=0) resReturn: List['Sysjobs'] = list() - stmt = Select(Sysjobs,Sysjobhistory).join(DataflowManagement_JobListe).join(Sysjobhistory).where(Sysjobhistory.step_id==0).where(DataflowManagement_JobListe.Aktiv==1).where(or_(and_(Sysjobhistory.run_date>=int((natStat.strftime('%Y%m%d'))),(Sysjobhistory.run_time>=int((natStat.strftime('%H%M%S'))))),Sysjobhistory.run_date>=int((datetime.today().strftime('%Y%m%d'))))).distinct() + stmt = Select(Sysjobs,Sysjobhistory).join(DataflowManagement_JobListe).join(Sysjobhistory).join(DataflowManagement_JobsForExecution).where(Sysjobhistory.step_id==0).where(DataflowManagement_JobListe.Aktiv==1).where(or_(and_(Sysjobhistory.run_date>=int((natStat.strftime('%Y%m%d'))),(Sysjobhistory.run_time>=int((natStat.strftime('%H%M%S'))))),Sysjobhistory.run_date>=int((datetime.today().strftime('%Y%m%d'))))).distinct() row : Sysjobs res = session.execute(stmt).all() - # resReturn=[x[0] for x in res] return res + def getSysjob(session, sysjobName: str): + resReturn=None + if(sysjobName!=None): + stmt = Select(Sysjobs).where(Sysjobs.name==sysjobName) + try: + resReturn=session.execute(stmt) + except: + session.rollback() + return resReturn class Sysjobhistory(Base): @@ -138,4 +204,32 @@ class DataflowManagement_JobListe(Base): __table_args__ = { "schema": "dataflowmanagement.flw" } JobID: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id"),primary_key=True) Aktiv=Column(BOOLEAN) - sysjob: Mapped["Sysjobs"] = relationship(back_populates="dataflow_jobs") \ No newline at end of file + sysjob: Mapped["Sysjobs"] = relationship(back_populates="dataflow_jobs") + +class DataflowManagement_JobAfhaengighed(Base): + __tablename__ = "JobAfhaengighed" + __table_args__ = { "schema": "dataflowmanagement.flw" } + ParentJobID: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id"), primary_key=True) + ChildJobID: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id"), primary_key=True) + OprettetDato: Mapped[datetime] = Column(DateTime) + AendretDato: Mapped[datetime] = Column(DateTime) + parent: Mapped[List["Sysjobs"]] = relationship(back_populates="parents",foreign_keys=[ParentJobID]) + child: Mapped[List["Sysjobs"]] = relationship(back_populates="children",foreign_keys=[ChildJobID]) + +class DataflowManagement_JobMasterSetup(Base): + __tablename__ = "JobMasterSetup" + __table_args__ = { "schema": "dataflowmanagement.flw" } + JobID: Mapped[str] = mapped_column(UNIQUEIDENTIFIER,primary_key=True) + CurrentBatchID: Mapped[int] = mapped_column(INTEGER) + + def getCurrentBatchId(session): + stmt = Select(DataflowManagement_JobMasterSetup) + res = session.execute(stmt).all() + return res + +class DataflowManagement_JobsForExecution(Base): + __tablename__ = "JobsForExecution" + __table_args__ = { "schema": "dataflowmanagement.flw" } + JobID: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id"),primary_key=True) + BatchID: Mapped[int] = mapped_column("JobMasterSetup.CurrentBatchID") + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 638200e..6f01ed5 100644 --- a/templates/index.html +++ b/templates/index.html @@ -3,7 +3,50 @@ FlaskBlog - - - - \ No newline at end of file + + + + +
+ + \ No newline at end of file diff --git a/templates/index3.html b/templates/index3.html new file mode 100644 index 0000000..d16294d --- /dev/null +++ b/templates/index3.html @@ -0,0 +1,48 @@ + + + + + + +
+ + diff --git a/test.md b/test.md index 887fa37..7802e51 100644 --- a/test.md +++ b/test.md @@ -55,3 +55,43 @@ BI - Flow - DSI_LUNAADM : 2023-06-11 20:01:13,0:03:03 }; mermaid.initialize({startOnLoad:true}); + + + + +DECLARE @ugeDag INT = :dag-- 1 Søndag 7 lørdag +DECLARE @stepID INT = :step --default 0 da det giver overordnet flow tid + +;WITH ctedateconversion AS( + SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY run_datetime) OVER() AS MedianRun_datetime + , [t].[run_datetime] + , PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY [t].[run_duration]) OVER() AS run_duration +FROM +( + SELECT job_name, run_datetime, + SUBSTRING(run_duration, 1, 2) + ':' + SUBSTRING(run_duration, 3, 2) + ':' + + SUBSTRING(run_duration, 5, 2) AS run_duration + from + ( + SELECT TOP (@dage) + j.name as job_name, + run_datetime = CONVERT(DATETIME, '1970-01-01') + + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4, + run_duration = RIGHT('000000' + CONVERT(varchar(6), run_duration), 6) + from msdb..sysjobhistory h + inner join msdb..sysjobs j + ON h.job_id = j.job_id + WHERE + [j].[name] LIKE @job AND [h].[step_id]=@stepID + AND DATEPART(WEEKDAY,CONVERT(DATETIME, RTRIM(run_date)) + + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4)=@ugeDag --1 = mandag + ORDER BY [h].[run_date] DESC + ) t +) t + +) +SELECT [ctedateconversion].[MedianRun_datetime] AS MedianRun_datetime_SpecificDate,[ctedateconversion].[run_duration] +FROM [ctedateconversion] +WHERE [ctedateconversion].[MedianRun_datetime] = [ctedateconversion].[run_datetime] +GROUP BY [ctedateconversion].[MedianRun_datetime], + [ctedateconversion].[run_duration]''') \ No newline at end of file