# If we do have a data server, add a handler that will echo all
  # logger_manager stderr output to it
  if args.data_server_websocket:
    stderr_writer = ComposedWriter(
      transforms=ToDASRecordTransform(field_name='stderr:logger_manager'),
      writers=[CachedDataWriter(data_server=args.data_server_websocket)])
    logging.getLogger().addHandler(StdErrLoggingHandler(stderr_writer,
                                                        parse_to_json=True))

  ############################
  # Instantiate API - a Are we using an in-memory store or Django
  # database as our backing store? Do our imports conditionally, so
  # they don't actually have to have Django if they're not using it.
  if args.database == 'django':
    from django_gui.django_server_api import DjangoServerAPI
    api = DjangoServerAPI()
  elif args.database == 'memory':
    from server.in_memory_server_api import InMemoryServerAPI
    api = InMemoryServerAPI()
  elif args.database == 'hapi':
    from hapi.hapi_server_api import HapiServerAPI
    api = HapiServerAPI()
  else:
    raise ValueError('Illegal arg for --database: "%s"' % args.database)

  # Now that API is defined, tack on one more logging handler: one
  # that passes messages to API.
  # TODO: decide if we even need this. Disabled for now
  #logging.getLogger().addHandler(WriteToAPILoggingHandler(api))

  ############################
Esempio n. 2
0
    def test_basic(self):
        api = DjangoServerAPI()

        try:
            api.delete_cruise('test_0')
        except ValueError:
            pass
        try:
            api.delete_cruise('test_1')
        except ValueError:
            pass
        api.load_cruise(sample_test_0)
        api.load_cruise(sample_test_1)

        self.assertEqual(api.get_cruises(), ['test_0', 'test_1'])

        self.assertEqual(api.get_modes('test_0'), ['off', 'port', 'underway'])
        self.assertEqual(api.get_mode('test_0'), 'off')
        self.assertDictEqual(
            api.get_configs('test_0'), {
                'knud': {
                    'name': 'off'
                },
                'gyr1': {
                    'name': 'off'
                },
                'mwx1': {
                    'name': 'off'
                },
                's330': {
                    'name': 'off'
                }
            })

        with self.assertRaises(ValueError):
            api.set_mode('test_0', 'invalid mode')

        api.set_mode('test_0', 'underway')
        self.assertEqual(api.get_mode('test_0'), 'underway')
        self.assertDictEqual(
            api.get_configs('test_0'), {
                'knud': {
                    'knud': 'config knud->net/file',
                    'name': 'knud->net/file'
                },
                'gyr1': {
                    'gyr1': 'config gyr1->net/file',
                    'name': 'gyr1->net/file'
                },
                'mwx1': {
                    'mwx1': 'config mwx1->net/file',
                    'name': 'mwx1->net/file'
                },
                's330': {
                    's330': 'config s330->net/file',
                    'name': 's330->net/file'
                }
            })
        self.assertDictEqual(
            api.get_configs(), {
                'test_0:knud': {
                    'knud': 'config knud->net/file',
                    'name': 'knud->net/file'
                },
                'test_0:gyr1': {
                    'gyr1': 'config gyr1->net/file',
                    'name': 'gyr1->net/file'
                },
                'test_0:mwx1': {
                    'mwx1': 'config mwx1->net/file',
                    'name': 'mwx1->net/file'
                },
                'test_0:s330': {
                    's330': 'config s330->net/file',
                    'name': 's330->net/file'
                },
                'test_1:knud': {
                    'name': 'off'
                },
                'test_1:gyr1': {
                    'name': 'off'
                },
                'test_1:mwx1': {
                    'name': 'off'
                },
                'test_1:s330': {
                    'name': 'off'
                }
            })

        with self.assertRaises(ValueError):
            api.get_configs('test_1', 'invalid_mode')
        self.assertEqual(
            api.get_configs('test_1', 'port'), {
                'gyr1': {
                    'gyr1': 'config gyr1->net',
                    'name': 'gyr1->net'
                },
                'knud': {
                    'name': 'off'
                },
                'mwx1': {
                    'mwx1': 'config mwx1->net',
                    'name': 'mwx1->net'
                },
                's330': {
                    'name': 'off'
                }
            })
        self.assertDictEqual(
            api.get_loggers('test_0'), {
                'knud': {
                    'configs': ['off', 'knud->net', 'knud->net/file']
                },
                'gyr1': {
                    'configs': ['off', 'gyr1->net', 'gyr1->net/file']
                },
                'mwx1': {
                    'configs': ['off', 'mwx1->net', 'mwx1->net/file']
                },
                's330': {
                    'configs': ['off', 's330->net', 's330->net/file']
                }
            })
        api.delete_cruise('test_0')
        self.assertEqual(api.get_cruises(), ['test_1'])
        self.assertDictEqual(
            api.get_configs(), {
                'test_1:knud': {
                    'name': 'off'
                },
                'test_1:gyr1': {
                    'name': 'off'
                },
                'test_1:mwx1': {
                    'name': 'off'
                },
                'test_1:s330': {
                    'name': 'off'
                }
            })
