created base structure
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from pyscada.ems.models import MeteringPoint, VirtualMeteringPoint
|
||||
from pyscada.models import BackgroundProcess
|
||||
from time import time
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Run Maintenance Jobs for PyScada-EMS"
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
"type", choices=["mp", "vmp", "all"], type=str, default="all"
|
||||
)
|
||||
parser.add_argument(
|
||||
"id", type=int, default=-1, nargs="?",
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
workers = 10
|
||||
if options["id"] >= 0:
|
||||
tic = time()
|
||||
if options["type"] == "all":
|
||||
print("argument id not supported for type == 'all'")
|
||||
|
||||
if options["type"] == "mp":
|
||||
mp = MeteringPoint.objects.filter(pk=options["id"]).first()
|
||||
if mp is None:
|
||||
print(f"MeteringPoint with id {options['id']} not found!")
|
||||
mp.update_calculated_energy_deltas()
|
||||
print(f"{(time()-tic):1.2f}")
|
||||
return
|
||||
|
||||
if options["type"] == "vmp":
|
||||
tic = time()
|
||||
vmp = VirtualMeteringPoint.objects.filter(pk=options["id"]).first()
|
||||
if vmp is None:
|
||||
print(f"VirtualMeteringPoint with id {options['id']} not found!")
|
||||
vmp.update_calculated_energy_deltas()
|
||||
print(f"{(time()-tic):1.2f}")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
if options["type"] in ["mp", "all"] and options["id"] == -1:
|
||||
nb_mp = MeteringPoint.objects.count()
|
||||
mp_i = 1
|
||||
mp_ids_to_calculate = []
|
||||
for worker_id in range(workers):
|
||||
mp_ids_to_calculate.append([])
|
||||
worker = 0
|
||||
for mp in MeteringPoint.objects.all():
|
||||
|
||||
print(f"add mp {mp_i}/{nb_mp}: {mp.name} ", end="", flush=True)
|
||||
# mp.update_calculated_energy_deltas()
|
||||
mp_ids_to_calculate[worker % workers].append(mp.pk)
|
||||
worker += 1
|
||||
mp_i += 1
|
||||
print(" done")
|
||||
|
||||
for worker_id in range(workers):
|
||||
process_class_kwargs = json.dumps(
|
||||
{"mp_ids_to_calculate": mp_ids_to_calculate[worker_id]}
|
||||
)
|
||||
if len(process_class_kwargs) > 400:
|
||||
print(
|
||||
f"process_class_kwargs to long \
|
||||
({len(process_class_kwargs)}>400)"
|
||||
)
|
||||
continue
|
||||
|
||||
bp = BackgroundProcess(
|
||||
pid=0,
|
||||
label="update precalculated mp",
|
||||
enabled=True,
|
||||
parent_process_id=1,
|
||||
process_class="pyscada.ems.daemon.PreCalculationBackgroundTask",
|
||||
process_class_kwargs=process_class_kwargs,
|
||||
)
|
||||
bp.save()
|
||||
|
||||
if options["type"] in ["vmp", "all"] and options["id"] == -1:
|
||||
process_class_kwargs = json.dumps({"vmp_ids_to_calculate": "all"})
|
||||
bp = BackgroundProcess(
|
||||
pid=0,
|
||||
label="update precalculated vmp",
|
||||
enabled=True,
|
||||
parent_process_id=1,
|
||||
process_class="pyscada.ems.daemon.PreCalculationBackgroundTask",
|
||||
process_class_kwargs=process_class_kwargs,
|
||||
)
|
||||
bp.save()
|
||||
Reference in New Issue
Block a user