lkj
This commit is contained in:
parent
5b0b3badbb
commit
8316e6d0e2
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,3 +1,11 @@
|
|||||||
/.venv/Lib
|
/.venv/Lib
|
||||||
/.venv/Scripts
|
/.venv/Scripts
|
||||||
/.venv/share
|
/.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
|
||||||
|
|||||||
164
.venv/Include/site/python3.11/greenlet/greenlet.h
Normal file
164
.venv/Include/site/python3.11/greenlet/greenlet.h
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */
|
||||||
|
|
||||||
|
/* Greenlet object interface */
|
||||||
|
|
||||||
|
#ifndef Py_GREENLETOBJECT_H
|
||||||
|
#define Py_GREENLETOBJECT_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
|
||||||
|
#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 */
|
||||||
@ -1,5 +1,5 @@
|
|||||||
home = C:\Python311
|
home = C:\Users\denker\AppData\Local\Programs\Python\Python311
|
||||||
include-system-site-packages = false
|
include-system-site-packages = false
|
||||||
version = 3.11.4
|
version = 3.11.4
|
||||||
executable = C:\Python311\python.exe
|
executable = C:\Users\denker\AppData\Local\Programs\Python\Python311\python.exe
|
||||||
command = C:\Python311\python.exe -m venv --upgrade C:\users\denker\Documents\udvikling\Python\FlowAnalyser\.venv
|
command = C:\Users\denker\AppData\Local\Programs\Python\Python311\python.exe -m venv C:\Users\denker\Udvikling\FlowAnalyser\.venv
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import logging
|
|||||||
from dateutil import tz
|
from dateutil import tz
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
import koerselsOverblikUtils
|
import koerselsOverblikUtils
|
||||||
|
from koerselsOverblikUtils import OverblikDag
|
||||||
|
|
||||||
def create_app(test_config=None):
|
def create_app(test_config=None):
|
||||||
# create and configure the app
|
# create and configure the app
|
||||||
@ -38,21 +39,8 @@ def create_app(test_config=None):
|
|||||||
return FlowTest.test()
|
return FlowTest.test()
|
||||||
@FlowAnalyserMain.route('/test')
|
@FlowAnalyserMain.route('/test')
|
||||||
def test():
|
def test():
|
||||||
listSysjobs=[]
|
return render_template('index.html', overblikDag=OverblikDag(session))
|
||||||
listStartSlutjobs=[Sysjobs.getSysjob(session,'BI - Flow - Batch Start – Daglig kl. 20.00',True)[0][0]]
|
#return render_template('index.html', test=listSysjobs6)#,startSlut=listStartSlutjobs)
|
||||||
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)
|
|
||||||
@FlowAnalyserMain.route('/test3')
|
@FlowAnalyserMain.route('/test3')
|
||||||
def test3():
|
def test3():
|
||||||
sysjobs=(Sysjobs.getNattensKoersel(session))
|
sysjobs=(Sysjobs.getNattensKoersel(session))
|
||||||
|
|||||||
2
env.py
2
env.py
@ -1,4 +1,4 @@
|
|||||||
server = 'bi-dsa-udv\dsa' # to
|
server = 'bi-dsa-udv\dsa' # to
|
||||||
database = 'udv_denker'
|
database = 'udv_denker'
|
||||||
username = 'admindenker'
|
username = 'admindenker'
|
||||||
password = 'biadmin#kode4rmO1'
|
password = 'Min!sterTj€n€r€nhv3r$ta7s11g3'
|
||||||
@ -1,8 +1,37 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List
|
from typing import Dict, List
|
||||||
from sysjobs import Sysjobs
|
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:
|
class SysjobsAlike:
|
||||||
name=None
|
name=None
|
||||||
startTime=None
|
startTime=None
|
||||||
@ -53,3 +82,36 @@ def convertToAlike(mainList : List,stepId,antalDage,ugeDage):
|
|||||||
jobAlike.endTime=medianDag[1]
|
jobAlike.endTime=medianDag[1]
|
||||||
returnList.append(jobAlike)
|
returnList.append(jobAlike)
|
||||||
return returnList
|
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)
|
||||||
|
|||||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
@ -18,7 +18,35 @@
|
|||||||
|
|
||||||
|
|
||||||
data.addRows([
|
data.addRows([
|
||||||
|
{% set test = overblikDag.getKoerselsOverblikForDag(1) %}
|
||||||
|
{% for job in test %}
|
||||||
|
['{{ job.name }}','{{ job.name }}',new Date("{{ job.getMedianDag(0,30,2)[0] }}"),new Date("{{ job.getMedianDag(0,30,2)[1] }}")],
|
||||||
|
{% endfor %}
|
||||||
|
]);
|
||||||
|
var calHeight = data.getNumberOfRows() * 45
|
||||||
|
var options = {
|
||||||
|
height: calHeight,
|
||||||
|
timeline: { groupByRowLabel: true }
|
||||||
|
};
|
||||||
|
|
||||||
|
chart.draw(data, options);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
google.charts.load('current', {'packages':['timeline']});
|
||||||
|
google.charts.setOnLoadCallback(drawChart);
|
||||||
|
function drawChart() {
|
||||||
|
var container = document.getElementById('chart2_div');
|
||||||
|
var chart = new google.visualization.Timeline(container);
|
||||||
|
var data = new google.visualization.DataTable();
|
||||||
|
data.addColumn({ type: 'string', id: 'President' });
|
||||||
|
data.addColumn({ type: 'string', id: 'President2' });
|
||||||
|
data.addColumn({ type: 'date', id: 'Start' });
|
||||||
|
data.addColumn({ type: 'date', id: 'End' });
|
||||||
|
|
||||||
|
|
||||||
|
data.addRows([
|
||||||
|
{% set test = overblikDag.getKoerselsOverblikForDag(2) %}
|
||||||
{% for job in test %}
|
{% for job in test %}
|
||||||
['{{ job.name }}','{{ job.name }}',new Date("{{ job.getMedianDag(0,30,2)[0] }}"),new Date("{{ job.getMedianDag(0,30,2)[1] }}")],
|
['{{ job.name }}','{{ job.name }}',new Date("{{ job.getMedianDag(0,30,2)[0] }}"),new Date("{{ job.getMedianDag(0,30,2)[1] }}")],
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -35,5 +63,6 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="chart_div"></div>
|
<div id="chart_div"></div>
|
||||||
|
<div id="chart2_div"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Loading…
x
Reference in New Issue
Block a user