def main(): """Start and run the dispatcher.""" parser = argparse.ArgumentParser() parser.add_argument("config_file", help="The configuration file to run on.") parser.add_argument("-l", "--log", help="The file to log to. stdout otherwise.") parser.add_argument( "-c", "--log-config", help="Log config file to use instead of the standard logging.") parser.add_argument( "-v", "--verbose", dest="verbosity", action="count", default=0, help="Verbosity (between 1 and 2 occurrences with more leading to more " "verbose logging). WARN=0, INFO=1, " "DEBUG=2. This is overridden by the log config file if specified.") parser.add_argument( "-p", "--publish-port", type=int, dest="pub_port", nargs='?', const=0, default=None, help="Publish messages for dispatched files on this port. " "Default: no publishing.") parser.add_argument("-n", "--publish-nameserver", nargs='*', dest="pub_nameservers", help="Nameserver for publisher to connect to") cmd_args = parser.parse_args() setup_logging(cmd_args) logger.info("Starting up.") try: dispatcher = Dispatcher(cmd_args.config_file, publish_port=cmd_args.pub_port, publish_nameservers=cmd_args.pub_nameservers) except Exception as err: logger.error('Dispatcher crashed: %s', str(err)) sys.exit(1) try: dispatcher.start() dispatcher.join() except KeyboardInterrupt: logger.debug("Interrupting") finally: dispatcher.close()
def test_dispatcher(): """Test the dispatcher class.""" dp = None try: dest_dir = os.path.join(gettempdir(), 'dptest') if os.path.exists(dest_dir): shutil.rmtree(dest_dir) with patch('trollmoves.dispatcher.ListenerContainer') as lc: queue = Queue() lc.return_value.output_queue = queue with NamedTemporaryFile('w', delete=False) as config_file: config_file_name = config_file.name config_file.write(test_local) config_file.flush() config_file.close() dp = Dispatcher(config_file_name) dp.start() dest_dir = os.path.join(gettempdir(), 'dptest') assert not os.path.exists(dest_dir) with NamedTemporaryFile('w') as test_file: msg = Mock() msg.type = 'file' msg.subject = '/level2/viirs' msg.data = { 'sensor': 'viirs', 'product': 'green_snow', 'platform_name': 'NOAA-20', 'start_time': datetime(2019, 9, 19, 9, 19), 'format': 'tif', 'area': 'euron1', 'uid': '201909190919_NOAA-20_viirs.tif', 'uri': test_file.name } expected_file = os.path.join(dest_dir, 'NOAA-20_201909190919.tif') queue.put(msg) time.sleep(.1) assert os.path.exists(expected_file) # Check that the listener config items are passed correctly lc.assert_called_once_with( addresses=['tcp://127.0.0.1:40000'], nameserver='127.0.0.1', services=['service_name_1', 'service_name_2'], topics={'/level3/cloudtype', '/level2/viirs', '/level2/avhrr'}) finally: if dp is not None: dp.close() os.remove(expected_file) os.rmdir(dest_dir) os.remove(config_file_name)
def main(): """Start and run the dispatcher.""" cmd_args = parse_args() setup_logging(cmd_args) logger.info("Starting up.") try: dispatcher = Dispatcher(cmd_args.config_file, publish_port=cmd_args.pub_port, publish_nameservers=cmd_args.pub_nameservers) except Exception as err: logger.error('Dispatcher crashed: %s', str(err)) sys.exit(1) try: dispatcher.start() dispatcher.join() except KeyboardInterrupt: logger.debug("Interrupting") finally: dispatcher.close()
def main(): """Start and run the dispatcher.""" parser = argparse.ArgumentParser() parser.add_argument("config_file", help="The configuration file to run on.") parser.add_argument("-l", "--log", help="The file to log to. stdout otherwise.") parser.add_argument( "-c", "--log-config", help="Log config file to use instead of the standard logging.") parser.add_argument( "-v", "--verbose", dest="verbosity", action="count", default=0, help="Verbosity (between 1 and 2 occurrences with more leading to more " "verbose logging). WARN=0, INFO=1, " "DEBUG=2. This is overridden by the log config file if specified.") cmd_args = parser.parse_args() setup_logging(cmd_args) logger.info("Starting up.") try: dispatcher = Dispatcher(cmd_args.config_file) except Exception as err: logger.error('Dispatcher crashed: %s', str(err)) sys.exit(1) try: dispatcher.start() dispatcher.join() except KeyboardInterrupt: logger.debug("Interrupting") finally: dispatcher.close()
def test_dispatcher(get_destinations_message): """Test the dispatcher class.""" dp = None try: dest_dir = os.path.join(gettempdir(), 'dptest') if os.path.exists(dest_dir): shutil.rmtree(dest_dir) with patch('trollmoves.dispatcher.ListenerContainer') as lc: queue = Queue() lc.return_value.output_queue = queue with NamedTemporaryFile('w', delete=False) as config_file: config_file_name = config_file.name config_file.write(test_local) config_file.flush() config_file.close() dp = Dispatcher(config_file_name) dp.start() dest_dir = os.path.join(gettempdir(), 'dptest') assert not os.path.exists(dest_dir) with NamedTemporaryFile('w') as test_file: get_destinations_message.data['uri'] = test_file.name expected_file = os.path.join(dest_dir, 'NOAA-20_201909190919.tif') queue.put(get_destinations_message) time.sleep(.1) assert os.path.exists(expected_file) # Check that the listener config items are passed correctly lc.assert_called_once_with( addresses=['tcp://127.0.0.1:40000'], nameserver='127.0.0.1', services=['service_name_1', 'service_name_2'], topics={'/level3/cloudtype', '/level2/viirs', '/level2/avhrr'}) finally: if dp is not None: dp.close() os.remove(expected_file) os.rmdir(dest_dir) os.remove(config_file_name)