Ejemplo n.º 1
0
class FAQueue:
    def __init__(self):
        # Load our config first
        config = ConfigParser()
        config.read(os.path.join(FA_HOME, "etc", "config.ini"))

        # Create the logging directory if it does not exist
        logging_dir = config.get("general", "logging_dir")
        if not os.path.exists(logging_dir):
            print('Creating log directory: {}'.format(logging_dir))
            os.makedirs(logging_dir)

        # Initialize logging
        log_path = os.path.join(FA_HOME, 'etc', 'logging.ini')
        try:
            logging.config.fileConfig(log_path)
        except Exception as e:
            sys.exit('unable to load logging configuration file {}: {}'.format(
                log_path, str(e)))

        # Quick hack
        logging.getLogger('requests.packages.urllib3.connectionpool').setLevel(
            logging.WARNING)

        # Set our environment proxy variables
        os.environ['http_proxy'] = config.get('proxy', 'http_proxy')
        os.environ['https_proxy'] = config.get('proxy', 'https_proxy')
        log.info('Using http_proxy {}'.format(os.environ['http_proxy']))
        log.info('Using https_proxy {}'.format(os.environ['https_proxy']))

        # Create directories if they do not exist
        working_dir = config.get("general", "working_dir")
        if not os.path.exists(working_dir):
            log.info("Working directory does not exist. Creating...")
            os.makedirs(working_dir)

        self.scheduler = None
        # Register the signal handler for SIGINT.
        signal.signal(signal.SIGINT, self.signal_handler)

    def run(self):
        self.scheduler = Scheduler()
        self.scheduler.start()

    def signal_handler(self, signum, frame):
        """ Signal handler so the process pool can complete gracefully. """
        log.warning(
            'Caught signal to terminate! Waiting for pool to finish processing.'
        )
        if self.scheduler:
            self.scheduler.stop()
            log.warning('Goodbye.')
        else:
            log.warning('Scheduler not running. Goodbye.')
        sys.exit()
