def get_archive_pv_value(
    PV,
    label,
    start_time,
    end_time,
    scan_archives=True,
    limit=100000,
    interpolation='raw',
    archiver=None,
):
    '''get PV, PV-Label from archiver from start_time to end_time

    Return:
       pandas.DataFrame with keys as time-str, time-float, label-values 
    '''

    import pandas as pd
    import numpy as np
    import time

    if archiver is None:
        from channelarchiver import Archiver
        archiver = [
            Archiver(
                'http://xf11id-ca.nsls2.bnl.local/cgi-bin/ArchiveDataServer.cgi'
            )
        ]
        #if scan_archives:
    #archiver.scan_archives()
    if label[:3] == 'Acc': arch = archiver[1]
    else: arch = archiver[0]
    data = arch.get(PV,
                    start_time,
                    end_time,
                    scan_archives=scan_archives,
                    limit=limit,
                    interpolation=interpolation)

    td = np.array(data.times)
    v = np.array(data.values, dtype=float)
    td = make_wave_data(td, dtype='x')
    v = make_wave_data(v, dtype='y')

    tf = trans_td_to_tf(td)
    tv = np.array([td, tf, v]).T
    index = np.arange(len(tv))
    data = tv
    df = pd.DataFrame(data, index=index, columns=['td', 'tf', label])
    #

    print('seraching %s from: %s---to: %s' % (label, start_time, end_time))
    print('Found results:     from: %s  to :%s with  %s points.' %
          (df.td[0], df.td[len(df.td) - 1], len(df.td)))
    return df
def get_archive_pvlist_values(PVs,
                              labels,
                              start_time,
                              end_time,
                              limit=100000,
                              interpolation='raw'):
    '''get PV-list, PV-Label-list from archiver from start_time to end_time,
       Return:
       a dict { label:
       pandas.DataFrame with keys as time-str, time-float, label-values
              }
    '''

    from channelarchiver import Archiver
    archiver = Archiver(
        'http://xf11id-ca.nsls2.bnl.local/cgi-bin/ArchiveDataServer.cgi')
    archiver_acc = Archiver(
        'http://ca.cs.nsls2.local:8888/cgi-bin/ArchiveDataServer.cgi')

    #archiver.scan_archives()

    dict_tv = {}
    N = len(PVs)
    for i in range(N):
        PV = PVs[i]
        label = labels[i]
        if i == 0: scan_archives = True
        else: scan_archives = False

        scan_archives = True
        dict_tv[label] = get_archive_pv_value(
            PV,
            label,
            start_time,
            end_time,
            scan_archives=scan_archives,
            limit=limit,
            interpolation=interpolation,
            archiver=[archiver, archiver_acc])

    return dict_tv
Example #3
0
Based off of cafetch.py, written by Elena, with a few features removed to limit
 dependencies.

Changelog:
2020-06-08  DG  Ported to Python 3 and ObserverTools, takes a series of keys or
 just one.

