Back Midas Rome Roody Rootana
  Midas DAQ System, Page 132 of 150  Not logged in ELOG logo
ID Date Author Topicdown Subject
  2904   26 Nov 2024 Nick HastingsBug ReportTMFE::Sleep() errors
Hello,

I've noticed that SC FEs that use the TMFE class with midas-2022-05-c often report errors when calling TMFE:Sleep().
The error is :

[tmfe.cxx:1033:TMFE::Sleep,ERROR] select() returned -1, errno 22 (Invalid argument).

This seems to happen in two different ways:

1. Error being reported repeatedly
2. Occasional single errors being reported

When the first of these presents, we typically restart the FE to "solve" the problem.
Case 2. is typically ignored.

The code in question is:

void TMFE::Sleep(double time)
{
   int status;
   fd_set fdset;
   struct timeval timeout;
      
   FD_ZERO(&fdset);
      
   timeout.tv_sec = time;
   timeout.tv_usec = (time-timeout.tv_sec)*1000000.0;

   while (1) {
      status = select(1, &fdset, NULL, NULL, &timeout);
#ifdef EINTR
      if (status < 0 && errno == EINTR) {
         continue;
      }
#endif
      break;
   }
      
   if (status < 0) {
      TMFE::Instance()->Msg(MERROR, "TMFE::Sleep", "select() returned %d, errno %d (%s)", status, errno, strerror(errno));
   }
}

So it looks like either file descriptor of the timeval struct must have a problem.
From some reading it seems that invalid timeval structs are often caused by one or both
of tv_sec or tv_usec not being set. In the code above we can see that both appear to be
correctly set initially.

From the select() man page I see:

RETURN VALUE
       On success, select() and pselect() return the number of file descriptors contained in
       the three returned descriptor sets (that is, the total number of bits that are set in
       readfds,  writefds,  exceptfds).  The return value may be zero if the timeout expired
       before any file descriptors became ready.

       On error, -1 is returned, and errno is set to indicate the error; the file descriptor
       sets are unmodified, and timeout becomes undefined.

The second paragraph quoted from the man page above would indicate to me that perhaps the
timeout needs to be reset inside the if block. eg:

      if (status < 0 && errno == EINTR) {
         timeout.tv_sec = time;
         timeout.tv_usec = (time-timeout.tv_sec)*1000000.0;
         continue;
      }

Please note that I've only just briefly looked at this and was hoping someone more
familiar with using select() as a way to sleep() might be better able to understand
what is happening.

I wonder also if now that midas requires stricter/newer c++ standards if there maybe
some more straightforward method to sleep that is sufficiently robust and portable.

Thanks,

Nick.
  2905   26 Nov 2024 Maia Henriksson-WardBug ReportTMFE::Sleep() errors
> Hello,
> 
> I've noticed that SC FEs that use the TMFE class with midas-2022-05-c often report errors when calling TMFE:Sleep().
> The error is :
> 
> [tmfe.cxx:1033:TMFE::Sleep,ERROR] select() returned -1, errno 22 (Invalid argument).
> 
> This seems to happen in two different ways:
> 
> 1. Error being reported repeatedly
> 2. Occasional single errors being reported
> 
> When the first of these presents, we typically restart the FE to "solve" the problem.
> Case 2. is typically ignored.
> 
> The code in question is:
> 
> void TMFE::Sleep(double time)
> {
>    int status;
>    fd_set fdset;
>    struct timeval timeout;
>       
>    FD_ZERO(&fdset);
>       
>    timeout.tv_sec = time;
>    timeout.tv_usec = (time-timeout.tv_sec)*1000000.0;
> 
>    while (1) {
>       status = select(1, &fdset, NULL, NULL, &timeout);
> #ifdef EINTR
>       if (status < 0 && errno == EINTR) {
>          continue;
>       }
> #endif
>       break;
>    }
>       
>    if (status < 0) {
>       TMFE::Instance()->Msg(MERROR, "TMFE::Sleep", "select() returned %d, errno %d (%s)", status, errno, strerror(errno));
>    }
> }
> 
> So it looks like either file descriptor of the timeval struct must have a problem.
> From some reading it seems that invalid timeval structs are often caused by one or both
> of tv_sec or tv_usec not being set. In the code above we can see that both appear to be
> correctly set initially.
> 
> From the select() man page I see:
> 
> RETURN VALUE
>        On success, select() and pselect() return the number of file descriptors contained in
>        the three returned descriptor sets (that is, the total number of bits that are set in
>        readfds,  writefds,  exceptfds).  The return value may be zero if the timeout expired
>        before any file descriptors became ready.
> 
>        On error, -1 is returned, and errno is set to indicate the error; the file descriptor
>        sets are unmodified, and timeout becomes undefined.
> 
> The second paragraph quoted from the man page above would indicate to me that perhaps the
> timeout needs to be reset inside the if block. eg:
> 
>       if (status < 0 && errno == EINTR) {
>          timeout.tv_sec = time;
>          timeout.tv_usec = (time-timeout.tv_sec)*1000000.0;
>          continue;
>       }
> 
> Please note that I've only just briefly looked at this and was hoping someone more
> familiar with using select() as a way to sleep() might be better able to understand
> what is happening.
> 
> I wonder also if now that midas requires stricter/newer c++ standards if there maybe
> some more straightforward method to sleep that is sufficiently robust and portable.
> 
> Thanks,
> 
> Nick.

I had the same error a few months ago, though I wasn't using a tagged release. It happened because I was calling TMFE::Sleep() 
with a negative time. If your issues were caused by the same reason, TMFE::Sleep() can handle negative times since commit 
591f78f (https://bitbucket.org/tmidas/midas/commits/591f78f52893d5ffd64bf4e52a1daac537ebd672).

Early in my debugging, I did come to the same conclusions you did, and actually tried a similar solution the one you suggested. 
This was a few months ago and I didn't write down what happened, but I believe it didn't work because in my case the errno was 
something other than EINTR, and/or the timeval was still an invalid argument for sleep because the timeout was still negative. I 
never followed it up because I was able to fix my problem by fixing my frontend.
  2906   27 Nov 2024 Konstantin OlchanskiBug ReportTMFE::Sleep() errors
> [tmfe.cxx:1033:TMFE::Sleep,ERROR] select() returned -1, errno 22 (Invalid argument).

The very original copy of this function had an error and was spewing out this error quite often,
this was a missing handler for EINTR.

Now it looks like we are missing a handler for EINVAL.

Most likely sleep is called with a funny sleep time value that fills struct timeval with
values select() does not like.

I see Ben added a check for negative sleep times, and this is good.

I think I will do these changes:

a) add an error message for negative sleep time, I think user should never call ::Sleep with negative or zero sleep times and 
if they do it is a bug and they should fix it, the error message will inform them so.

b) add a handler for EINVAL, which will report the requested sleep time and the values in struct timeval

K.O.
  2907   27 Nov 2024 Konstantin OlchanskiBug ReportTMFE::Sleep() errors
> 
> I wonder also if now that midas requires stricter/newer c++ standards if there maybe
> some more straightforward method to sleep that is sufficiently robust and portable.
> 

I believe POSIX defined clock_nanosleep() & co, so on most recent machines that is the most portable way to sleep.

Historically, select() was the only way to sleep for less than 1 sec, but it was never portable
because of differences between BSD UNIX and Linux implementations. (MacOS is BSD UNIX via FreeBSD).

On difference is the update of struct timeval is select() is interrupted.

In this elog entry, I compare sleep using select() with sleep using clock_nanosleep() and see that there is no difference:
https://daq00.triumf.ca/elog-midas/Midas/2115

As you can see tmfe.cxx has both implementations, select() and clock_nanosleep(), and anybody can try which one works better on 
their computer.

K.O.
  2908   27 Nov 2024 Konstantin OlchanskiBug ReportTMFE::Sleep() errors
>       status = select(1, &fdset, NULL, NULL, &timeout);
>
>       On error, -1 is returned, ... timeout becomes undefined.

I have been reading "man select" for 30 years and I do not remember seeing this text.

I believe on BSD UNIX (MacOS) it says timeout is unchanged and on Linux is says timeout is updated to time actually slept.

I will have to investigate, but I suspect the man page was posix-ized, by sweeping BSD/MacOS and Linux implementations
under the same "instead of saying what it actually does, we will just say 'undefined'".

In any case, EINTR is not an error, it's an artefact of UNIX signal handling. Linux implementations always try
very hard to handle signals without causing EINTR to select(), read() and write(). This is most painful
when reading and writing to TCP sockets, because one most handle partial reads and EINTR.

K.O.
  2909   30 Nov 2024 Pavel MuratBug ReportEQ_PERIODIC-only equipment ?
Dear Midas experts, 

