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)
Esempio n. 2
0
 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))
Esempio n. 3
0
 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
Esempio n. 4
0
 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))
Esempio n. 5
0
    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
Esempio n. 7
0
 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 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
Esempio n. 9
0
    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)
Esempio n. 11
0
 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 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
Esempio n. 13
0
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
Esempio n. 15
0
 def stop(self):
     self.is_running = False
     log.info('runner stopped')
Esempio n. 16
0
 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
Esempio n. 17
0
 def sendLine(self, line):
     log.info('Responding: {}'.format(line))
     LineReceiver.sendLine(self, line.replace('\r\n', ''))
 def stop(self):
     self.is_running = False
     log.info('runner stopped')
Esempio n. 19
0
 def sendLine(self, line):
     log.info('Responding: {}'.format(line))
     LineReceiver.sendLine(self, line.replace('\r\n', ''))
 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 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()