"""

from channelarchiver import Archiver
from argparse import ArgumentParser
from astropy.time import Time
import socket

try:
    telemetry = Archiver('http://sdss-telemetry.apo.nmsu.edu/'
                         'telemetry/cgi/ArchiveDataServer.cgi')
    telemetry.scan_archives()
except (socket.gaierror, ConnectionRefusedError):
    try:
        telemetry = Archiver('http://*****:*****@'
            'sdss-gateway.apo.nmsu.edu')

__version__ = '3.1.1'

Example #4
0
 def setUp(self):
     self.archiver = Archiver(
         'https://xf23id-ca/cgi-bin/ArchiveDataServer.cgi')
     self.archiver.archiver = MockArchiver()
Example #5
0
#!/usr/bin/env python3

# bernie Tue. 26 June '18
# playing around

from channelarchiver import Archiver, codes, utils
ss = 'http://sdss-telemetry.apo.nmsu.edu/telemetry/cgi/ArchiveDataServer.cgi'
#ss='http://localhost:5080/telemetry/cgi/ArchiveDataServer.cgi'

archiver = Archiver(ss)
archiver.scan_archives()

start = '2018-06-25 10:00:00'
end = '2018-06-26 11:00:00'

archiver.scan_archives()
data1 = archiver.get('25m:boss:SP1B2LN2TempRead',
                     start,
                     end,
                     interpolation='raw',
                     scan_archives=False)
data2 = archiver.get('25m:boss:SP1R0LN2TempRead',
                     start,
                     end,
                     interpolation='raw',
                     scan_archives=False)
data3 = archiver.get('25m:boss:SP2B2LN2TempRead',
                     start,
                     end,
                     interpolation='raw',
                     scan_archives=False)
 def setUp(self):
     self.archiver = Archiver('http://fake')
     self.archiver.archiver = MockArchiver()
class TestArchiver(unittest.TestCase):
    
    def setUp(self):
        self.archiver = Archiver('http://fake')
        self.archiver.archiver = MockArchiver()

    def test_scan_archives_all(self):
        self.archiver.scan_archives()
        archives_for_channel = self.archiver.archives_for_channel
        data = self.archiver.get('XF:23IDA-VA:0{DP:1-IP:1}P-I', '2013-08-11', '2013-08-12')
        print data
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertTrue('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertTrue('EXAMPLE:ENUM_SCALAR' in archives_for_channel)
        self.assertEqual(
            archives_for_channel,
            {
                'EXAMPLE:DOUBLE_SCALAR{TD:1}': [
                    ArchiveProperties(
                        key=1001,
                        start_time=datetime.datetime(2012, 7, 12, 21, 47, 23, 664000, tzinfo=utc),
                        end_time=datetime.datetime(2012, 7, 13, 11, 18, 55, 671259, tzinfo=utc)
                    )
                 ],
                 'EXAMPLE:INT_WAVEFORM': [
                     ArchiveProperties(
                         key=1001,
                         start_time=datetime.datetime(2012, 7, 12, 23, 14, 19, 129600, tzinfo=utc),
                         end_time=datetime.datetime(2012, 7, 13, 8, 26, 18, 558211, tzinfo=utc)
                     )
                 ],
                 'EXAMPLE:ENUM_SCALAR': [
                     ArchiveProperties(
                         key=1008,
                         start_time=datetime.datetime(2012, 7, 12, 22, 41, 10, 765676, tzinfo=utc),
                         end_time=datetime.datetime(2012, 7, 13, 9, 20, 23, 623789, tzinfo=utc)
                     )
                 ]
            }
        )

    def test_scan_archives_one(self):
        self.archiver.scan_archives('EXAMPLE:DOUBLE_SCALAR{TD:1}')
        archives_for_channel = self.archiver.archives_for_channel.keys()
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertFalse('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertFalse('EXAMPLE:ENUM_SCALAR' in archives_for_channel)

    def test_scan_archives_list(self):
        self.archiver.scan_archives(['EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                     'EXAMPLE:ENUM_SCALAR'])
        archives_for_channel = self.archiver.archives_for_channel.keys()
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertFalse('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertTrue('EXAMPLE:ENUM_SCALAR' in archives_for_channel)

    def test_get_scalar(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        data = self.archiver.get(['EXAMPLE:DOUBLE_SCALAR{TD:1}'], start, end,
                                 interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(data, list))
        channel_data = data[0]
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.data_type, codes.data_type.DOUBLE)
        self.assertEqual(channel_data.elements, 1)
        self.assertEqual(channel_data.values, [ 200.5, 199.9, 198.7, 196.1 ])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 12, 21, 47, 23, 664000, utc),
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc),
            datetime.datetime(2012, 7, 13, 11, 18, 55, 671259, utc)
        ])
        self.assertEqual(channel_data.statuses, [0, 6, 6, 5])
        self.assertEqual(channel_data.severities, [0, 1, 1, 2])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC()')

    def test_get_interpolation_string(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                         interpolation='raw')
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.values, [ 200.5, 199.9, 198.7, 196.1 ])

    def test_get_scalar_str(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                        interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(channel_data, ChannelData))
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.data_type, codes.data_type.DOUBLE)

    def test_get_scalar_in_tz(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                 interpolation=codes.interpolation.RAW,
                                 tz=utils.UTC(11.5))
        self.assertEqual(str(data.times[0].tzinfo), 'UTC+11:30')
        self.assertEqual(repr(data.times[0].tzinfo), 'UTC(+11.5)')

    def test_get_without_scan(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        self.assertRaises(exceptions.ChannelNotFound,
                          self.archiver.get, ['EXAMPLE:DOUBLE_SCALAR{TD:1}'],
                          start, end,
                          interpolation=codes.interpolation.RAW,
                          scan_archives=False)

    def test_get_with_restrictive_interval(self):
        start = datetime.datetime(2012, 7, 13, tzinfo=utc)
        end = datetime.datetime(2012, 7, 13, 10, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [ 199.9, 198.7 ])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])

    def test_get_with_restrictive_interval_with_tzs(self):
        start = datetime.datetime(2012, 7, 13, 10, tzinfo=utils.UTC(10))
        end = datetime.datetime(2012, 7, 13, 20, tzinfo=utils.UTC(10))
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [ 199.9, 198.7 ])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC(+10)')

    def test_get_with_str_times(self):
        start = '2012-07-13 00:00:00Z'
        end = '2012-07-13 10:00:00Z'
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [ 199.9, 198.7 ])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])

    def test_get_with_str_times_incl_tz(self):
        start = '2012-07-13 10:00:00+10:00'
        end = '2012-07-13 20:00:00+10:00'
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}', start, end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [ 199.9, 198.7 ])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC(+10)')

    def test_get_waveform(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        channel_data = self.archiver.get(
                            'EXAMPLE:INT_WAVEFORM', start, end,
                            interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.channel, 'EXAMPLE:INT_WAVEFORM')
        self.assertEqual(channel_data.data_type, codes.data_type.INT)
        self.assertEqual(channel_data.elements, 3)
        self.assertEqual(channel_data.values, [
            [3, 5, 13],
            [2, 4, 11],
            [0, 7, 1]
        ])

    def test_get_enum(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        channel_data = self.archiver.get(
                            'EXAMPLE:ENUM_SCALAR', start, end,
                            interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.channel, 'EXAMPLE:ENUM_SCALAR')
        self.assertEqual(channel_data.data_type, codes.data_type.ENUM)
        self.assertEqual(channel_data.values, [7, 1, 8])

    def test_get_multiple(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        data = self.archiver.get(
                ['EXAMPLE:DOUBLE_SCALAR{TD:1}',
                 'EXAMPLE:INT_WAVEFORM',
                 'EXAMPLE:ENUM_SCALAR'],
                start, end,
                interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(data, list))
        self.assertEqual(data[0].channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(data[1].channel, 'EXAMPLE:INT_WAVEFORM')
        self.assertEqual(data[2].channel, 'EXAMPLE:ENUM_SCALAR')
        self.assertEqual(data[0].values, [ 200.5, 199.9, 198.7, 196.1 ])
        self.assertEqual(data[1].values, [[3, 5, 13],
                                          [2, 4, 11],
                                          [0, 7, 1]])
        self.assertEqual(data[2].values, [7, 1, 8])

    def test_get_with_wrong_number_of_keys(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        self.assertRaises(exceptions.ChannelKeyMismatch,
                          self.archiver.get,
                          [ 'EXAMPLE:DOUBLE_SCALAR{TD:1}' ],
                          start, end,
                          archive_keys=[1001, 1008],
                          interpolation=codes.interpolation.RAW)
Example #8
0
#!/usr/bin/env python3

# bernie Tue. 26 June '18
# just playing around:  a script to retrieve arbitrarily defined intervals of APO process variables

import datetime
from channelarchiver import Archiver, codes, utils
ss = 'http://sdss-telemetry.apo.nmsu.edu/telemetry/cgi/ArchiveDataServer.cgi'

archiver = Archiver(ss)
archiver.scan_archives()

# DEFAULT INTERVAL IS PAST 24 HOURS BUT WE SHOULD BE ABLE TO OVERRIDE ON THE COMMAND-LINE:
# start = str(datetime.datetime.utcnow() - datetime.timedelta(days=1))	# 1 day before current moment
# end = str(datetime.datetime.utcnow())			# current moment

# start='2018-10-10 01:00:00'
# end='2018-10-10 12:00:00'

periods = ([ '2017-10-01 00:00:00', '2017-10-01 12:19:33' ], \
 [ '2017-10-02 00:00:00', '2017-10-02 11:43:34' ], \
 [ '2017-10-08 00:00:00', '2017-10-08 12:14:30' ], \
 [ '2017-10-09 00:00:00', '2017-10-09 12:23:45' ], \
 [ '2017-10-10 00:00:00', '2017-10-10 12:40:04' ], \
 [ '2017-10-11 00:00:00', '2017-10-11 12:56:26' ], \
 [ '2017-10-12 00:00:00', '2017-10-12 12:30:08' ], \
 [ '2017-10-13 00:00:00', '2017-10-13 11:07:09' ], \
 [ '2017-10-14 00:00:00', '2017-10-14 12:32:42' ], \
 [ '2017-10-15 00:00:00', '2017-10-15 12:47:11' ], \
 [ '2017-10-16 00:00:00', '2017-10-16 12:43:37' ], \
 [ '2017-10-17 00:00:00', '2017-10-17 12:20:21' ], \
Example #9
0
 def setUp(self):
     self.archiver = Archiver('http://fake')
     self.archiver.archiver = MockArchiver()
def archiver():
    archiver = Archiver("http://fake")
    archiver.archiver = MockArchiver()
    return archiver
Example #11
0
class TestArchiver(unittest.TestCase):
    def setUp(self):
        self.archiver = Archiver('http://fake')
        self.archiver.archiver = MockArchiver()

    def test_scan_archives_all(self):
        self.archiver.scan_archives()
        archives_for_channel = self.archiver.archives_for_channel
        data = self.archiver.get('XF:23IDA-VA:0{DP:1-IP:1}P-I', '2013-08-11',
                                 '2013-08-12')
        print data
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertTrue('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertTrue('EXAMPLE:ENUM_SCALAR' in archives_for_channel)
        self.assertEqual(
            archives_for_channel, {
                'EXAMPLE:DOUBLE_SCALAR{TD:1}': [
                    ArchiveProperties(
                        key=1001,
                        start_time=datetime.datetime(
                            2012, 7, 12, 21, 47, 23, 664000, tzinfo=utc),
                        end_time=datetime.datetime(
                            2012, 7, 13, 11, 18, 55, 671259, tzinfo=utc))
                ],
                'EXAMPLE:INT_WAVEFORM': [
                    ArchiveProperties(
                        key=1001,
                        start_time=datetime.datetime(
                            2012, 7, 12, 23, 14, 19, 129600, tzinfo=utc),
                        end_time=datetime.datetime(
                            2012, 7, 13, 8, 26, 18, 558211, tzinfo=utc))
                ],
                'EXAMPLE:ENUM_SCALAR': [
                    ArchiveProperties(
                        key=1008,
                        start_time=datetime.datetime(
                            2012, 7, 12, 22, 41, 10, 765676, tzinfo=utc),
                        end_time=datetime.datetime(
                            2012, 7, 13, 9, 20, 23, 623789, tzinfo=utc))
                ]
            })

    def test_scan_archives_one(self):
        self.archiver.scan_archives('EXAMPLE:DOUBLE_SCALAR{TD:1}')
        archives_for_channel = self.archiver.archives_for_channel.keys()
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertFalse('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertFalse('EXAMPLE:ENUM_SCALAR' in archives_for_channel)

    def test_scan_archives_list(self):
        self.archiver.scan_archives(
            ['EXAMPLE:DOUBLE_SCALAR{TD:1}', 'EXAMPLE:ENUM_SCALAR'])
        archives_for_channel = self.archiver.archives_for_channel.keys()
        self.assertTrue('EXAMPLE:DOUBLE_SCALAR{TD:1}' in archives_for_channel)
        self.assertFalse('EXAMPLE:INT_WAVEFORM' in archives_for_channel)
        self.assertTrue('EXAMPLE:ENUM_SCALAR' in archives_for_channel)

    def test_get_scalar(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        data = self.archiver.get(['EXAMPLE:DOUBLE_SCALAR{TD:1}'],
                                 start,
                                 end,
                                 interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(data, list))
        channel_data = data[0]
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.data_type, codes.data_type.DOUBLE)
        self.assertEqual(channel_data.elements, 1)
        self.assertEqual(channel_data.values, [200.5, 199.9, 198.7, 196.1])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 12, 21, 47, 23, 664000, utc),
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc),
            datetime.datetime(2012, 7, 13, 11, 18, 55, 671259, utc)
        ])
        self.assertEqual(channel_data.statuses, [0, 6, 6, 5])
        self.assertEqual(channel_data.severities, [0, 1, 1, 2])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC()')

    def test_get_interpolation_string(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation='raw')
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.values, [200.5, 199.9, 198.7, 196.1])

    def test_get_scalar_str(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(channel_data, ChannelData))
        self.assertEqual(channel_data.channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(channel_data.data_type, codes.data_type.DOUBLE)

    def test_get_scalar_in_tz(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                 start,
                                 end,
                                 interpolation=codes.interpolation.RAW,
                                 tz=utils.UTC(11.5))
        self.assertEqual(str(data.times[0].tzinfo), 'UTC+11:30')
        self.assertEqual(repr(data.times[0].tzinfo), 'UTC(+11.5)')

    def test_get_without_scan(self):
        start = datetime.datetime(2012, 1, 1, tzinfo=utc)
        end = datetime.datetime(2013, 1, 1, tzinfo=utc)
        self.assertRaises(exceptions.ChannelNotFound,
                          self.archiver.get, ['EXAMPLE:DOUBLE_SCALAR{TD:1}'],
                          start,
                          end,
                          interpolation=codes.interpolation.RAW,
                          scan_archives=False)

    def test_get_with_restrictive_interval(self):
        start = datetime.datetime(2012, 7, 13, tzinfo=utc)
        end = datetime.datetime(2012, 7, 13, 10, tzinfo=utc)
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [199.9, 198.7])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])

    def test_get_with_restrictive_interval_with_tzs(self):
        start = datetime.datetime(2012, 7, 13, 10, tzinfo=utils.UTC(10))
        end = datetime.datetime(2012, 7, 13, 20, tzinfo=utils.UTC(10))
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [199.9, 198.7])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC(+10)')

    def test_get_with_str_times(self):
        start = '2012-07-13 00:00:00Z'
        end = '2012-07-13 10:00:00Z'
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [199.9, 198.7])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])

    def test_get_with_str_times_incl_tz(self):
        start = '2012-07-13 10:00:00+10:00'
        end = '2012-07-13 20:00:00+10:00'
        channel_data = self.archiver.get('EXAMPLE:DOUBLE_SCALAR{TD:1}',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.values, [199.9, 198.7])
        self.assertEqual(channel_data.times, [
            datetime.datetime(2012, 7, 13, 2, 5, 1, 443589, utc),
            datetime.datetime(2012, 7, 13, 7, 19, 31, 806097, utc)
        ])
        self.assertEqual(repr(channel_data.times[0].tzinfo), 'UTC(+10)')

    def test_get_waveform(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        channel_data = self.archiver.get('EXAMPLE:INT_WAVEFORM',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.channel, 'EXAMPLE:INT_WAVEFORM')
        self.assertEqual(channel_data.data_type, codes.data_type.INT)
        self.assertEqual(channel_data.elements, 3)
        self.assertEqual(channel_data.values,
                         [[3, 5, 13], [2, 4, 11], [0, 7, 1]])

    def test_get_enum(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        channel_data = self.archiver.get('EXAMPLE:ENUM_SCALAR',
                                         start,
                                         end,
                                         interpolation=codes.interpolation.RAW)
        self.assertEqual(channel_data.channel, 'EXAMPLE:ENUM_SCALAR')
        self.assertEqual(channel_data.data_type, codes.data_type.ENUM)
        self.assertEqual(channel_data.values, [7, 1, 8])

    def test_get_multiple(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        data = self.archiver.get([
            'EXAMPLE:DOUBLE_SCALAR{TD:1}', 'EXAMPLE:INT_WAVEFORM',
            'EXAMPLE:ENUM_SCALAR'
        ],
                                 start,
                                 end,
                                 interpolation=codes.interpolation.RAW)
        self.assertTrue(isinstance(data, list))
        self.assertEqual(data[0].channel, 'EXAMPLE:DOUBLE_SCALAR{TD:1}')
        self.assertEqual(data[1].channel, 'EXAMPLE:INT_WAVEFORM')
        self.assertEqual(data[2].channel, 'EXAMPLE:ENUM_SCALAR')
        self.assertEqual(data[0].values, [200.5, 199.9, 198.7, 196.1])
        self.assertEqual(data[1].values, [[3, 5, 13], [2, 4, 11], [0, 7, 1]])
        self.assertEqual(data[2].values, [7, 1, 8])

    def test_get_with_wrong_number_of_keys(self):
        start = datetime.datetime(2012, 1, 1)
        end = datetime.datetime(2013, 1, 1)
        self.assertRaises(exceptions.ChannelKeyMismatch,
                          self.archiver.get, ['EXAMPLE:DOUBLE_SCALAR{TD:1}'],
                          start,
                          end,
                          archive_keys=[1001, 1008],
                          interpolation=codes.interpolation.RAW)
Example #12
0
"""
See this CA library  https://github.com/RobbieClarken/channelarchiver
"""

from channelarchiver import Archiver, codes, utils
import optparse
import datetime
from keydict import configKey

parser = optparse.OptionParser()
utc = utils.UTC()

prefix = "test"

ss = 'http://sdss-telemetry.apo.nmsu.edu/telemetry/cgi/ArchiveDataServer.cgi'
archiver = Archiver(ss)


def getMultiData(channel, startTime, endTime):
    """ getting multiple values - in progress, testing mode"""

    channels = [
        "25m:guider:probe:exposureID", "25m:guider:probe:probeID",
        "25m:guider:probe:flags"
    ]
    archiver.scan_archives()
    data0, data1, data2 = archiver.get(channels, startTime, endTime)
    print("----------------------------------------------")
    print("    Data     Time(UT)     Value")
    print("----------------------------------------------")
    for i in range(len(data0.values)):
def get_archived_pv(pv,
                    start_time,
                    end_time,
                    label=None,
                    limit=None,
                    make_wave=True,
                    interpolation='raw'):
    '''Yugang May 15, 2017
	   Get a archived PV value
       Input:
           start time:  str, e.g., '2017-04-11 09:00', 
           end time: str,   e.g., '2017-04-12 11:00'
           label: str, a meaningful label for the pv
           limit: integer, the limit data point
           make_wave: if True, make a 'square-wave like' data
           interpolation: 'raw', gives the raw archived data
       Return:  a pandas.dataframe with column as
       datetime, float time, and value
data
       An example:
           data = get_archived_pv('XF:11IDA-OP{Mono:DCM-Ax:Bragg}T-I', '2017-04-11 09:00', '2017-04-11 11:00')

       '''

    from channelarchiver import Archiver
    archiver = Archiver(
        'http://xf11id-ca.cs.nsls2.local/cgi-bin/ArchiveDataServer.cgi')

    import numpy as np
    import pandas as pd

    if label is None:
        label = pv

    #if pv[0][:2] == 'SR':
    #    res = arget( pv,start=start_time,
    #              end=end_time,count=limit, conf = 'middle')
    #else:
    print('Seraching PV: %s from: %s---to: %s' % (label, start_time, end_time))
    res = archiver.get(pv,
                       start_time,
                       end_time,
                       scan_archives=True,
                       limit=limit,
                       interpolation=interpolation)

    #print res
    key = pv
    v = np.array(res[key][0], dtype=float)
    k1 = res[key][1]
    N = len(k1)
    sec = np.array([k1[i][2] for i in range(N)])
    nsec = np.array([k1[i][3] for i in range(N)])
    tf = sec + nsec * 10**(-9)
    if make_wave:
        v = make_wave_data(v, dtype='y')
        tf = make_wave_data(tf, dtype='x')
    td = trans_tf_to_td(tf, dtype='array')
    NN = len(td)
    tv = np.array([td, tf.reshape(NN), v.reshape(NN)]).T
    index = np.arange(len(tv))
    data = tv
    df = pd.DataFrame(data, index=index, columns=['td', 'tf', label[0]])
    if make_wave: fnum = len(df.td) / 2
    else: fnum = len(df.td)
    return df
Example #14
0
def archiver():
    archiver = Archiver("http://fake")
    archiver.archiver = MockArchiver()
    return archiver
Example #15
0
#!/usr/bin/env python3

import argparse
import time
import datetime
from channelarchiver import Archiver, codes, utils

ss = 'http://sdss-telemetry.apo.nmsu.edu/telemetry/cgi/ArchiveDataServer.cgi'
# ss='http://localhost:5080/telemetry/cgi/ArchiveDataServer.cgi'
archiver = Archiver(ss)

# TAI_UTC =34
TAI_UTC = 0
aSjd = 40587.3
bSjd = 86400.0


def curSjd():
    # current mjd
    sjd = (time.time() + TAI_UTC) / bSjd + aSjd
    return int(sjd)


def sjd_to_time(sjd):
    sjd1 = sjd
    tm = (sjd1 - aSjd) * bSjd - TAI_UTC
    return tm  # time in seconds time.time()


def getTimeStamps(sjd):
    startStamp = sjd_to_time(int(sjd + 0.3))
Example #16
0
#!/usr/bin/env python3

import argparse
import time
import datetime
from channelarchiver import Archiver

ss = 'http://sdss-telemetry.apo.nmsu.edu/telemetry/cgi/ArchiveDataServer.cgi'
# ss='http://localhost:5080/telemetry/cgi/ArchiveDataServer.cgi'
archiver = Archiver(ss)

# TAI_UTC =34;
TAI_UTC = 0
aSjd = 40587.3
bSjd = 86400.0


def curSjd():
    # current mjd
    sjd = (time.time() + TAI_UTC) / bSjd + aSjd
    return int(sjd)


def sjd_to_time(sjd):
    sjd1 = sjd
    tm = (sjd1 - aSjd) * bSjd - TAI_UTC
    return tm  # time in seconds time.time()


def getTimeStamps(sjd):
    startStamp = sjd_to_time(int(sjd + 0.3))