diff --git a/.gitignore b/.gitignore index b815c06..c5b124c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ /.venv/Lib /.venv/Scripts /.venv/share +/__pycache__ +__pycache__/env.cpython-311.pyc +__pycache__/FlowAnalyserMain.cpython-311.pyc +__pycache__/FlowTest.cpython-311.pyc +__pycache__/inn.cpython-311.pyc +__pycache__/koerselsOverblikUtils.cpython-311.pyc +__pycache__/sysjob2html.cpython-311.pyc +__pycache__/sysjobs.cpython-311.pyc diff --git a/.venv/Include/site/python3.11/greenlet/greenlet.h b/.venv/Include/site/python3.11/greenlet/greenlet.h new file mode 100644 index 0000000..d02a16e --- /dev/null +++ b/.venv/Include/site/python3.11/greenlet/greenlet.h @@ -0,0 +1,164 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */ + +/* Greenlet object interface */ + +#ifndef Py_GREENLETOBJECT_H +#define Py_GREENLETOBJECT_H + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is deprecated and undocumented. It does not change. */ +#define GREENLET_VERSION "1.0.0" + +#ifndef GREENLET_MODULE +#define implementation_ptr_t void* +#endif + +typedef struct _greenlet { + PyObject_HEAD + PyObject* weakreflist; + PyObject* dict; + implementation_ptr_t pimpl; +} PyGreenlet; + +#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type)) + + +/* C API functions */ + +/* Total number of symbols that are exported */ +#define PyGreenlet_API_pointers 12 + +#define PyGreenlet_Type_NUM 0 +#define PyExc_GreenletError_NUM 1 +#define PyExc_GreenletExit_NUM 2 + +#define PyGreenlet_New_NUM 3 +#define PyGreenlet_GetCurrent_NUM 4 +#define PyGreenlet_Throw_NUM 5 +#define PyGreenlet_Switch_NUM 6 +#define PyGreenlet_SetParent_NUM 7 + +#define PyGreenlet_MAIN_NUM 8 +#define PyGreenlet_STARTED_NUM 9 +#define PyGreenlet_ACTIVE_NUM 10 +#define PyGreenlet_GET_PARENT_NUM 11 + +#ifndef GREENLET_MODULE +/* This section is used by modules that uses the greenlet C API */ +static void** _PyGreenlet_API = NULL; + +# define PyGreenlet_Type \ + (*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM]) + +# define PyExc_GreenletError \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM]) + +# define PyExc_GreenletExit \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM]) + +/* + * PyGreenlet_New(PyObject *args) + * + * greenlet.greenlet(run, parent=None) + */ +# define PyGreenlet_New \ + (*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \ + _PyGreenlet_API[PyGreenlet_New_NUM]) + +/* + * PyGreenlet_GetCurrent(void) + * + * greenlet.getcurrent() + */ +# define PyGreenlet_GetCurrent \ + (*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM]) + +/* + * PyGreenlet_Throw( + * PyGreenlet *greenlet, + * PyObject *typ, + * PyObject *val, + * PyObject *tb) + * + * g.throw(...) + */ +# define PyGreenlet_Throw \ + (*(PyObject * (*)(PyGreenlet * self, \ + PyObject * typ, \ + PyObject * val, \ + PyObject * tb)) \ + _PyGreenlet_API[PyGreenlet_Throw_NUM]) + +/* + * PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args) + * + * g.switch(*args, **kwargs) + */ +# define PyGreenlet_Switch \ + (*(PyObject * \ + (*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \ + _PyGreenlet_API[PyGreenlet_Switch_NUM]) + +/* + * PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent) + * + * g.parent = new_parent + */ +# define PyGreenlet_SetParent \ + (*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \ + _PyGreenlet_API[PyGreenlet_SetParent_NUM]) + +/* + * PyGreenlet_GetParent(PyObject* greenlet) + * + * return greenlet.parent; + * + * This could return NULL even if there is no exception active. + * If it does not return NULL, you are responsible for decrementing the + * reference count. + */ +# define PyGreenlet_GetParent \ + (*(PyGreenlet* (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_GET_PARENT_NUM]) + +/* + * deprecated, undocumented alias. + */ +# define PyGreenlet_GET_PARENT PyGreenlet_GetParent + +# define PyGreenlet_MAIN \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_MAIN_NUM]) + +# define PyGreenlet_STARTED \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_STARTED_NUM]) + +# define PyGreenlet_ACTIVE \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_ACTIVE_NUM]) + + + + +/* Macro that imports greenlet and initializes C API */ +/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we + keep the older definition to be sure older code that might have a copy of + the header still works. */ +# define PyGreenlet_Import() \ + { \ + _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \ + } + +#endif /* GREENLET_MODULE */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GREENLETOBJECT_H */ diff --git a/.venv/pyvenv.cfg b/.venv/pyvenv.cfg index ba6b6e6..4151022 100644 --- a/.venv/pyvenv.cfg +++ b/.venv/pyvenv.cfg @@ -1,5 +1,5 @@ -home = C:\Python311 +home = C:\Users\denker\AppData\Local\Programs\Python\Python311 include-system-site-packages = false version = 3.11.4 -executable = C:\Python311\python.exe -command = C:\Python311\python.exe -m venv --upgrade C:\users\denker\Documents\udvikling\Python\FlowAnalyser\.venv +executable = C:\Users\denker\AppData\Local\Programs\Python\Python311\python.exe +command = C:\Users\denker\AppData\Local\Programs\Python\Python311\python.exe -m venv C:\Users\denker\Udvikling\FlowAnalyser\.venv diff --git a/FlowAnalyserMain.py b/FlowAnalyserMain.py index e0967f0..73db641 100644 --- a/FlowAnalyserMain.py +++ b/FlowAnalyserMain.py @@ -9,6 +9,7 @@ import logging from dateutil import tz from pytz import timezone import koerselsOverblikUtils +from koerselsOverblikUtils import OverblikDag def create_app(test_config=None): # create and configure the app @@ -38,21 +39,8 @@ def create_app(test_config=None): return FlowTest.test() @FlowAnalyserMain.route('/test') def test(): - listSysjobs=[] - listStartSlutjobs=[Sysjobs.getSysjob(session,'BI - Flow - Batch Start – Daglig kl. 20.00',True)[0][0]] - listStartSlutjobs.append(Sysjobs.getSysjob(session,'BI - Flow - Batch Slut – Daglig kl. 20.00',True)[0][0]) - listStartSlutjobs=koerselsOverblikUtils.convertToAlike(listStartSlutjobs,0,30,0) - sysjobsAlike=koerselsOverblikUtils.timeRangeMerge(listStartSlutjobs, "Batch køretid",0,30,2) - listSysjobs.append(sysjobsAlike) - listSysjobs.extend(listStartSlutjobs) - sysjobs=Sysjobs.getSysjob(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"]] - if(sysjobs!=None and len(sysjobs)>0): - sysjobs=koerselsOverblikUtils.convertToAlike(sysjobs,0,30,2) - listSysjobs.extend(sysjobs) - listSysjobs = [x for x in listSysjobs if len(x.getMedianDag(0,30,2))>0] - listSysjobs = sorted(listSysjobs, key=lambda x: x.getMedianDag(0,30,2)[0]) - return render_template('index.html', test=listSysjobs)#,startSlut=listStartSlutjobs) + return render_template('index.html', overblikDag=OverblikDag(session)) + #return render_template('index.html', test=listSysjobs6)#,startSlut=listStartSlutjobs) @FlowAnalyserMain.route('/test3') def test3(): sysjobs=(Sysjobs.getNattensKoersel(session)) diff --git a/env.py b/env.py index 6166014..17778ee 100644 --- a/env.py +++ b/env.py @@ -1,4 +1,4 @@ server = 'bi-dsa-udv\dsa' # to database = 'udv_denker' username = 'admindenker' -password = 'biadmin#kode4rmO1' \ No newline at end of file +password = 'Min!sterTj€n€r€nhv3r$ta7s11g3' \ No newline at end of file diff --git a/koerselsOverblikUtils.py b/koerselsOverblikUtils.py index 227ae23..7bcaae5 100644 --- a/koerselsOverblikUtils.py +++ b/koerselsOverblikUtils.py @@ -1,8 +1,37 @@ from datetime import datetime -from typing import List +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 - + +
+
\ No newline at end of file