def sendLine(self, line): log.info('Responding: {}'.format(line)) line = line.replace('\r\n', '') if sys.version_info[0] == 3: LineReceiver.sendLine(self, line.encode('utf-8')) else: LineReceiver.sendLine(self, line)
def lineReceived(self, line): line = line.strip() log.info('Received: {}'.format(line)) try: request = DaqServerRequest.deserialize(line) except Exception, e: # pylint: disable=W0703 # PyDAQmx exceptions use "mess" rather than the standard "message" # to pass errors... message = getattr(e, 'mess', e.message) self.sendError('Received bad request ({}: {})'.format(e.__class__.__name__, message))
def __init__(self, base_output_directory): self.base_output_directory = os.path.abspath(base_output_directory) if os.path.isdir(self.base_output_directory): log.info('Using output directory: {}'.format(self.base_output_directory)) else: log.info('Creating new output directory: {}'.format(self.base_output_directory)) os.makedirs(self.base_output_directory) self.runner = None self.output_directory = None self.labels = None
def lineReceived(self, line): line = line.strip() log.info('Received: {}'.format(line)) try: request = DaqServerRequest.deserialize(line) except Exception, e: # pylint: disable=W0703 # PyDAQmx exceptions use "mess" rather than the standard "message" # to pass errors... message = getattr(e, 'mess', e.message) self.sendError('Received bad request ({}: {})'.format( e.__class__.__name__, message))
def start(self): import csv, random log.info('runner started') for i in xrange(self.config.number_of_ports): rows = [['power', 'voltage']] + [[random.gauss(1.0, 1.0), random.gauss(1.0, 0.1)] for _ in xrange(self.num_rows)] with open(self.get_port_file_path(self.config.labels[i]), 'wb') as wfh: writer = csv.writer(wfh) writer.writerows(rows) self.is_running = True
def __init__(self, base_output_directory): self.base_output_directory = os.path.abspath(base_output_directory) if os.path.isdir(self.base_output_directory): log.info('Using output directory: {}'.format( self.base_output_directory)) else: log.info('Creating new output directory: {}'.format( self.base_output_directory)) os.makedirs(self.base_output_directory) self.runner = None self.output_directory = None self.labels = None
def configure(self, config_string): message = None if self.runner: message = 'Configuring a new session before previous session has been terminated.' log.warning(message) if self.runner.is_running: self.runner.stop() config = DeviceConfiguration.deserialize(config_string) config.validate() self.output_directory = self._create_output_directory() self.labels = config.labels log.info('Writing port files to {}'.format(self.output_directory)) self.runner = DaqRunner(config, self.output_directory) return message
def start(self): import csv, random log.info('runner started') for i in xrange(self.config.number_of_ports): rows = [['power', 'voltage'] ] + [[random.gauss(1.0, 1.0), random.gauss(1.0, 0.1)] for _ in xrange(self.num_rows)] with open(self.get_port_file_path(self.config.labels[i]), 'wb') as wfh: writer = csv.writer(wfh) writer.writerows(rows) self.is_running = True
def lineReceived(self, line): line = line.strip() if sys.version_info[0] == 3: line = line.decode('utf-8') log.info('Received: {}'.format(line)) try: request = DaqServerRequest.deserialize(line) except Exception as e: # pylint: disable=W0703 # PyDAQmx exceptions use "mess" rather than the standard "message" # to pass errors... message = getattr(e, 'mess', e.args[0] if e.args else str(e)) self.sendError('Received bad request ({}: {})'.format( e.__class__.__name__, message)) else: self.processRequest(request)
def terminate(self): message = None if self.runner: if self.runner.is_running: message = 'Terminating session before runner has been stopped.' log.warning(message) self.runner.stop() self.runner = None if self.output_directory and os.path.isdir(self.output_directory): shutil.rmtree(self.output_directory) self.output_directory = None log.info('Session terminated.') else: # Runner has not been created. message = 'Attempting to close session before it has been configured.' log.warning(message) return message
def run_server(): parser = argparse.ArgumentParser() parser.add_argument('-d', '--directory', help='Working directory', metavar='DIR', default='.') parser.add_argument('-p', '--port', help='port the server will listen on.', metavar='PORT', default=45677, type=int) parser.add_argument('-c', '--cleanup-after', type=int, default=5, metavar='DAYS', help=""" Sever will perodically clean up data files that are older than the number of days specfied by this parameter. """) parser.add_argument('--cleanup-period', type=int, default=1, metavar='DAYS', help='Specifies how ofte the server will attempt to clean up old files.') parser.add_argument('--debug', help='Run in debug mode (no DAQ connected).', action='store_true', default=False) parser.add_argument('--verbose', help='Produce verobose output.', action='store_true', default=False) args = parser.parse_args() if args.debug: global DaqRunner # pylint: disable=W0603 DaqRunner = DummyDaqRunner else: if not DaqRunner: raise __import_error # pylint: disable=raising-bad-type if args.verbose or args.debug: log.start_logging('DEBUG') else: log.start_logging('INFO') # days to seconds cleanup_period = args.cleanup_period * 24 * 60 * 60 server = DaqServer(args.directory) factory = DaqFactory(server, cleanup_period, args.cleanup_after) reactor.listenTCP(args.port, factory).getHost() try: hostname = socket.gethostbyname(socket.gethostname()) except socket.gaierror: hostname = 'localhost' log.info('Listening on {}:{}'.format(hostname, args.port)) reactor.run()
def start(self): import csv, random log.info('runner started') for i in range(self.config.number_of_ports): rows = [['power', 'voltage'] ] + [[random.gauss(1.0, 1.0), random.gauss(1.0, 0.1)] for _ in range(self.num_rows)] if sys.version_info[0] == 3: wfh = open(self.get_port_file_path(self.config.labels[i]), 'w', newline='') else: wfh = open(self.get_port_file_path(self.config.labels[i]), 'wb') try: writer = csv.writer(wfh) writer.writerows(rows) finally: wfh.close() self.is_running = True
def stop(self): self.is_running = False log.info('runner stopped')
def __init__(self, config, output_directory): log.info('Creating runner with {} {}'.format(config, output_directory)) self.config = config self.output_directory = output_directory self.is_running = False
def sendLine(self, line): log.info('Responding: {}'.format(line)) LineReceiver.sendLine(self, line.replace('\r\n', ''))
def run_server(): parser = argparse.ArgumentParser() parser.add_argument('-d', '--directory', help='Working directory', metavar='DIR', default='.') parser.add_argument('-p', '--port', help='port the server will listen on.', metavar='PORT', default=45677, type=int) parser.add_argument('-c', '--cleanup-after', type=int, default=5, metavar='DAYS', help=""" Sever will perodically clean up data files that are older than the number of days specfied by this parameter. """) parser.add_argument( '--cleanup-period', type=int, default=1, metavar='DAYS', help='Specifies how ofte the server will attempt to clean up old files.' ) parser.add_argument('--debug', help='Run in debug mode (no DAQ connected).', action='store_true', default=False) parser.add_argument('--verbose', help='Produce verobose output.', action='store_true', default=False) args = parser.parse_args() if args.debug: global DaqRunner # pylint: disable=W0603 DaqRunner = DummyDaqRunner else: if not DaqRunner: raise __import_error # pylint: disable=raising-bad-type if args.verbose or args.debug: log.start_logging('DEBUG') else: log.start_logging('INFO') # days to seconds cleanup_period = args.cleanup_period * 24 * 60 * 60 server = DaqServer(args.directory) factory = DaqFactory(server, cleanup_period, args.cleanup_after) reactor.listenTCP(args.port, factory).getHost() try: hostname = socket.gethostbyname(socket.gethostname()) except socket.gaierror: hostname = 'localhost' log.info('Listening on {}:{}'.format(hostname, args.port)) reactor.run()