I'm running into something which looks like an initialization problem. 
I have a mfe.cxx-style frontend which introduces an equipment of the EQ_PERIODIC type (EQ_PERIODIC-only!). 
When Midas enters the running state, I see the frontend crashing. 
Stepping through the code shows that the frontend is crashing because its equipment has been ignored 
by the initialize_equipment@mfe.cxx - see
 
https://bitbucket.org/tmidas/midas/src/5d0dae001712164ae43137dced2fbbb594f0201e/src/mfe.cxx#lines-630

Is there an assumption that the initialization of the EQ_PERIODIC-only equipment is the user responsibility? 
Or EQ_PERIODIC should always come paired with some other type?

-- many thanks, regards, Pasha
  2910   01 Dec 2024 Stefan RittBug ReportEQ_PERIODIC-only equipment ?
There is no requirement that you pair an EQ_PERIODIC with an EQ_TRIGGER. Take for exmaple

  midas/examples/experiment/frontend.cxx

and remove there the triggered event. The frontend runs happily with the periodic event only (I just tried that myself). You have probably some problem in 
your event definition. Start with the running example frontend, and add your code line by line until you see the problem.

Stefan
  2911   01 Dec 2024 Pavel MuratBug ReportEQ_PERIODIC-only equipment ?
> There is no requirement that you pair an EQ_PERIODIC with an EQ_TRIGGER. Take for exmaple
> 
>   midas/examples/experiment/frontend.cxx
> 
> and remove there the triggered event. The frontend runs happily with the periodic event only (I just tried that myself). You have probably some problem in 
> your event definition. Start with the running example frontend, and add your code line by line until you see the problem.

Hi Stefan, thank you very much! 

As the pointer to the readout function and pointers to device drivers are all defined in the same structure (EQUIPMENT), 
I was naively assuming that the readout function should be set during the class driver initialization.
Now it is clear that the equipment responding to EQ_PERIODIC events doesn't have to have drivers, 
and specifying the readout function is the responsibility of the user.

I got around exactly this way yesterday, but was thinking that I was hacking the system :)
 
-- regards, Pasha
  2912   02 Dec 2024 Stefan RittBug ReportODB key picker does not close when creating link / Edit-on-run string box too large
> Actual result:
> The key picker does not close.

Thanks for reporting that bug. It has been fixed in the current commit (installed already on megon02)

Stefan
  2913   02 Dec 2024 Stefan RittBug ReportODB key picker does not close when creating link / Edit-on-run string box too large
> Another more minor visual problem is the edit-on-start dialog. There seems to be no upper bound to the 
> size of the text box. In the attached screenshot, ShortString has a maximum length of 32 characters, 
> LongString has 255. Both are empty at the time of the screenshot. Maybe, the size should be limited to a 
> reasonable width.

I limited the input size now to (arbitrarily) 100 chars. The string can still be longer than 100 chars, and you start then scrolling inside the input box. Let me know if 
that's ok this way.

Stefan
  2915   04 Dec 2024 Konstantin OlchanskiBug ReportODB key picker does not close when creating link / Edit-on-run string box too large
> > Actual result:
> > The key picker does not close.
> 
> Thanks for reporting that bug. It has been fixed in the current commit (installed already on megon02)
>

Stefan, thank you for fixing both problems, I have seen them, too, but no time to deal with them.

K.O.
  2916   05 Dec 2024 Konstantin OlchanskiBug ReportODB key picker does not close when creating link / Edit-on-run string box too large
> > Another more minor visual problem is the edit-on-start dialog. There seems to be no upper bound to the 
> > size of the text box. In the attached screenshot, ShortString has a maximum length of 32 characters, 
> > LongString has 255. Both are empty at the time of the screenshot. Maybe, the size should be limited to a 
> > reasonable width.
> 
> I limited the input size now to (arbitrarily) 100 chars. The string can still be longer than 100 chars, and you start then scrolling inside the input box. Let me know if 
> that's ok this way.

I am moving the dragon experiment to the new midas and we see this problem on the begin-of-run page.

Old midas: no horizontal scroll bar, edit-on-start names, values and comments are all squeezed in into the visible frame.

New midas: page is very wide, values entry fields are very long and there is a horizontal scroll bar.

So something got broken in the htlm formatting or sizing. I should be able to spot the change by doing
a diff between old resources/start.html and the new one.

K.O.
  2918   06 Dec 2024 Konstantin OlchanskiBug ReportTMFE::Sleep() errors
> >       status = select(1, &fdset, NULL, NULL, &timeout);
> >       On error, -1 is returned, ... timeout becomes undefined.

I confirm Linux and MacOS man pages and select() with EINTR work as I remember, Linux updates "timeout" to account for the 
time already slept, MacOS does not ("timeout" is unchanged).

So the original code is roughly correct, but long sleeps will not work right if SIGALRM fires during sleeping.

Note that MIDAS no longer uses SIGALRM to fire cm_watchdog() (it was moved to a thread) and MIDAS does not use signals,
so handling of EINTR is now moot.

(Please correct me if I missed something).

The original bug report was about EINVAL, and best I can tell, it was caused by calls to TMFE::Sleep()
with strange sleep times that caused invalid values to be computed into the select() timeout.

To improve on this, I make these changes:

1) TMFE::Sleep(0) will report an error and will not sleep
2) TMFE::Sleep(negative number) will report an error and will not sleep

(please check the sleep time before calling TMFE::Sleep())

3) TMFE::Sleep(1 sec or less) will sleep using select(). (I also looked into using poll(), ppoll() and pselect()).
4) TMFE::Sleep(more than 1 second) will use a loop to sleep in increments of 1 second and will use one additional syscall to 
read the current time to decide how much more to sleep.

5) if select() returns EINVAL, the error message will reporting the sleep time and the values in "timeout".

A side effect of this is that on both Linux and MacOS long sleeps work correctly if interrupted by SIGALRM,
because SIGALRM granularity is 1 sec and our sleep time is also 1 sec.

Commit [develop 06735d29] improve TMFE::Sleep()

K.O.
  2919   06 Dec 2024 Konstantin OlchanskiBug ReportTMFE::Sleep() errors
> Commit [develop 06735d29] improve TMFE::Sleep()

Report of test_sleep on Ubuntu-22 (Intel E-2236) and MacOS 14.6.1 (M1 MAX Mac Studio).

It is easy to see Ubuntu-22 (kernel 6.2.x) sleep granularity is ~60 usec, MacOS sleep granularity is <2 usec. (Sub 1 usec sleep likely measures the syscall() speed, 500 ns on Intel and 200 
ns on ARM M1 MAX). (NOTE: long sleep is interrupted by an alarm roughly 10 seconds into the sleep, see progs/test_sleep.cxx)

daq00:midas$ uname -a
Linux daq00.triumf.ca 6.2.0-39-generic #40~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 16 10:53:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
daq00:midas$ ./bin/test_sleep 
test short sleep:
sleep      10 loops,   100000.000 usec per loop,  1.000000000 sec total,  1.002568007 sec actual total,   100256.801 usec actual per loop, oversleep  256.801 usec,    0.3%
sleep     100 loops,    10000.000 usec per loop,  1.000000000 sec total,  1.025897980 sec actual total,    10258.980 usec actual per loop, oversleep  258.980 usec,    2.6%
sleep    1000 loops,     1000.000 usec per loop,  1.000000000 sec total,  1.169670105 sec actual total,     1169.670 usec actual per loop, oversleep  169.670 usec,   17.0%
sleep   10000 loops,      100.000 usec per loop,  1.000000000 sec total,  1.573357105 sec actual total,      157.336 usec actual per loop, oversleep   57.336 usec,   57.3%
sleep   99999 loops,       10.000 usec per loop,  0.999990000 sec total,  6.963442087 sec actual total,       69.635 usec actual per loop, oversleep   59.635 usec,  596.4%
sleep 1000000 loops,        1.000 usec per loop,  1.000000000 sec total, 60.939687967 sec actual total,       60.940 usec actual per loop, oversleep   59.940 usec, 5994.0%
sleep 1000000 loops,        0.100 usec per loop,  0.100000000 sec total,  0.613572121 sec actual total,        0.614 usec actual per loop, oversleep    0.514 usec,  513.6%
sleep 1000000 loops,        0.010 usec per loop,  0.010000000 sec total,  0.576359987 sec actual total,        0.576 usec actual per loop, oversleep    0.566 usec, 5663.6%
test long sleep: requested 126.000000000 sec ... sleeping ...
alarm!
test long sleep: requested 126.000000000 sec, actual 126.000875950 sec

