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()
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()
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()