Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
routine_pull.py 2.98 KiB
import time

import requests

from property_pull import property_pull
import pytimber as pytimber
import datetime as dt

# from multiprocessing import Process

# mysqlDB variables



API_HOST = 'http://test-nxdblm-api2.web.cern.ch/'


def start_pull(_fill_infos, _devices=None):
    if _devices is None:
        _devices = ['BLMED.06L7.B1B30_TCPA.A6L7.B1']

    print(_fill_infos)
    if _fill_infos["endTime"] is None:
        return -1

    for iDevice in _devices:

        property_pull(_fill_infos['fillNumber'], 'ALL', iDevice,
                      _fill_infos['startTime'].strftime("%Y-%m-%d %H:%M:%S.000"),
                      _fill_infos['endTime'].strftime("%Y-%m-%d %H:%M:%S.000"),
                      _files_write=False)

        for iMode in _fill_infos["beamModes"]:
            print(iMode['mode'])
            property_pull(_fill_infos['fillNumber'], iMode['mode'], iDevice,
                          iMode['startTime'].strftime("%Y-%m-%d %H:%M:%S.000"),
                          iMode['endTime'].strftime("%Y-%m-%d %H:%M:%S.000"))

            '''p = Process(target=cern_nxcals_dblm_property_pull.cern_nxcals_dblm_property_pull,
                        args=(fill_infos['fillNumber'], iMode['mode'], 'BLMED.06L7.B1B30_TCPA.A6L7.B1',
                              iMode['startTime'].strftime("%y-%m-%d %H:%M:%S.000"),
                              iMode['endTime'].strftime("%y-%m-%d %H:%M:%S.000")))
            p.start()
            p.join()
            '''


def routine_pull(_start_fill=None, _end_fill=None):
    ldb = pytimber.LoggingDB()

    if _start_fill is None and _end_fill is None:
        res = ldb.get('HX:FILLN', dt.datetime.now())
        new_fill_number = int(res['HX:FILLN'][1][0])
        print(new_fill_number)

        # gcursor.execute('select max(name) from Fill limit 1;')
        # last_fill_pulled = gcursor.fetchone()[0]
        response = requests.get(API_HOST + 'fill/last')
        last_fill_pulled = response.json()['name']
        print(last_fill_pulled)

        if new_fill_number == last_fill_pulled:
            print('already pulled last fill')
            return -1
    else:
        new_fill_number = _end_fill
        last_fill_pulled = _start_fill

    response = requests.get(API_HOST + 'devices')
    devices = []
    for device in response.json()['devices']:
        devices.append(device['name'])

    # fill_number = 7444
    # fill_infos = ldb.getLHCFillData(fill_number, False)
    # start_pull(fill_infos, devices)

    for iFill in range(int(last_fill_pulled), int(new_fill_number)):
        fill_infos = ldb.getLHCFillData(str(iFill), False)

        # check if the fill is finished
        if fill_infos['endTime'] is None:
            break

        # check if data is too new
        midnight_stamp = dt.datetime.now().replace(second=0, minute=0, hour=0) - dt.timedelta(days=1)
        if midnight_stamp < fill_infos['endTime']:
            continue

        start_pull(fill_infos, devices)


if __name__ == '__main__':
    routine_pull(_start_fill=7440, _end_fill=7494)