bash-3.2$ uname -a
Darwin send.triumf.ca 23.6.0 Darwin Kernel Version 23.6.0: Mon Jul 29 21:14:30 PDT 2024; root:xnu-10063.141.2~1/RELEASE_ARM64_T6000 arm64
bash-3.2$ ./bin/test_sleep 
test short sleep:
sleep      10 loops,   100000.000 usec per loop,  1.000000000 sec total,  1.032556057 sec actual total,   103255.606 usec actual per loop, oversleep 3255.606 usec,    3.3%
sleep     100 loops,    10000.000 usec per loop,  1.000000000 sec total,  1.245460033 sec actual total,    12454.600 usec actual per loop, oversleep 2454.600 usec,   24.5%
sleep    1000 loops,     1000.000 usec per loop,  1.000000000 sec total,  1.331466913 sec actual total,     1331.467 usec actual per loop, oversleep  331.467 usec,   33.1%
sleep   10000 loops,      100.000 usec per loop,  1.000000000 sec total,  1.281141996 sec actual total,      128.114 usec actual per loop, oversleep   28.114 usec,   28.1%
sleep   99999 loops,       10.000 usec per loop,  0.999990000 sec total,  1.410759926 sec actual total,       14.108 usec actual per loop, oversleep    4.108 usec,   41.1%
sleep 1000000 loops,        1.000 usec per loop,  1.000000000 sec total,  2.400593996 sec actual total,        2.401 usec actual per loop, oversleep    1.401 usec,  140.1%
sleep 1000000 loops,        0.100 usec per loop,  0.100000000 sec total,  0.188431025 sec actual total,        0.188 usec actual per loop, oversleep    0.088 usec,   88.4%
sleep 1000000 loops,        0.010 usec per loop,  0.010000000 sec total,  0.188102007 sec actual total,        0.188 usec actual per loop, oversleep    0.178 usec, 1781.0%
test long sleep: requested 126.000000000 sec ... sleeping ...
alarm!
test long sleep: requested 126.000000000 sec, actual 126.001244068 sec

K.O.
  2923   17 Dec 2024 Lukas GerritzenBug Report[History plots] "Jump to current time" resets x range to 7d
To reproduce:
- Open a history plot, click [-] a few times until the x axis shows more than 7 days.
- Scroll to the past (left)
- Click "Jump to current time" (the triangle)

Expected result:
The upper limit of the x axis is at the current time and the lower range is now - whatever range you had before 
(>7d)

Actual result:
The upper limit is the current time, the lower limit is now - 7d

(The interval seems unchanged if the range was < 7d before clicking "Jump to current time")
  2924   19 Dec 2024 Stefan RittBug Report[History plots] "Jump to current time" resets x range to 7d
I had put in a check which limits the range to 7d into the past if you press the "play" button, but now I'm not sure why this was needed. I removed it again and 
things seem to be fine. Change is committed to develop.

Stefan
  2936   01 Feb 2025 Pavel MuratBug ReportMIDAS history system not using the event timestamps ?
> I have a time series of slow control measurements in an ASCII format - 
> data records in a format (run_number, time, temperature, voltage1, ..., voltageN), 
> and, if possible, would like to convert them into a MIDAS history format. 
> 
> Making MIDAS events out of that data is easy, but is it possible to preserve 
> the time stamps?  - Logically, this boils down to whether it is possible to have  
> the event time set by a user frontend

It looks that the original question was not as naive as I expected and may be pointing to a subtle bug. 
I have implemented a python frontend - essentially a clone of 

https://bitbucket.org/tmidas/midas/src/develop/python/midas/frontend.py

reading the old slow control data and setting the event.header.timestamp's to some dates from the year of 2022. 

When I run MIDAS and read the "old slow control events", one event in 10 seconds, 
the MIDAS Event Dump utility shows the data with the correct event timestamps, from the year of 2022. 

However the history plots show the event parameters with the timestamps from Feb 01 2025 and the adjacent 
data points separated by 10 sec.

Is it possible that the history system uses its own timestamp setting instead of using timestamps from the event headers? 
- Under normal circumstances, the two should be very close, and that could've kept the issue hidden... 

-- thanks, regards, Pasha

UPDATE:  I attached the frontend code and the input data file it is reading. The data file should reside in the local directory
- the frontend code doesn't have everything fully automated for the test, 
  -- an integer field "/Mu2e/Offline/Ops/LastTime" would need to be created manually
  -- the history plots would need to be declared manually
Attachment 1: test_frontend.py
#!/usr/bin/env python

"""
Example of a basic midas frontend that has one periodic equipment.

See `examples/multi_frontend.py` for an example that uses more
features (frontend index, polled equipment, ODB settings etc). 
"""

import midas
import midas.frontend
import midas.event
import time, os, sys
from   datetime import datetime

#import TRACE
#TRACE_NAME = 'test_frontend.py'

class MyPeriodicEquipment(midas.frontend.EquipmentBase):
    """
    We define an "equipment" for each logically distinct task that this frontend
    performs. For example, you may have one equipment for reading data from a
    device and sending it to a midas buffer, and another equipment that updates
    summary statistics every 10s.
    
    Each equipment class you define should inherit from 
    `midas.frontend.EquipmentBase`, and should define a `readout_func` function.
    If you're creating a "polled" equipment (rather than a periodic one), you
    should also define a `poll_func` function in addition to `readout_func`.
    """
    def __init__(self, client):
        # The name of our equipment. This name will be used on the midas status
        # page, and our info will appear in /Equipment/MyPeriodicEquipment in
        # the ODB.
        equip_name = "MyPeriodicEquipment"
        
        # Define the "common" settings of a frontend. These will appear in
        # /Equipment/MyPeriodicEquipment/Common. The values you set here are
        # only used the very first time this frontend/equipment runs; after 
        # that the ODB settings are used.
        
        default_common              = midas.frontend.InitialEquipmentCommon()
        default_common.equip_type   = midas.EQ_PERIODIC
        default_common.buffer_name  = "SYSTEM"
        default_common.trigger_mask = 0
        default_common.event_id     = 1
        default_common.period_ms    = 100
        default_common.read_when    = midas.RO_ALWAYS
        default_common.log_history  = 1
        
        # You MUST call midas.frontend.EquipmentBase.__init__ in your equipment's __init__ method!
        midas.frontend.EquipmentBase.__init__(self, client, equip_name, default_common)
        
        # You can set the status of the equipment (appears in the midas status page)
        self.set_status("Initialized")
        self._verbose = 1;
        
# ---------------------------------------------------------------------
    def Print(self,Name,level,Message):
        if(level>self._verbose): return 0;
        now     = time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time()))
        message = now+' [ GridSubmit::'+Name+' ] '+Message
        print(message)
        
    def readout_func(self):
        """
        For a periodic equipment, this function will be called periodically
        (every 100ms in this case). It should return either a `cdms.event.Event`
        or None (if we shouldn't write an event).
        """

        last_time = self.client.odb_get('/Mu2e/Offline/Ops/LastTime')
        self.Print('readout_func',1,f'last_time:{last_time}')
        
#        cmd = 'dqmTool print-numbers --source 5 --value 6 --expand'
        cmd = 'cat val_nightly.csv'
        self.Print('readout_func',1,'executing cmd:%s'%cmd)
        out=os.popen(cmd).readlines()

        event = None;
        for line in out:
            # print(line)
            words = line.strip().split(',')
#------------------------------------------------------------------------------
# ['91', '5228', '0.0', '0  5', 'valNightly', 'reco', 'day', '0  6', 'ops', 'stats', 'CPU  11', '4', '0', '0', '0', '0', '2022-01-11 00:01:00-06:00', '2022-01-11 00:01:00-06:00']
#------------------------------------------------------------------------------
            # In this example, we just make a simple event with one bank.
            dt = datetime.strptime(words[17], "%Y-%m-%d %H:%M:%S%z");
            ts = dt.timestamp();
            if (ts > last_time) :
                data            = []
                print(words);
                event           = midas.event.Event()
                data.append(float(words[0]));
                data.append(float(words[1]));
                data.append(float(words[2]));

                event.create_bank("OFLN", midas.TID_FLOAT, data)
                event.header.timestamp = int(ts);
                self.client.odb_set('/Mu2e/Offline/Ops/LastTime',ts)
                print(f'SET_NEW last_time:{ts} dt:{dt}')
                
                # self.Print('readout_func',1,f'SET_NEW last_time:{ts} dt:{dt}')
                break;
        
        return event

class MyFrontend(midas.frontend.FrontendBase):
    """
    A frontend contains a collection of equipment.
    You can access self.client to access the ODB etc (see `midas.client.MidasClient`).
    """
    def __init__(self):
        # You must call __init__ from the base class.
        midas.frontend.FrontendBase.__init__(self, "myfe_name")
        
        # You can add equipment at any time before you call `run()`, but doing
        # it in __init__() seems logical.
        self.add_equipment(MyPeriodicEquipment(self.client))

        self._verbose = 1
        
    def begin_of_run(self, run_number):
        """
        This function will be called at the beginning of the run.
        You don't have to define it, but you probably should.
        You can access individual equipment classes through the `self.equipment`
        dict if needed.
        """
        self.set_all_equipment_status("Running", "greenLight")
        self.client.msg("Frontend has seen start of run number %d" % run_number)
        return midas.status_codes["SUCCESS"]
        
    def end_of_run(self, run_number):
        self.set_all_equipment_status("Finished", "greenLight")
        self.client.msg("Frontend has seen end of run number %d" % run_number)
        return midas.status_codes["SUCCESS"]
    
    def frontend_exit(self):
        """
        Most people won't need to define this function, but you can use
        it for final cleanup if needed.
        """
        print("Goodbye from user code!")
        
