-
Emanuele Laface authoredEmanuele Laface authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ts2_screens.py 3.94 KiB
import epics
import json
import time
import sys
import pandas
import requests
import datetime
from threading import Thread
class ts2_screensScreen(Thread):
def __init__(self, stop_signal):
Thread.__init__(self)
self.stop_signal = stop_signal
def run(self):
pvs = [
"CrS-TICP:Cryo-TE-31491:Val",
"TS2-010CDL:Cryo-TE-82313:MeasValue",
"TS2-010CDL:Cryo-TE-82360:MeasValue",
"TS2-010CRM:Cryo-TE-068:MeasValue",
# "TS2-010CRM:Cryo-TE-063:MeasValue",
"TS2-010CRM:Cryo-TE-069:MeasValue",
"TS2-010CRM:Cryo-TE-064:MeasValue",
"TS2-010CDL:Cryo-TE-82365:MeasValue",
"TS2-010CDL:Cryo-TE-82314:MeasValue",
"CrS-TICP:Cryo-TE-31492:Val",
]
intervals = {"2w": 24 * 14, "1w": 24 * 7, "2d": 24 * 2, "1d": 24, "live": 1}
epics_dict = {}
for pv in pvs:
epics_dict[pv] = epics.PV(pv, auto_monitor=True)
counter = 0
while not self.stop_signal.isSet():
try:
if counter % 100 == 0:
json_dict = {}
final_data = {}
for pv in epics_dict:
json_dict[pv] = {}
for interval in intervals:
start_date = (
datetime.datetime.now()
- datetime.timedelta(hours=intervals[interval])
).isoformat() + "Z"
end_date = datetime.datetime.now().isoformat() + "Z"
url = "http://archiver-01.tn.esss.lu.se:17668/retrieval/data/getData.json?pv=ncount({})&from={}&to={}".format(
pv, start_date, end_date
)
entries = int(requests.get(url).json()[0]["data"][0]["val"])
url = "http://archiver-01.tn.esss.lu.se:17668/retrieval/data/getData.json?pv=nth_{}({})&from={}&to={}".format(
int(entries // 100), pv, start_date, end_date
)
r = requests.get(url).json()[0]["data"]
raw_data = pandas.DataFrame.from_dict(r)
final_data[interval] = raw_data
json_dict[pv][interval] = list(
zip(
(final_data[interval]["secs"] * 1000).astype("int")
+ (final_data[interval]["nanos"] / 1e6).astype(
"int"
),
round(final_data[interval]["val"], 3),
)
)
counter = 0
for pv in epics_dict:
if epics_dict[pv].connected:
value = epics_dict[pv].value
timestamp = int(epics_dict[pv].timestamp * 1000)
if (
type(value) == float
and timestamp != json_dict[pv]["live"][-1][0]
):
json_dict[pv]["live"] = json_dict[pv]["live"][1:]
json_dict[pv]["live"].append((timestamp, round(value, 3)))
tmp_json = json.dumps(json_dict)
tmp_json = tmp_json.replace("NaN", "0")
tmp_json = tmp_json.replace("Infinity", "0")
with open("/var/www/data/ts2_screens.json", "w") as datafile:
datafile.write(tmp_json)
except Exception:
print(sys.exc_info())
time.sleep(1)
time.sleep(36)
counter += 1
for pv in epics_dict:
epics_dict[pv].clear_auto_monitor()
epics_dict[pv].disconnect()