# 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)) ############################
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' } })
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()
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(), {})
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)