if __name__ == "__main__":
    # The main executable is very simple - just create the frontend object,
    # and call run() on it.
    print("EMOE");
#    TRACE.TRACE(7,'EMOEM',TRACE_NAME)
    with MyFrontend() as my_fe:
        my_fe.run()
Attachment 2: val_nightly.csv
21,4219,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  6,4,0,0,0,0,2022-01-06 00:01:00-06:00,2022-01-06 00:01:00-06:00
35,4999,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  7,4,0,0,0,0,2022-01-07 00:01:00-06:00,2022-01-07 00:01:00-06:00
49,4187,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  8,4,0,0,0,0,2022-01-08 00:01:00-06:00,2022-01-08 00:01:00-06:00
63,3875,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  9,4,0,0,0,0,2022-01-09 00:01:00-06:00,2022-01-09 00:01:00-06:00
77,4498,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  10,4,0,0,0,0,2022-01-10 00:01:00-06:00,2022-01-10 00:01:00-06:00
91,5228,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  11,4,0,0,0,0,2022-01-11 00:01:00-06:00,2022-01-11 00:01:00-06:00
105,4682,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  12,4,0,0,0,0,2022-01-12 00:01:00-06:00,2022-01-12 00:01:00-06:00
119,4364,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  13,4,0,0,0,0,2022-01-13 00:01:00-06:00,2022-01-13 00:01:00-06:00
133,5069,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  14,4,0,0,0,0,2022-01-14 00:01:00-06:00,2022-01-14 00:01:00-06:00
147,3848,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  15,4,0,0,0,0,2022-01-15 00:01:00-06:00,2022-01-15 00:01:00-06:00
161,5248,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  16,4,0,0,0,0,2022-01-16 00:01:00-06:00,2022-01-16 00:01:00-06:00
175,5276,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  17,4,0,0,0,0,2022-01-17 00:01:00-06:00,2022-01-17 00:01:00-06:00
189,5089,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  18,4,0,0,0,0,2022-01-18 00:01:00-06:00,2022-01-18 00:01:00-06:00
203,4789,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  19,4,0,0,0,0,2022-01-19 00:01:00-06:00,2022-01-19 00:01:00-06:00
217,4652,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  20,4,0,0,0,0,2022-01-20 00:01:00-06:00,2022-01-20 00:01:00-06:00
232,5343,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  23,5,0,0,0,0,2022-01-21 00:01:00-06:00,2022-01-21 00:01:00-06:00
246,4896,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  30,5,0,0,0,0,2022-01-22 00:01:00-06:00,2022-01-22 00:01:00-06:00
296,4812,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  46,5,0,0,0,0,2022-01-23 00:01:00-06:00,2022-01-23 00:01:00-06:00
310,4994,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  53,5,0,0,0,0,2022-01-24 00:01:00-06:00,2022-01-24 00:01:00-06:00
324,4397,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  60,5,0,0,0,0,2022-01-25 00:01:00-06:00,2022-01-25 00:01:00-06:00
338,5242,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  67,5,0,0,0,0,2022-01-26 00:01:00-06:00,2022-01-26 00:01:00-06:00
352,4915,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  74,5,0,0,0,0,2022-01-27 00:01:00-06:00,2022-01-27 00:01:00-06:00
366,4937,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  81,5,0,0,0,0,2022-01-28 00:01:00-06:00,2022-01-28 00:01:00-06:00
380,5096,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  88,5,0,0,0,0,2022-01-29 00:01:00-06:00,2022-01-29 00:01:00-06:00
394,5139,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  95,5,0,0,0,0,2022-01-30 00:01:00-06:00,2022-01-30 00:01:00-06:00
408,5434,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  102,5,0,0,0,0,2022-01-31 00:01:00-06:00,2022-01-31 00:01:00-06:00
422,5212,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  109,5,0,0,0,0,2022-02-01 00:01:00-06:00,2022-02-01 00:01:00-06:00
436,5144,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  116,5,0,0,0,0,2022-02-02 00:01:00-06:00,2022-02-02 00:01:00-06:00
450,4229,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  123,5,0,0,0,0,2022-02-03 00:01:00-06:00,2022-02-03 00:01:00-06:00
464,4760,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  130,5,0,0,0,0,2022-02-04 00:01:00-06:00,2022-02-04 00:01:00-06:00
478,4770,0.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  137,5,0,0,0,0,2022-02-05 00:01:00-06:00,2022-02-05 00:01:00-06:00
492,5171,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  144,5,0,0,0,0,2022-02-06 00:01:00-06:00,2022-02-06 00:01:00-06:00
650,4740,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  153,5,0,0,0,0,2022-02-10 00:01:00-06:00,2022-02-10 00:01:00-06:00
700,4923,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  160,5,0,0,0,0,2022-02-11 00:01:00-06:00,2022-02-11 00:01:00-06:00
750,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  167,5,0,0,0,0,2022-02-12 00:01:00-06:00,2022-02-12 00:01:00-06:00
800,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  174,5,0,0,0,0,2022-02-13 00:01:00-06:00,2022-02-13 00:01:00-06:00
850,4250,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  181,5,0,0,0,0,2022-02-14 00:01:00-06:00,2022-02-14 00:01:00-06:00
900,4668,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  188,5,0,0,0,0,2022-02-15 00:01:00-06:00,2022-02-15 00:01:00-06:00
950,4638,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  195,5,0,0,0,0,2022-02-16 00:01:00-06:00,2022-02-16 00:01:00-06:00
1000,5111,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  202,5,0,0,0,0,2022-02-17 00:01:00-06:00,2022-02-17 00:01:00-06:00
1050,3788,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  209,5,0,0,0,0,2022-02-18 00:01:00-06:00,2022-02-18 00:01:00-06:00
1100,5291,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  216,5,0,0,0,0,2022-02-19 00:01:00-06:00,2022-02-19 00:01:00-06:00
1150,4563,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  223,5,0,0,0,0,2022-02-20 00:01:00-06:00,2022-02-20 00:01:00-06:00
1200,4649,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  230,5,0,0,0,0,2022-02-21 00:01:00-06:00,2022-02-21 00:01:00-06:00
1250,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  237,5,0,0,0,0,2022-02-22 00:01:00-06:00,2022-02-22 00:01:00-06:00
1300,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  244,5,0,0,0,0,2022-02-23 00:01:00-06:00,2022-02-23 00:01:00-06:00
1350,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  251,5,0,0,0,0,2022-02-24 00:01:00-06:00,2022-02-24 00:01:00-06:00
1400,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  258,5,0,0,0,0,2022-02-25 00:01:00-06:00,2022-02-25 00:01:00-06:00
1450,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  265,5,0,0,0,0,2022-02-26 00:01:00-06:00,2022-02-26 00:01:00-06:00
1500,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  272,5,0,0,0,0,2022-02-27 00:01:00-06:00,2022-02-27 00:01:00-06:00
1550,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  279,5,0,0,0,0,2022-02-28 00:01:00-06:00,2022-02-28 00:01:00-06:00
1600,254,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  286,5,0,0,0,0,2022-03-01 00:01:00-06:00,2022-03-01 00:01:00-06:00
1650,203,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  293,5,0,0,0,0,2022-03-02 00:01:00-06:00,2022-03-02 00:01:00-06:00
1700,259,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  300,5,0,0,0,0,2022-03-03 00:01:00-06:00,2022-03-03 00:01:00-06:00
1750,255,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  307,5,0,0,0,0,2022-03-04 00:01:00-06:00,2022-03-04 00:01:00-06:00
1800,259,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  314,5,0,0,0,0,2022-03-05 00:01:00-06:00,2022-03-05 00:01:00-06:00
1850,284,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  321,5,0,0,0,0,2022-03-06 00:01:00-06:00,2022-03-06 00:01:00-06:00
1900,258,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  328,5,0,0,0,0,2022-03-07 00:01:00-06:00,2022-03-07 00:01:00-06:00
1950,284,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  335,5,0,0,0,0,2022-03-08 00:01:00-06:00,2022-03-08 00:01:00-06:00
2000,220,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  342,5,0,0,0,0,2022-03-09 00:01:00-06:00,2022-03-09 00:01:00-06:00
2050,197,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  349,5,0,0,0,0,2022-03-10 00:01:00-06:00,2022-03-10 00:01:00-06:00
2100,263,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  356,5,0,0,0,0,2022-03-11 00:01:00-06:00,2022-03-11 00:01:00-06:00
2150,283,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  363,5,0,0,0,0,2022-03-12 00:01:00-06:00,2022-03-12 00:01:00-06:00
2200,276,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  370,5,0,0,0,0,2022-03-13 00:01:00-06:00,2022-03-13 00:01:00-06:00
2250,212,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  377,5,0,0,0,0,2022-03-14 00:01:00-05:00,2022-03-14 00:01:00-05:00
2300,255,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  384,5,0,0,0,0,2022-03-15 00:01:00-05:00,2022-03-15 00:01:00-05:00
2350,212,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  391,5,0,0,0,0,2022-03-16 00:01:00-05:00,2022-03-16 00:01:00-05:00
2400,231,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  398,5,0,0,0,0,2022-03-17 00:01:00-05:00,2022-03-17 00:01:00-05:00
2450,209,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  405,5,0,0,0,0,2022-03-18 00:01:00-05:00,2022-03-18 00:01:00-05:00
2500,253,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  412,5,0,0,0,0,2022-03-19 00:01:00-05:00,2022-03-19 00:01:00-05:00
2550,233,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  419,5,0,0,0,0,2022-03-20 00:01:00-05:00,2022-03-20 00:01:00-05:00
2600,1661,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  426,5,0,0,0,0,2022-03-21 00:01:00-05:00,2022-03-21 00:01:00-05:00
2650,1940,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  433,5,0,0,0,0,2022-03-22 00:01:00-05:00,2022-03-22 00:01:00-05:00
2700,1177,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  440,5,0,0,0,0,2022-03-23 00:01:00-05:00,2022-03-23 00:01:00-05:00
2750,1537,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  447,5,0,0,0,0,2022-03-24 00:01:00-05:00,2022-03-24 00:01:00-05:00
2800,1908,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  454,5,0,0,0,0,2022-03-25 00:01:00-05:00,2022-03-25 00:01:00-05:00
2850,1290,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  461,5,0,0,0,0,2022-03-26 00:01:00-05:00,2022-03-26 00:01:00-05:00
2900,1286,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  468,5,0,0,0,0,2022-03-27 00:01:00-05:00,2022-03-27 00:01:00-05:00
2950,1944,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  475,5,0,0,0,0,2022-03-28 00:01:00-05:00,2022-03-28 00:01:00-05:00
3000,1365,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  482,5,0,0,0,0,2022-03-29 00:01:00-05:00,2022-03-29 00:01:00-05:00
3050,1252,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  489,5,0,0,0,0,2022-03-30 00:01:00-05:00,2022-03-30 00:01:00-05:00
3100,2010,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  496,5,0,0,0,0,2022-03-31 00:01:00-05:00,2022-03-31 00:01:00-05:00
3150,1998,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  503,5,0,0,0,0,2022-04-01 00:01:00-05:00,2022-04-01 00:01:00-05:00
3200,1342,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  510,5,0,0,0,0,2022-04-02 00:01:00-05:00,2022-04-02 00:01:00-05:00
3250,2158,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  517,5,0,0,0,0,2022-04-03 00:01:00-05:00,2022-04-03 00:01:00-05:00
3300,2033,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  524,5,0,0,0,0,2022-04-04 00:01:00-05:00,2022-04-04 00:01:00-05:00
3350,1935,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  531,5,0,0,0,0,2022-04-05 00:01:00-05:00,2022-04-05 00:01:00-05:00
3400,1860,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  538,5,0,0,0,0,2022-04-06 00:01:00-05:00,2022-04-06 00:01:00-05:00
3450,1279,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  545,5,0,0,0,0,2022-04-07 00:01:00-05:00,2022-04-07 00:01:00-05:00
3500,1340,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  552,5,0,0,0,0,2022-04-08 00:01:00-05:00,2022-04-08 00:01:00-05:00
3550,1746,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  559,5,0,0,0,0,2022-04-09 00:01:00-05:00,2022-04-09 00:01:00-05:00
3600,1312,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  566,5,0,0,0,0,2022-04-10 00:01:00-05:00,2022-04-10 00:01:00-05:00
3650,1802,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  573,5,0,0,0,0,2022-04-11 00:01:00-05:00,2022-04-11 00:01:00-05:00
3700,1997,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  580,5,0,0,0,0,2022-04-12 00:01:00-05:00,2022-04-12 00:01:00-05:00
3750,1657,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  587,5,0,0,0,0,2022-04-13 00:01:00-05:00,2022-04-13 00:01:00-05:00
3800,1684,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  594,5,0,0,0,0,2022-04-14 00:01:00-05:00,2022-04-14 00:01:00-05:00
3850,1811,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  601,5,0,0,0,0,2022-04-15 00:01:00-05:00,2022-04-15 00:01:00-05:00
3900,1959,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  608,5,0,0,0,0,2022-04-16 00:01:00-05:00,2022-04-16 00:01:00-05:00
3950,1501,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  615,5,0,0,0,0,2022-04-17 00:01:00-05:00,2022-04-17 00:01:00-05:00
4000,1434,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  622,5,0,0,0,0,2022-04-18 00:01:00-05:00,2022-04-18 00:01:00-05:00
4050,1286,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  629,5,0,0,0,0,2022-04-19 00:01:00-05:00,2022-04-19 00:01:00-05:00
4100,1598,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  636,5,0,0,0,0,2022-04-20 00:01:00-05:00,2022-04-20 00:01:00-05:00
4150,1747,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  643,5,0,0,0,0,2022-04-21 00:01:00-05:00,2022-04-21 00:01:00-05:00
4200,1254,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  650,5,0,0,0,0,2022-04-22 00:01:00-05:00,2022-04-22 00:01:00-05:00
4250,2049,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  657,5,0,0,0,0,2022-04-23 00:01:00-05:00,2022-04-23 00:01:00-05:00
4300,1905,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  664,5,0,0,0,0,2022-04-24 00:01:00-05:00,2022-04-24 00:01:00-05:00
4350,1423,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  671,5,0,0,0,0,2022-04-25 00:01:00-05:00,2022-04-25 00:01:00-05:00
4400,2151,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  678,5,0,0,0,0,2022-04-26 00:01:00-05:00,2022-04-26 00:01:00-05:00
4450,2005,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  685,5,0,0,0,0,2022-04-28 00:01:00-05:00,2022-04-28 00:01:00-05:00
4500,1831,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  692,5,0,0,0,0,2022-04-29 00:01:00-05:00,2022-04-29 00:01:00-05:00
4550,1820,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  699,5,0,0,0,0,2022-04-30 00:01:00-05:00,2022-04-30 00:01:00-05:00
4600,1827,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  706,5,0,0,0,0,2022-05-01 00:01:00-05:00,2022-05-01 00:01:00-05:00
4650,1891,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  713,5,0,0,0,0,2022-05-02 00:01:00-05:00,2022-05-02 00:01:00-05:00
4700,1265,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  720,5,0,0,0,0,2022-05-03 00:01:00-05:00,2022-05-03 00:01:00-05:00
4750,2047,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  727,5,0,0,0,0,2022-05-04 00:01:00-05:00,2022-05-04 00:01:00-05:00
4800,1646,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  734,5,0,0,0,0,2022-05-05 00:01:00-05:00,2022-05-05 00:01:00-05:00
4850,1940,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  741,5,0,0,0,0,2022-05-06 00:01:00-05:00,2022-05-06 00:01:00-05:00
4900,1831,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  748,5,0,0,0,0,2022-05-07 00:01:00-05:00,2022-05-07 00:01:00-05:00
4950,1217,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  755,5,0,0,0,0,2022-05-08 00:01:00-05:00,2022-05-08 00:01:00-05:00
5000,1623,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  762,5,0,0,0,0,2022-05-09 00:01:00-05:00,2022-05-09 00:01:00-05:00
5050,1183,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  769,5,0,0,0,0,2022-05-10 00:01:00-05:00,2022-05-10 00:01:00-05:00
5100,1702,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  776,5,0,0,0,0,2022-05-11 00:01:00-05:00,2022-05-11 00:01:00-05:00
5150,1623,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  783,5,0,0,0,0,2022-05-12 00:01:00-05:00,2022-05-12 00:01:00-05:00
5200,1328,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  790,5,0,0,0,0,2022-05-13 00:01:00-05:00,2022-05-13 00:01:00-05:00
5250,1530,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  797,5,0,0,0,0,2022-05-14 00:01:00-05:00,2022-05-14 00:01:00-05:00
5300,1792,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  804,5,0,0,0,0,2022-05-15 00:01:00-05:00,2022-05-15 00:01:00-05:00
5350,1989,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  811,5,0,0,0,0,2022-05-16 00:01:00-05:00,2022-05-16 00:01:00-05:00
5400,1723,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  818,5,0,0,0,0,2022-05-17 00:01:00-05:00,2022-05-17 00:01:00-05:00
5450,1740,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  825,5,0,0,0,0,2022-05-18 00:01:00-05:00,2022-05-18 00:01:00-05:00
5500,1822,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  832,5,0,0,0,0,2022-05-19 00:01:00-05:00,2022-05-19 00:01:00-05:00
5550,1812,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  839,5,0,0,0,0,2022-05-20 00:01:00-05:00,2022-05-20 00:01:00-05:00
5600,1310,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  846,5,0,0,0,0,2022-05-21 00:01:00-05:00,2022-05-21 00:01:00-05:00
5650,1574,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  853,5,0,0,0,0,2022-05-22 00:01:00-05:00,2022-05-22 00:01:00-05:00
5700,1371,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  860,5,0,0,0,0,2022-05-23 00:01:00-05:00,2022-05-23 00:01:00-05:00
5750,1822,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  867,5,0,0,0,0,2022-05-24 00:01:00-05:00,2022-05-24 00:01:00-05:00
5800,1375,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  874,5,0,0,0,0,2022-05-25 00:01:00-05:00,2022-05-25 00:01:00-05:00
5850,1737,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  881,5,0,0,0,0,2022-05-26 00:01:00-05:00,2022-05-26 00:01:00-05:00
5900,1407,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  888,5,0,0,0,0,2022-05-27 00:01:00-05:00,2022-05-27 00:01:00-05:00
5950,2086,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  895,5,0,0,0,0,2022-05-28 00:01:00-05:00,2022-05-28 00:01:00-05:00
6000,1937,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  902,5,0,0,0,0,2022-05-29 00:01:00-05:00,2022-05-29 00:01:00-05:00
6050,1145,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  909,5,0,0,0,0,2022-05-30 00:01:00-05:00,2022-05-30 00:01:00-05:00
6100,1588,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  916,5,0,0,0,0,2022-05-31 00:01:00-05:00,2022-05-31 00:01:00-05:00
6150,1775,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  923,5,0,0,0,0,2022-06-01 00:01:00-05:00,2022-06-01 00:01:00-05:00
6200,1083,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  930,5,0,0,0,0,2022-06-02 00:01:00-05:00,2022-06-02 00:01:00-05:00
6250,1914,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  937,5,0,0,0,0,2022-06-03 00:01:00-05:00,2022-06-03 00:01:00-05:00
6300,1789,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  944,5,0,0,0,0,2022-06-04 00:01:00-05:00,2022-06-04 00:01:00-05:00
6350,1231,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  951,5,0,0,0,0,2022-06-05 00:01:00-05:00,2022-06-05 00:01:00-05:00
6400,1848,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  958,5,0,0,0,0,2022-06-06 00:01:00-05:00,2022-06-06 00:01:00-05:00
6450,1907,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  965,5,0,0,0,0,2022-06-07 00:01:00-05:00,2022-06-07 00:01:00-05:00
6500,2039,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  972,5,0,0,0,0,2022-06-08 00:01:00-05:00,2022-06-08 00:01:00-05:00
6550,1972,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  979,5,0,0,0,0,2022-06-09 00:01:00-05:00,2022-06-09 00:01:00-05:00
6600,1816,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  986,5,0,0,0,0,2022-06-10 00:01:00-05:00,2022-06-10 00:01:00-05:00
6650,1983,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  993,5,0,0,0,0,2022-06-11 00:01:00-05:00,2022-06-11 00:01:00-05:00
6700,1695,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1000,5,0,0,0,0,2022-06-12 00:01:00-05:00,2022-06-12 00:01:00-05:00
6750,1762,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1007,5,0,0,0,0,2022-06-13 00:01:00-05:00,2022-06-13 00:01:00-05:00
6800,1828,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1014,5,0,0,0,0,2022-06-14 00:01:00-05:00,2022-06-14 00:01:00-05:00
6850,1911,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1021,5,0,0,0,0,2022-06-15 00:01:00-05:00,2022-06-15 00:01:00-05:00
6900,1690,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1028,5,0,0,0,0,2022-06-16 00:01:00-05:00,2022-06-16 00:01:00-05:00
6950,1895,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1035,5,0,0,0,0,2022-06-17 00:01:00-05:00,2022-06-17 00:01:00-05:00
7000,2086,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1042,5,0,0,0,0,2022-06-23 00:01:00-05:00,2022-06-23 00:01:00-05:00
7050,1775,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1049,5,0,0,0,0,2022-06-24 00:01:00-05:00,2022-06-24 00:01:00-05:00
7100,1992,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1056,5,0,0,0,0,2022-06-25 00:01:00-05:00,2022-06-25 00:01:00-05:00
7150,1435,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1063,5,0,0,0,0,2022-06-26 00:01:00-05:00,2022-06-26 00:01:00-05:00
7200,1273,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1070,5,0,0,0,0,2022-06-27 00:01:00-05:00,2022-06-27 00:01:00-05:00
7250,2321,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1077,5,0,0,0,0,2022-06-28 00:01:00-05:00,2022-06-28 00:01:00-05:00
7300,1666,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1084,5,0,0,0,0,2022-06-29 00:01:00-05:00,2022-06-29 00:01:00-05:00
7350,1598,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1091,5,0,0,0,0,2022-06-30 00:01:00-05:00,2022-06-30 00:01:00-05:00
7400,2090,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1098,5,0,0,0,0,2022-07-01 00:01:00-05:00,2022-07-01 00:01:00-05:00
7450,2066,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1105,5,0,0,0,0,2022-07-02 00:01:00-05:00,2022-07-02 00:01:00-05:00
7500,1253,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1112,5,0,0,0,0,2022-07-03 00:01:00-05:00,2022-07-03 00:01:00-05:00
7550,1367,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1119,5,0,0,0,0,2022-07-04 00:01:00-05:00,2022-07-04 00:01:00-05:00
7600,1737,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1126,5,0,0,0,0,2022-07-05 00:01:00-05:00,2022-07-05 00:01:00-05:00
7650,2065,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1133,5,0,0,0,0,2022-07-06 00:01:00-05:00,2022-07-06 00:01:00-05:00
7700,2065,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1140,5,0,0,0,0,2022-07-07 00:01:00-05:00,2022-07-07 00:01:00-05:00
7750,1548,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1147,5,0,0,0,0,2022-07-08 00:01:00-05:00,2022-07-08 00:01:00-05:00
7800,1849,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1154,5,0,0,0,0,2022-07-09 00:01:00-05:00,2022-07-09 00:01:00-05:00
7850,1175,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1161,5,0,0,0,0,2022-07-10 00:01:00-05:00,2022-07-10 00:01:00-05:00
7900,1430,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1168,5,0,0,0,0,2022-07-11 00:01:00-05:00,2022-07-11 00:01:00-05:00
7950,1716,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1175,5,0,0,0,0,2022-07-12 00:01:00-05:00,2022-07-12 00:01:00-05:00
8000,1854,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1182,5,0,0,0,0,2022-07-13 00:01:00-05:00,2022-07-13 00:01:00-05:00
8050,1338,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1189,5,0,0,0,0,2022-07-14 00:01:00-05:00,2022-07-14 00:01:00-05:00
8100,1474,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1196,5,0,0,0,0,2022-07-15 00:01:00-05:00,2022-07-15 00:01:00-05:00
8150,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1203,5,0,0,0,0,2022-07-16 00:01:00-05:00,2022-07-16 00:01:00-05:00
8200,1288,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1210,5,0,0,0,0,2022-07-17 00:01:00-05:00,2022-07-17 00:01:00-05:00
8250,1784,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1217,5,0,0,0,0,2022-07-18 00:01:00-05:00,2022-07-18 00:01:00-05:00
8300,1981,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1224,5,0,0,0,0,2022-07-19 00:01:00-05:00,2022-07-19 00:01:00-05:00
8350,1332,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1231,5,0,0,0,0,2022-07-20 00:01:00-05:00,2022-07-20 00:01:00-05:00
8400,1680,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1238,5,0,0,0,0,2022-07-21 00:01:00-05:00,2022-07-21 00:01:00-05:00
8450,1384,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1245,5,0,0,0,0,2022-07-22 00:01:00-05:00,2022-07-22 00:01:00-05:00
8500,1929,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1252,5,0,0,0,0,2022-07-23 00:01:00-05:00,2022-07-23 00:01:00-05:00
8550,1994,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1259,5,0,0,0,0,2022-07-24 00:01:00-05:00,2022-07-24 00:01:00-05:00
8600,1976,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1266,5,0,0,0,0,2022-07-25 00:01:00-05:00,2022-07-25 00:01:00-05:00
8650,1719,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1273,5,0,0,0,0,2022-07-26 00:01:00-05:00,2022-07-26 00:01:00-05:00
8700,1752,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1280,5,0,0,0,0,2022-07-27 00:01:00-05:00,2022-07-27 00:01:00-05:00
8750,1264,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1287,5,0,0,0,0,2022-07-28 00:01:00-05:00,2022-07-28 00:01:00-05:00
8800,1649,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1294,5,0,0,0,0,2022-07-29 00:01:00-05:00,2022-07-29 00:01:00-05:00
8850,1656,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1301,5,0,0,0,0,2022-07-30 00:01:00-05:00,2022-07-30 00:01:00-05:00
8900,1283,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1308,5,0,0,0,0,2022-07-31 00:01:00-05:00,2022-07-31 00:01:00-05:00
8950,1242,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1315,5,0,0,0,0,2022-08-01 00:01:00-05:00,2022-08-01 00:01:00-05:00
9000,1586,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1322,5,0,0,0,0,2022-08-02 00:01:00-05:00,2022-08-02 00:01:00-05:00
9050,1396,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1329,5,0,0,0,0,2022-08-03 00:01:00-05:00,2022-08-03 00:01:00-05:00
9100,2035,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1336,5,0,0,0,0,2022-08-04 00:01:00-05:00,2022-08-04 00:01:00-05:00
9150,1774,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1343,5,0,0,0,0,2022-08-05 00:01:00-05:00,2022-08-05 00:01:00-05:00
9200,1878,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1350,5,0,0,0,0,2022-08-06 00:01:00-05:00,2022-08-06 00:01:00-05:00
9250,1922,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1357,5,0,0,0,0,2022-08-07 00:01:00-05:00,2022-08-07 00:01:00-05:00
9300,2277,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1364,5,0,0,0,0,2022-08-08 00:01:00-05:00,2022-08-08 00:01:00-05:00
9350,1589,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1371,5,0,0,0,0,2022-08-09 00:01:00-05:00,2022-08-09 00:01:00-05:00
9400,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1378,5,0,0,0,0,2022-08-10 00:01:00-05:00,2022-08-10 00:01:00-05:00
9450,1689,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1385,5,0,0,0,0,2022-08-11 00:01:00-05:00,2022-08-11 00:01:00-05:00
9500,1995,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1392,5,0,0,0,0,2022-08-12 00:01:00-05:00,2022-08-12 00:01:00-05:00
9514,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1399,5,0,0,0,0,2022-08-13 00:01:00-05:00,2022-08-13 00:01:00-05:00
9564,1247,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1406,5,0,0,0,0,2022-08-14 00:01:00-05:00,2022-08-14 00:01:00-05:00
9614,1614,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1413,5,0,0,0,0,2022-08-15 00:01:00-05:00,2022-08-15 00:01:00-05:00
9664,1489,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1420,5,0,0,0,0,2022-08-16 00:01:00-05:00,2022-08-16 00:01:00-05:00
9714,1330,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1427,5,0,0,0,0,2022-08-17 00:01:00-05:00,2022-08-17 00:01:00-05:00
9764,1289,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1434,5,0,0,0,0,2022-08-18 00:01:00-05:00,2022-08-18 00:01:00-05:00
9814,1877,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1441,5,0,0,0,0,2022-08-19 00:01:00-05:00,2022-08-19 00:01:00-05:00
9864,1271,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1448,5,0,0,0,0,2022-08-20 00:01:00-05:00,2022-08-20 00:01:00-05:00
9923,1753,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1455,5,0,0,0,0,2022-08-21 00:01:00-05:00,2022-08-21 00:01:00-05:00
9974,1372,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1463,5,0,0,0,0,2022-08-22 00:01:00-05:00,2022-08-22 00:01:00-05:00
10025,1308,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1471,5,0,0,0,0,2022-08-23 00:01:00-05:00,2022-08-23 00:01:00-05:00
10076,1240,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1479,5,0,0,0,0,2022-08-24 00:01:00-05:00,2022-08-24 00:01:00-05:00
10127,1837,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1487,5,0,0,0,0,2022-08-25 00:01:00-05:00,2022-08-25 00:01:00-05:00
10178,1422,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1495,5,0,0,0,0,2022-08-26 00:01:00-05:00,2022-08-26 00:01:00-05:00
10229,1281,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1503,5,0,0,0,0,2022-08-27 00:01:00-05:00,2022-08-27 00:01:00-05:00
10280,1449,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1511,5,0,0,0,0,2022-08-28 00:01:00-05:00,2022-08-28 00:01:00-05:00
10331,1258,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1519,5,0,0,0,0,2022-08-29 00:01:00-05:00,2022-08-29 00:01:00-05:00
10382,1521,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1527,5,0,0,0,0,2022-08-30 00:01:00-05:00,2022-08-30 00:01:00-05:00
10433,1794,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1535,5,0,0,0,0,2022-08-31 00:01:00-05:00,2022-08-31 00:01:00-05:00
10484,1020,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1543,5,0,0,0,0,2022-09-01 00:01:00-05:00,2022-09-01 00:01:00-05:00
10535,1141,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1551,5,0,0,0,0,2022-09-02 00:01:00-05:00,2022-09-02 00:01:00-05:00
10586,1060,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1559,5,0,0,0,0,2022-09-03 00:01:00-05:00,2022-09-03 00:01:00-05:00
10637,1579,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1567,5,0,0,0,0,2022-09-04 00:01:00-05:00,2022-09-04 00:01:00-05:00
10688,961,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1575,5,0,0,0,0,2022-09-05 00:01:00-05:00,2022-09-05 00:01:00-05:00
10739,1251,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1583,5,0,0,0,0,2022-09-06 00:01:00-05:00,2022-09-06 00:01:00-05:00
10790,1748,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1591,5,0,0,0,0,2022-09-07 00:01:00-05:00,2022-09-07 00:01:00-05:00
10841,1475,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1599,5,0,0,0,0,2022-09-08 00:01:00-05:00,2022-09-08 00:01:00-05:00
10892,1229,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1607,5,0,0,0,0,2022-09-09 00:01:00-05:00,2022-09-09 00:01:00-05:00
10943,1082,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1615,5,0,0,0,0,2022-09-10 00:01:00-05:00,2022-09-10 00:01:00-05:00
10994,1768,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1623,5,0,0,0,0,2022-09-11 00:01:00-05:00,2022-09-11 00:01:00-05:00
11045,1111,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1631,5,0,0,0,0,2022-09-12 00:01:00-05:00,2022-09-12 00:01:00-05:00
11096,1221,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1639,5,0,0,0,0,2022-09-13 00:01:00-05:00,2022-09-13 00:01:00-05:00
11147,1649,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1647,5,0,0,0,0,2022-09-14 00:01:00-05:00,2022-09-14 00:01:00-05:00
11198,1565,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1655,5,0,0,0,0,2022-09-15 00:01:00-05:00,2022-09-15 00:01:00-05:00
11249,1492,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1663,5,0,0,0,0,2022-09-16 00:01:00-05:00,2022-09-16 00:01:00-05:00
11300,1215,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1671,5,0,0,0,0,2022-09-17 00:01:00-05:00,2022-09-17 00:01:00-05:00
11351,990,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1679,5,0,0,0,0,2022-09-18 00:01:00-05:00,2022-09-18 00:01:00-05:00
11402,1220,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1687,5,0,0,0,0,2022-09-19 00:01:00-05:00,2022-09-19 00:01:00-05:00
11453,1737,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1695,5,0,0,0,0,2022-09-20 00:01:00-05:00,2022-09-20 00:01:00-05:00
11504,1786,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1703,5,0,0,0,0,2022-09-21 00:01:00-05:00,2022-09-21 00:01:00-05:00
11555,1658,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1711,5,0,0,0,0,2022-09-22 00:01:00-05:00,2022-09-22 00:01:00-05:00
11606,1580,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1719,5,0,0,0,0,2022-09-23 00:01:00-05:00,2022-09-23 00:01:00-05:00
11657,1003,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1727,5,0,0,0,0,2022-09-24 00:01:00-05:00,2022-09-24 00:01:00-05:00
11708,1630,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1735,5,0,0,0,0,2022-09-25 00:01:00-05:00,2022-09-25 00:01:00-05:00
11759,1535,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1743,5,0,0,0,0,2022-09-26 00:01:00-05:00,2022-09-26 00:01:00-05:00
11810,1242,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1751,5,0,0,0,0,2022-09-27 00:01:00-05:00,2022-09-27 00:01:00-05:00
11861,1601,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1759,5,0,0,0,0,2022-09-28 00:01:00-05:00,2022-09-28 00:01:00-05:00
11912,1831,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1767,5,0,0,0,0,2022-09-29 00:01:00-05:00,2022-09-29 00:01:00-05:00
11963,1830,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1775,5,0,0,0,0,2022-09-30 00:01:00-05:00,2022-09-30 00:01:00-05:00
12014,1819,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1783,5,0,0,0,0,2022-10-01 00:01:00-05:00,2022-10-01 00:01:00-05:00
12065,1533,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1791,5,0,0,0,0,2022-10-02 00:01:00-05:00,2022-10-02 00:01:00-05:00
12116,1663,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1799,5,0,0,0,0,2022-10-03 00:01:00-05:00,2022-10-03 00:01:00-05:00
12167,1513,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1807,5,0,0,0,0,2022-10-04 00:01:00-05:00,2022-10-04 00:01:00-05:00
12218,1235,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1815,5,0,0,0,0,2022-10-05 00:01:00-05:00,2022-10-05 00:01:00-05:00
12269,1385,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1823,5,0,0,0,0,2022-10-06 00:01:00-05:00,2022-10-06 00:01:00-05:00
12320,1521,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1831,5,0,0,0,0,2022-10-07 00:01:00-05:00,2022-10-07 00:01:00-05:00
12371,1613,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1839,5,0,0,0,0,2022-10-08 00:01:00-05:00,2022-10-08 00:01:00-05:00
12422,1282,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1847,5,0,0,0,0,2022-10-09 00:01:00-05:00,2022-10-09 00:01:00-05:00
12473,1174,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1855,5,0,0,0,0,2022-10-10 00:01:00-05:00,2022-10-10 00:01:00-05:00
12524,1511,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1863,5,0,0,0,0,2022-10-11 00:01:00-05:00,2022-10-11 00:01:00-05:00
12575,1510,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1871,5,0,0,0,0,2022-10-12 00:01:00-05:00,2022-10-12 00:01:00-05:00
12626,1110,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1879,5,0,0,0,0,2022-10-13 00:01:00-05:00,2022-10-13 00:01:00-05:00
12677,1107,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1887,5,0,0,0,0,2022-10-14 00:01:00-05:00,2022-10-14 00:01:00-05:00
12728,1129,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1895,5,0,0,0,0,2022-10-15 00:01:00-05:00,2022-10-15 00:01:00-05:00
12779,1194,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1903,5,0,0,0,0,2022-10-16 00:01:00-05:00,2022-10-16 00:01:00-05:00
12830,1028,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1911,5,0,0,0,0,2022-10-17 00:01:00-05:00,2022-10-17 00:01:00-05:00
12881,1036,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1919,5,0,0,0,0,2022-10-18 00:01:00-05:00,2022-10-18 00:01:00-05:00
12932,1160,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1927,5,0,0,0,0,2022-10-19 00:01:00-05:00,2022-10-19 00:01:00-05:00
12983,1488,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1935,5,0,0,0,0,2022-10-20 00:01:00-05:00,2022-10-20 00:01:00-05:00
13034,1693,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1943,5,0,0,0,0,2022-10-21 00:01:00-05:00,2022-10-21 00:01:00-05:00
13085,1658,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1951,5,0,0,0,0,2022-10-22 00:01:00-05:00,2022-10-22 00:01:00-05:00
13136,1130,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1959,5,0,0,0,0,2022-10-23 00:01:00-05:00,2022-10-23 00:01:00-05:00
13187,1623,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1967,5,0,0,0,0,2022-10-24 00:01:00-05:00,2022-10-24 00:01:00-05:00
13238,1528,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1975,5,0,0,0,0,2022-10-25 00:01:00-05:00,2022-10-25 00:01:00-05:00
13289,1714,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1983,5,0,0,0,0,2022-10-26 00:01:00-05:00,2022-10-26 00:01:00-05:00
13340,1441,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1991,5,0,0,0,0,2022-10-28 00:01:00-05:00,2022-10-28 00:01:00-05:00
13391,1478,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  1999,5,0,0,0,0,2022-10-29 00:01:00-05:00,2022-10-29 00:01:00-05:00
13442,1346,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2007,5,0,0,0,0,2022-10-30 00:01:00-05:00,2022-10-30 00:01:00-05:00
13493,1568,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2015,5,0,0,0,0,2022-10-31 00:01:00-05:00,2022-10-31 00:01:00-05:00
13544,1076,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2023,5,0,0,0,0,2022-11-01 00:01:00-05:00,2022-11-01 00:01:00-05:00
13595,1462,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2031,5,0,0,0,0,2022-11-02 00:01:00-05:00,2022-11-02 00:01:00-05:00
13646,1365,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2039,5,0,0,0,0,2022-11-03 00:01:00-05:00,2022-11-03 00:01:00-05:00
13697,1491,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2047,5,0,0,0,0,2022-11-04 00:01:00-05:00,2022-11-04 00:01:00-05:00
13748,1486,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2055,5,0,0,0,0,2022-11-05 00:01:00-05:00,2022-11-05 00:01:00-05:00
13799,1576,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2063,5,0,0,0,0,2022-11-06 00:01:00-05:00,2022-11-06 00:01:00-05:00
13850,1121,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2071,5,0,0,0,0,2022-11-07 00:01:00-06:00,2022-11-07 00:01:00-06:00
13901,0.0,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2079,5,0,0,0,0,2022-11-08 00:01:00-06:00,2022-11-08 00:01:00-06:00
13952,1401,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2087,5,0,0,0,0,2022-11-09 00:01:00-06:00,2022-11-09 00:01:00-06:00
14003,1099,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2095,5,0,0,0,0,2022-11-10 00:01:00-06:00,2022-11-10 00:01:00-06:00
14054,1134,150.0,0  5,valNightly,reco,day,0  6,ops,stats,CPU  2103,5,0,0,0,0,2022-11-11 00:01:00-06:00,2022-11-11 00:01:00-06:00
... 783 more lines ...
  2943   19 Feb 2025 Lukas GerritzenBug ReportDefault write cache size for new equipments breaks compatibility with older equipments