Ejemplo n.º 2
0
class virtual_Tlogger(Instrument):
    def __init__(self, name, igh=None):
        Instrument.__init__(self, name, tags=['virtual'])

        self._igh = qkit.instruments.get(igh)

        self.add_parameter('timeout',
                           type=float,
                           flags=Instrument.FLAG_GETSET,
                           units='sec')
        self.add_parameter('idle_mintime',
                           type=float,
                           flags=Instrument.FLAG_GETSET,
                           units='sec')
        self.add_parameter('slow_mintime',
                           type=float,
                           flags=Instrument.FLAG_GETSET,
                           units='sec')
        self.add_parameter('disk_mintime',
                           type=float,
                           flags=Instrument.FLAG_GETSET,
                           units='sec')
        self.add_parameter('timeout_mode',
                           type=bool,
                           flags=Instrument.FLAG_GET)
        self.add_parameter('idle_mode', type=bool, flags=Instrument.FLAG_GET)
        self.add_parameter('plot_enable', type=bool, flags=Instrument.FLAG_GET)
        self.add_parameter('status', type=str, flags=Instrument.FLAG_GET)

        self.add_function('start')
        self.add_function('stop')
        self.add_function('plot_start')
        self.add_function('plot_stop')
        self.add_function('set_default_fast')
        self.add_function('set_default_slow')

        self._debug_counter = 0

        self._timeout = 10
        self._idle_mintime = 10
        self._slow_mintime = 300
        self._disk_mintime = 10

        self._slow_lasttime = 0
        self._disk_lasttime = 0

        self.plot_stop()

        self._dir = os.path.join(qkit.cfg.get('datadir'), 'Tlog')
        self._filebasename = 'temperature_log'
        self._this_month = None

        if not os.path.isdir(self._dir):
            os.makedirs(self._dir)

        self._last_hour = TimeBuffer(60 * 60, self._dir, 'last_hour.dat')
        self._last_12hour = TimeBuffer(60 * 60 * 12, self._dir,
                                       'last_12hour.dat')

        self._task = Scheduler(self._run_all,
                               self._timeout,
                               self._idle_mintime,
                               timeout_mode=True,
                               idle_mode=True)
        self._status = 'running'

        self.get_all()

    def get_all(self):
        self.get_timeout()
        self.get_idle_mintime()
        self.get_slow_mintime()
        self.get_disk_mintime()

        self.get_timeout_mode()
        self.get_idle_mode()

        self.get_plot_enable()
        self.get_status()

    def set_default_fast(self):
        self.set_timeout(10)
        self.set_idle_mintime(10)
        self.set_slow_mintime(300)
        self.set_disk_mintime(10)

    def set_default_slow(self):
        self.set_timeout(300)
        self.set_idle_mintime(300)
        self.set_slow_mintime(300)
        self.set_disk_mintime(300)

    def _do_set_timeout(self, to):
        self._task.set_timeout(to)

    def _do_get_timeout(self):
        return self._task.get_timeout()

    def _do_set_idle_mintime(self, imt):
        self._task.set_idle_mintime(imt)

    def _do_get_idle_mintime(self):
        return self._task.get_idle_mintime()

    def _do_set_slow_mintime(self, smt):
        self._slow_mintime = smt

    def _do_get_slow_mintime(self):
        return self._slow_mintime

    def _do_set_disk_mintime(self, dmt):
        self._disk_mintime = dmt

    def _do_get_disk_mintime(self):
        return self._disk_mintime

    def _do_get_timeout_mode(self):
        return self._task.get_timeout_mode()

    def _do_get_idle_mode(self):
        return self._task.get_idle_mode()

    def _do_get_status(self):
        return self._status

    def _do_get_plot_enable(self):
        return self._plot_enable

    def start_idle(self):
        self._task.set_idle_mode(True)
        self.get_idle_mode()

    def stop_idle(self):
        self._task.set_idle_mode(False)
        self.get_idle_mode()

    def start_timeout(self):
        self._task.set_timeout_mode(True)
        self.get_timeout_mode()

    def stop_timeout(self):
        self._task.set_timeout_mode(False)
        self.get_timeout_mode()

    def start(self):
        self._task.start()
        self._status = 'running'
        self.get_status()

    def stop(self):
        self._task.stop()
        self._status = 'stopped'
        self.get_status()

    def _get_all_sensors(self):
        try:
            self._temperature = self._igh.get_temp_mc()
        except:
            logging.error(__name__ + ': failed to retrieve temperature.')

    def _get_all_sensors_dummy(self):
        self._temperature = numpy.sin(time.time() / 60 / 10 * 2 * numpy.pi)

    def _run_all(self):

        self._debug_counter += 1

        now = time.time()

        # get temperature
        # self._get_all_sensors_dummy()
        self._get_all_sensors()

        # add last points to 'fast' buffer (last hour).
        # self.fast_time, turn off fast?
        self._last_hour.add([now, self._temperature])

        # add points to 'slow' buffer (last 24 hour) if last point was written more then self.slow_time ago.
        if (now - self._slow_lasttime) > self._slow_mintime:
            self._slow_lasttime = now
            self._last_12hour.add([now, self._temperature])

        # add points to diskfile if last write was more then self.disk_time ago
        if (now - self._disk_lasttime) > self._disk_mintime:
            self._disk_lasttime = now
            self.write_to_logfile()

        # update plot, if plotting is enabled.
        self.plot()

        # leave here for checking timing:
        # print 'time it took: %f' % (time.time() - now)

    def plot_start(self):
        self._plot_enable = True
        self.get_plot_enable()

    def plot_stop(self):
        self._plot_enable = False
        self.get_plot_enable()

    def plot(self):
        plot(self._last_hour.get(), name='Temperature 1 hr', clear=True)
        plot(self._last_12hour.get(), name='Temperature 12 hr', clear=True)

    def write_to_logfile(self):
        # TODO close file? probably not necessary
        now = time.time()
        now_tuple = time.localtime(now)
        this_month = now_tuple[0:1]
        if self._this_month is None:
            self._this_month = this_month
            file_prefix = time.strftime('%Y_%m', now_tuple)
            self.filename = '%s_%s.txt' % (file_prefix, self._filebasename)
            self.filepath = os.path.join(self._dir, self.filename)
            self.file = file(self.filepath, 'a')
        elif self._this_month is not this_month:
            self.file.close()
            self._this_month = this_month
            file_prefix = time.strftime('%Y_%m', now_tuple)
            self.filename = '%s_%s.txt' % (file_prefix, self._filebasename)
            self.filepath = os.path.join(self._dir, self.filename)
            self.file = file(self.filepath, 'a')

        self.file.write('%f\t%s\t%f\n' %
                        (now, time.asctime(now_tuple), self._temperature))

        self.file.flush()