Esempio n. 3
0
    LOGGING_FORMAT = '%(asctime)-15s %(filename)s:%(lineno)d %(message)s'
    LOG_LEVELS = {0: logging.WARNING, 1: logging.INFO, 2: logging.DEBUG}
    args.verbosity = min(args.verbosity, max(LOG_LEVELS))
    logging.getLogger().setLevel(LOG_LEVELS[args.verbosity])

    # Enable command line editing and history
    histfile = '.openrvdas_command_line_history'
    histpath = os.path.join(os.path.expanduser('~'), histfile)
    try:
        readline.read_history_file(histpath)
        # default history len is -1 (infinite), which may grow unruly
        readline.set_history_length(1000)
    except (FileNotFoundError, PermissionError):
        pass
    atexit.register(readline.write_history_file, histpath)

    ############################
    # Instantiate API - a Are we using an in-memory store or Django
    # database as our backing store? Do our imports conditionally, so
    # they don't actually have to have Django if they're not using it.
    if args.database == 'django':
        from django_gui.django_server_api import DjangoServerAPI
        api = DjangoServerAPI()
    elif args.database == 'memory':
        from server.in_memory_server_api import InMemoryServerAPI
        api = InMemoryServerAPI()
    else:
        raise ValueError('Illegal arg for --database: "%s"' % args.database)
    command_line_reader = ServerAPICommandLine(api)
    command_line_reader.run()
Esempio n. 4
0
    def test_basic(self):
        api = DjangoServerAPI()

        try:
            api.delete_configuration()
        except ValueError:
            pass
        try:
            api.delete_configuration()
        except ValueError:
            pass
        api.load_configuration(sample_test_0)

        self.assertEqual(api.get_modes(), ['off', 'port', 'underway'])
        self.assertEqual(api.get_active_mode(), None)
        self.assertEqual(api.get_default_mode(), 'off')
        api.set_active_mode('off')
        self.assertEqual(api.get_active_mode(), 'off')
        self.assertDictEqual(
            api.get_logger_configs(), {
                'knud': {
                    'name': 'off'
                },
                'gyr1': {
                    'name': 'off'
                },
                'mwx1': {
                    'name': 'off'
                },
                's330': {
                    'name': 'off'
                }
            })

        with self.assertRaises(ValueError):
            api.set_active_mode('invalid mode')

        api.set_active_mode('underway')
        self.assertEqual(api.get_active_mode(), 'underway')
        self.assertDictEqual(
            api.get_logger_configs(), {
                'knud': {
                    'knud': 'config knud->net/file',
                    'name': 'knud->net/file'
                },
                'gyr1': {
                    'gyr1': 'config gyr1->net/file',
                    'name': 'gyr1->net/file'
                },
                'mwx1': {
                    'mwx1': 'config mwx1->net/file',
                    'name': 'mwx1->net/file'
                },
                's330': {
                    's330': 'config s330->net/file',
                    'name': 's330->net/file'
                }
            })

        with self.assertRaises(ValueError):
            api.get_logger_configs('invalid_mode')

        api.load_configuration(sample_test_1)

        self.assertEqual(
            api.get_logger_configs('port'), {
                'gyr1': {
                    'gyr1': 'config gyr1->net',
                    'name': 'gyr1->net'
                },
                'knud': {
                    'name': 'off'
                },
                'mwx1': {
                    'mwx1': 'config mwx1->net',
                    'name': 'mwx1->net'
                },
                's330': {
                    'name': 'off'
                }
            })
        self.assertDictEqual(
            api.get_loggers(), {
                'knud': {
                    'configs': ['off', 'knud->net', 'knud->net/file'],
                    'active': 'off'
                },
                'gyr1': {
                    'configs': ['off', 'gyr1->net', 'gyr1->net/file'],
                    'active': 'off'
                },
                'mwx1': {
                    'configs': ['off', 'mwx1->net', 'mwx1->net/file'],
                    'active': 'off'
                },
                's330': {
                    'configs': ['off', 's330->net', 's330->net/file'],
                    'active': 'off'
                }
            })
        api.delete_configuration()
        with self.assertRaises(ValueError):
            api.get_configuration()
        self.assertDictEqual(api.get_logger_configs(), {})
Esempio n. 5
0
                        default=0,
                        action='count',
                        help='Increase output verbosity of local loggers')
    args = parser.parse_args()

    # Set logging verbosity
    args.verbosity = min(args.verbosity, max(LOG_LEVELS))
    logging.getLogger().setLevel(LOG_LEVELS[args.verbosity])

    ############################
    # Instantiate API - a Are we using an in-memory store or Django
    # database as our backing store? Do our imports conditionally, so
    # they don't actually have to have Django if they're not using it.
    if args.database == 'django':
        from django_gui.django_server_api import DjangoServerAPI
        api = DjangoServerAPI()
    elif args.database == 'memory':
        from server.in_memory_server_api import InMemoryServerAPI
        api = InMemoryServerAPI()
    else:
        raise ValueError('Illegal arg for --database: "%s"' % args.database)

    ############################
    # Create our LoggerManager
    logger_manager = LoggerManager(api=api,
                                   websocket=args.websocket,
                                   host_id=args.host_id,
                                   interval=args.interval,
                                   max_tries=args.max_tries,
                                   verbosity=args.verbosity,
                                   logger_verbosity=args.logger_verbosity)