We have a frontend for slow control with a lot of legacy code. I wanted to add a new equipment using the
mdev_mscb class. It seems like the default write cache size is 1000000B now, which produces error
messages like this:
12:51:20.154 2025/02/19 [SC Frontend,ERROR] [mfe.cxx:620:register_equipment,ERROR] Write cache size mismatch for buffer "SYSTEM": equipment "Environment" asked for 0, while eqiupment "LED" asked for 10000000
12:51:20.154 2025/02/19 [SC Frontend,ERROR] [mfe.cxx:620:register_equipment,ERROR] Write cache size mismatch for buffer "SYSTEM": equipment "LED" asked for 10000000, while eqiupment "Xenon" asked for 0

I can manually change the write cache size in /Equipment/LED/Common/Write cache size to 0. However, if I delete the LED tree in the ODB, then I get the same problems again. It would be nice if I could either choose the size as 0 in the frontend code, or if the defaults were compatible with our legacy code.

The commit that made the write cache size configurable seems to be from 2019: https://bitbucket.org/tmidas/midas/commits/3619ecc6ba1d29d74c16aa6571e40920018184c0
  2944   24 Feb 2025 Stefan RittBug ReportDefault write cache size for new equipments breaks compatibility with older equipments
The commit that introduced the write cache size check is https://bitbucket.org/tmidas/midas/commits/3619ecc6ba1d29d74c16aa6571e40920018184c0