Ejemplo n.º 3
0
class virtual_Tlogger(Instrument):

    def __init__(self, name, igh=None):
        Instrument.__init__(self, name, tags=['virtual'])

        self._instruments = instruments.get_instruments()
        self._igh = self._instruments.get(igh)

        self.add_parameter('timeout',
                type=types.FloatType,
                flags=Instrument.FLAG_GETSET,
                units='sec')
        self.add_parameter('idle_mintime',
                type=types.FloatType,
                flags=Instrument.FLAG_GETSET,
                units='sec')
        self.add_parameter('slow_mintime',
                type=types.FloatType,
                flags=Instrument.FLAG_GETSET,
                units='sec')
        self.add_parameter('disk_mintime',
                type=types.FloatType,
                flags=Instrument.FLAG_GETSET,
                units='sec')
        self.add_parameter('timeout_mode',
                type=types.BooleanType,
                flags=Instrument.FLAG_GET)
        self.add_parameter('idle_mode',
                type=types.BooleanType,
                flags=Instrument.FLAG_GET)
        self.add_parameter('plot_enable',
                type=types.BooleanType,
                flags=Instrument.FLAG_GET)
        self.add_parameter('status',
                type=types.StringType,
                flags=Instrument.FLAG_GET)

        self.add_function('start')
        self.add_function('stop')
        self.add_function('plot_start')
        self.add_function('plot_stop')
        self.add_function('set_default_fast')
        self.add_function('set_default_slow')

        self._debug_counter = 0

        self._timeout = 10
        self._idle_mintime = 10
        self._slow_mintime = 300
        self._disk_mintime = 10

        self._slow_lasttime = 0
        self._disk_lasttime = 0

        self.plot_stop()

        self._dir = os.path.join(qt.config.get('datadir'), 'Tlog')
        self._filebasename = 'temperature_log'
        self._this_month = None

        if not os.path.isdir(self._dir):
            os.makedirs(self._dir)

        self._last_hour = TimeBuffer(60*60, self._dir, 'last_hour.dat')
        self._last_12hour = TimeBuffer(60*60*12, self._dir, 'last_12hour.dat')

        self._task = Scheduler(self._run_all, self._timeout, self._idle_mintime, timeout_mode=True, idle_mode=True)
        self._status = 'running'

        self.get_all()

    def get_all(self):
        self.get_timeout()
        self.get_idle_mintime()
        self.get_slow_mintime()
        self.get_disk_mintime()

        self.get_timeout_mode()
        self.get_idle_mode()

        self.get_plot_enable()
        self.get_status()

    def set_default_fast(self):
        self.set_timeout(10)
        self.set_idle_mintime(10)
        self.set_slow_mintime(300)
        self.set_disk_mintime(10)

    def set_default_slow(self):
        self.set_timeout(300)
        self.set_idle_mintime(300)
        self.set_slow_mintime(300)
        self.set_disk_mintime(300)

    def _do_set_timeout(self, to):
        self._task.set_timeout(to)

    def _do_get_timeout(self):
        return self._task.get_timeout()

    def _do_set_idle_mintime(self, imt):
        self._task.set_idle_mintime(imt)

    def _do_get_idle_mintime(self):
        return self._task.get_idle_mintime()

    def _do_set_slow_mintime(self, smt):
        self._slow_mintime = smt

    def _do_get_slow_mintime(self):
        return self._slow_mintime

    def _do_set_disk_mintime(self, dmt):
        self._disk_mintime = dmt

    def _do_get_disk_mintime(self):
        return self._disk_mintime

    def _do_get_timeout_mode(self):
        return self._task.get_timeout_mode()

    def _do_get_idle_mode(self):
        return self._task.get_idle_mode()

    def _do_get_status(self):
        return self._status

    def _do_get_plot_enable(self):
        return self._plot_enable

    def start_idle(self):
        self._task.set_idle_mode(True)
        self.get_idle_mode()

    def stop_idle(self):
        self._task.set_idle_mode(False)
        self.get_idle_mode()

    def start_timeout(self):
        self._task.set_timeout_mode(True)
        self.get_timeout_mode()

    def stop_timeout(self):
        self._task.set_timeout_mode(False)
        self.get_timeout_mode()

    def start(self):
        self._task.start()
        self._status = 'running'
        self.get_status()

    def stop(self):
        self._task.stop()
        self._status = 'stopped'
        self.get_status()

    def _get_all_sensors(self):
        try:
            self._temperature = self._igh.get_temp_mc()
        except:
            logging.error(__name__ + ': failed to retrieve temperature.')

    def _get_all_sensors_dummy(self):
        self._temperature = numpy.sin(time.time()/60/10*2*numpy.pi)

    def _run_all(self):

        self._debug_counter += 1

        now = time.time()

        # get temperature
        #self._get_all_sensors_dummy()
        self._get_all_sensors()

        # add last points to 'fast' buffer (last hour).
        # self.fast_time, turn off fast?
        self._last_hour.add([ now, self._temperature])

        # add points to 'slow' buffer (last 24 hour) if last point was written more then self.slow_time ago.
        if (now - self._slow_lasttime) > self._slow_mintime:
            self._slow_lasttime = now
            self._last_12hour.add([ now, self._temperature])

        # add points to diskfile if last write was more then self.disk_time ago
        if (now - self._disk_lasttime) > self._disk_mintime:
            self._disk_lasttime = now
            self.write_to_logfile()

        # update plot, if plotting is enabled.
        self.plot()

        # leave here for checking timing:
        # print 'time it took: %f' % (time.time() - now)

    def plot_start(self):
        self._plot_enable = True
        self.get_plot_enable()

    def plot_stop(self):
        self._plot_enable = False
        self.get_plot_enable()

    def plot(self):
        plot(self._last_hour.get(), name='Temperature 1 hr', clear=True)
        plot(self._last_12hour.get(), name='Temperature 12 hr', clear=True)

    def write_to_logfile(self):
        # TODO close file? probably not necessary
        now = time.time()
        now_tuple = time.localtime(now)
        this_month = now_tuple[0:1]
        if self._this_month is None:
            self._this_month = this_month
            file_prefix = time.strftime('%Y_%m',now_tuple)
            self.filename = '%s_%s.txt' % (file_prefix, self._filebasename)
            self.filepath = os.path.join(self._dir, self.filename)
            self.file = file(self.filepath, 'a')
        elif self._this_month is not this_month:
            self.file.close()
            self._this_month = this_month
            file_prefix = time.strftime('%Y_%m',now_tuple)
            self.filename = '%s_%s.txt' % (file_prefix, self._filebasename)
            self.filepath = os.path.join(self._dir, self.filename)
            self.file = file(self.filepath, 'a')

        self.file.write('%f\t%s\t%f\n' % ( now, time.asctime(now_tuple), self._temperature ))

        self.file.flush()