Unfortunately K.O. added the write cache size to the equipment list, but there is currently no way to change this programmatically from the user frontend code. The options I see are

1) Re-arrange the equipment settings so that the write case size comes to the end of the list which the user initializes, like
   {"Trigger",               /* equipment name */
      {1, 0,                 /* event ID, trigger mask */
         "SYSTEM",           /* event buffer */
         EQ_POLLED,          /* equipment type */
         0,                  /* event source */
         "MIDAS",            /* format */
         TRUE,               /* enabled */
         RO_RUNNING |        /* read only when running */
         RO_ODB,             /* and update ODB */
         100,                /* poll for 100ms */
         0,                  /* stop run after this event limit */
         0,                  /* number of sub events */
         0,                  /* don't log history */
         "", "", "", "", "", 0, 0},
      read_trigger_event,    /* readout routine */
      10000000,              /* write cache size */
   },

2) Add a function
fe_set_write_case(int size);
which goes through the local equipment list and sets the cache size for all equipments to be the same.

I would appreciate some guidance from K.O. who introduced that code above.

/Stefan
  2947   11 Mar 2025 Federico RezzonicoBug Reportpython hist_get_events not returning events, but javascript does
After starting midas (mhttpd &, and mlogger -D) and running the `fetest` frontend I went into the midas/python/examples directory and ran basic_hist_script.py, and, even though I could see the 'pytest' program in the Programs page,

Valid events are:
Enter event name:

was printed out, which signified that no events were found. No errors were displayed.

Instead, when trying to do the same in javascript (using mjsonrpc_send_request( mjsonrpc_make_request("hs_get_events")).then(console.log)), I was able to get the expected events.

The History page also displayed the expected data and the plots worked correctly.

Device info: Chip: Apple M1 Pro, OS: Sequoia (15.3)

MIDAS version: bitbucket commit 84c7ef7

Python version: 3.13.2
ELOG V3.1.4-2e1708b5