def main(publish=False, no_app=False):
    io_loop = tornado.ioloop.IOLoop.current()

    application = tornado.web.Application([
        (r'/', HeloHandler)
    ])
    server = tornado.httpserver.HTTPServer(application)
    server.listen(8080, '127.0.0.1')

    if no_app:
        tornado_app = None
    else:
        tornado_app = application

    if publish:
        monitor = initialize_mutornadomon(tornado_app=tornado_app,
                                          io_loop=io_loop,
                                          publisher=publisher,
                                          publish_interval=5 * 1000)
    else:
        monitor = initialize_mutornadomon(tornado_app=tornado_app)

    def stop(*args):
        print('Good bye')
        monitor.stop()
        io_loop.stop()

    for sig in signal.SIGINT, signal.SIGQUIT, signal.SIGTERM:
        signal.signal(sig, stop)

    tornado.ioloop.IOLoop.current().start()
def main(publish=False, no_app=False):
    io_loop = tornado.ioloop.IOLoop.current()

    application = tornado.web.Application([(r'/', HeloHandler)])
    server = tornado.httpserver.HTTPServer(application)
    server.listen(8080, '127.0.0.1')

    if no_app:
        tornado_app = None
    else:
        tornado_app = application

    if publish:
        monitor = initialize_mutornadomon(tornado_app=tornado_app,
                                          io_loop=io_loop,
                                          publisher=publisher,
                                          publish_interval=5 * 1000)
    else:
        monitor = initialize_mutornadomon(tornado_app=tornado_app)

    def stop(*args):
        print('Good bye')
        monitor.stop()
        io_loop.stop()

    for sig in signal.SIGINT, signal.SIGQUIT, signal.SIGTERM:
        signal.signal(sig, stop)

    tornado.ioloop.IOLoop.current().start()
    def test_initialize_mutornadmon_passes_publisher(
            self, utilization_collector_mock, web_collector_mock,
            mutornadomon_mock):
        """Test initialize_mutornadomon() sets up publishing interface"""
        def publisher(monitor):
            pass

        app = sentinel.application
        result = initialize_mutornadomon(app,
                                         publisher=publisher,
                                         host_limit='test')
        monitor_inst = mutornadomon_mock.return_value

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        web_collector_mock.assert_called_once_with(monitor_inst, app)
        utilization_collector_mock.assert_called_once_with(monitor_inst)

        assert mutornadomon_mock.call_count == 1
        arg_list = mutornadomon_mock.call_args_list

        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], PublishExternalInterface))

        self.assertEqual(kwargs, {})
Exemple #4
0
 def setUp(self):
     super(TestProfiler, self).setUp()
     self.publisher = mock.Mock(return_value=None)
     self.io_loop = IOLoop.current()
     self.monitor = initialize_mutornadomon(io_loop=self.io_loop,
                                            publisher=self.publisher,
                                            tracer_port=5989)
Exemple #5
0
    def test_initialize_mutornadmon_passes_publisher(
        self,
        utilization_collector_mock,
        web_collector_mock,
        mutornadomon_mock
    ):
        """Test initialize_mutornadomon() sets up publishing interface"""

        def publisher(monitor):
            pass

        app = sentinel.application
        result = initialize_mutornadomon(app,
                                         publisher=publisher,
                                         host_limit='test')
        monitor_inst = mutornadomon_mock.return_value

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        web_collector_mock.assert_called_once_with(monitor_inst, app)
        utilization_collector_mock.assert_called_once_with(monitor_inst)

        assert mutornadomon_mock.call_count == 1
        arg_list = mutornadomon_mock.call_args_list

        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], PublishExternalInterface))

        self.assertEqual(kwargs, {})
    def test_publisher_initializer(self, periodic_callback_mock):
        """Test instrument_ioloop() setups monitoring and creates a PeriodicCallback"""
        def publisher():
            pass

        result = initialize_mutornadomon(
            io_loop=tornado.ioloop.IOLoop.current(), publisher=publisher)

        assert periodic_callback_mock.called

        self.assertTrue(isinstance(result, mutornadomon.MuTornadoMon))
Exemple #7
0
    def test_publisher_initializer(self, periodic_callback_mock):
        """Test instrument_ioloop() setups monitoring and creates a PeriodicCallback"""

        def publisher():
            pass

        result = initialize_mutornadomon(io_loop=tornado.ioloop.IOLoop.current(), publisher=publisher)

        assert periodic_callback_mock.called

        self.assertTrue(isinstance(result, mutornadomon.MuTornadoMon))
Exemple #8
0
    def test_publisher_called(self, mock_num_threads):
        publisher = mock.Mock(return_value=None)

        monitor = initialize_mutornadomon(io_loop=IOLoop.current(),
                                          publisher=publisher)
        monitor.count('my_counter', 2)
        monitor.external_interface._publish(monitor)

        self.assertTrue(publisher.called_once())
        metrics = publisher.call_args_list[0][0][0]

        self.assertEqual(metrics['counters'], {'my_counter': 2})
        self.assertEqual(metrics['process']['cpu']['num_threads'], 5)
        assert metrics['process']['cpu']['system_time'] < 1.0
    def test_publisher_called(self, mock_num_threads):
        publisher = mock.Mock(return_value=None)

        monitor = initialize_mutornadomon(io_loop=IOLoop.current(), publisher=publisher)
        monitor.count('my_counter', 2)
        monitor.external_interface._publish(monitor)

        self.assertTrue(publisher.called_once())
        metrics = publisher.call_args_list[0][0][0]

        self.assertEqual(
            metrics['counters'],
            {'my_counter': 2}
        )
        self.assertEqual(metrics['process']['cpu']['num_threads'], 5)
        assert metrics['process']['cpu']['system_time'] < 1.0
Exemple #10
0
    def test_initialize_mutornadmon(self, mutornadomon_mock):
        """Test initialize_mutornadomon() setups monitoring and shutdown"""
        result = initialize_mutornadomon(sentinel.application,
                                         host_limit='test')
        monitor_inst = mutornadomon_mock.MuTornadoMon.return_value

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        # MuTornadoMon was created with monitor config values
        mutornadomon_mock.MuTornadoMon.assert_called_once_with(
            host_limit='test')

        # Monitor instance was registered with tornado application
        monitor_inst.register_application.assert_called_once_with(
            sentinel.application)
def main():
    application = tornado.web.Application([
        (r'/', HeloHandler)
    ])
    server = tornado.httpserver.HTTPServer(application)
    server.listen(8080, '127.0.0.1')

    monitor = initialize_mutornadomon(application)

    def stop(*args):
        print 'Good bye'
        monitor.stop()
        tornado.ioloop.IOLoop.current().stop()

    for sig in signal.SIGINT, signal.SIGQUIT, signal.SIGTERM:
        signal.signal(sig, stop)

    tornado.ioloop.IOLoop.current().start()
Exemple #12
0
    def test_initialize_mutornadmon(self, utilization_collector_mock, web_collector_mock, mutornadomon_mock):
        """Test initialize_mutornadomon() sets up HTTP endpoints interface"""
        app = sentinel.application,
        result = initialize_mutornadomon(app, host_limit='test')
        monitor_inst = mutornadomon_mock.return_value

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        assert mutornadomon_mock.call_count == 1
        web_collector_mock.assert_called_once_with(monitor_inst, app)
        utilization_collector_mock.assert_called_once_with(monitor_inst)

        # MuTornadoMon was created with monitor config values
        arg_list = mutornadomon_mock.call_args_list

        self.assertEquals(len(arg_list), 1)
        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], HTTPEndpointExternalInterface))

        self.assertEqual(kwargs, {})
    def test_initialize_mutornadmon(self, utilization_collector_mock,
                                    web_collector_mock, mutornadomon_mock):
        """Test initialize_mutornadomon() sets up HTTP endpoints interface"""
        app = sentinel.application,
        result = initialize_mutornadomon(app, host_limit='test')
        monitor_inst = mutornadomon_mock.return_value

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        assert mutornadomon_mock.call_count == 1
        web_collector_mock.assert_called_once_with(monitor_inst, app)
        utilization_collector_mock.assert_called_once_with(monitor_inst)

        # MuTornadoMon was created with monitor config values
        arg_list = mutornadomon_mock.call_args_list

        self.assertEquals(len(arg_list), 1)
        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], HTTPEndpointExternalInterface))

        self.assertEqual(kwargs, {})
    def test_initialize_mutornadmon_works_with_publisher_and_no_app(
            self, mutornadomon_mock):
        """Test initialize_mutornadomon() works with publisher, but no web app passed"""
        def publisher(monitor):
            pass

        monitor_inst = mutornadomon_mock.return_value
        result = initialize_mutornadomon(publisher=publisher)

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        assert mutornadomon_mock.call_count == 1

        # MuTornadoMon was created with monitor config values
        arg_list = mutornadomon_mock.call_args_list

        self.assertEquals(len(arg_list), 1)
        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], PublishExternalInterface))

        # No collectors are passed
        self.assertEqual(kwargs, {})
Exemple #15
0
    def test_initialize_mutornadmon_works_with_publisher_and_no_app(self, mutornadomon_mock):
        """Test initialize_mutornadomon() works with publisher, but no web app passed"""

        def publisher(monitor):
            pass

        monitor_inst = mutornadomon_mock.return_value
        result = initialize_mutornadomon(publisher=publisher)

        # initialize_mutornadomon() should return the monitor instance
        self.assertEqual(result, monitor_inst)

        assert mutornadomon_mock.call_count == 1

        # MuTornadoMon was created with monitor config values
        arg_list = mutornadomon_mock.call_args_list

        self.assertEquals(len(arg_list), 1)
        args, kwargs = arg_list[0]
        self.assertEqual(len(args), 1)
        self.assertTrue(isinstance(args[0], PublishExternalInterface))

        # No collectors are passed
        self.assertEqual(kwargs, {})
Exemple #16
0

if __name__ == '__main__':
    rootLogger = logging.getLogger(__name__)

    tcp_conf = dict(globalsObj.configuration.items('TCP'))
    # write pid file
    commonlib.writePid(globalsObj.configuration.get('pid', 'file'))

    # create app
    globalsObj.ws_configuration.read_dict(globalsObj.deniedPath)
    webapp = WebApp(globalsObj.configuration, globalsObj.ws_configuration)

    # initialize monitor
    if globalsObj.configuration.getboolean('Monitor', 'enable'):
        monitor = initialize_mutornadomon(webapp,
                                          request_filter=commonlib.match_host)

    for sig in (signal.SIGQUIT, signal.SIGINT, signal.SIGTERM):
        signal.signal(sig, shut_down)

    # set backend to serilize objects
    jsonpickle.set_preferred_backend('simplejson')
    jsonpickle.set_encoder_options('simplejson', ensure_ascii=True, indent=4)

    try:
        sockets = tornado.netutil.bind_sockets(
            tcp_conf['port'],
            tcp_conf['address'],
            family=socket.AF_INET,
            backlog=int(tcp_conf['backlog']),
            reuse_port=bool(tcp_conf['reuseport']))
Exemple #17
0
def main():
    parser = optparse.OptionParser()
    parser.add_option(
        '-c',
        '--config-file',
        default=None,
        help='Path to a YAML config file'
    )
    parser.add_option(
        '-p',
        '--port',
        default=[],
        type=int,
        action='append',
        help='Port to listen on. May be repeated. If not passed, defaults to :3333.'
    )
    parser.add_option(
        '-B',
        '--bind-address',
        default='0.0.0.0',
        help='Address to listen on. Defaults to %default'
    )
    parser.add_option(
        '--spool-root',
        default='/var/spool/hacheck',
        help='Root for spool for service states (default %default)'
    )
    parser.add_option(
        '-v',
        '--verbose',
        default=False,
        action='store_true'
    )
    opts, args = parser.parse_args()
    if opts.config_file is not None:
        config.load_from(opts.config_file)

    if not opts.port:
        opts.port = [3333]
    if config.config['rlimit_nofile'] is not None:
        setrlimit_nofile(config.config['rlimit_nofile'])

    # set up logging
    log_path = config.config['log_path']
    level = logging.DEBUG if opts.verbose else logging.WARNING
    if log_path == 'stdout':
        handler = logging.StreamHandler(sys.stdout)
    elif log_path == 'stderr':
        handler = logging.StreamHandler(sys.stderr)
    else:
        handler = logging.handlers.WatchedFileHandler(log_path)
    fmt = logging.Formatter(logging.BASIC_FORMAT, None)
    handler.setFormatter(fmt)
    logging.getLogger().addHandler(handler)
    logging.getLogger().setLevel(level)

    # application stuff
    cache.configure(cache_time=config.config['cache_time'])
    spool.configure(spool_root=opts.spool_root)
    application = get_app()
    ioloop = tornado.ioloop.IOLoop.instance()
    server = tornado.httpserver.HTTPServer(application, io_loop=ioloop)

    if initialize_mutornadomon is not None:
        mutornadomon_collector = initialize_mutornadomon(application, io_loop=ioloop)
    else:
        mutornadomon_collector = None

    def stop(*args):
        if mutornadomon_collector is not None:
            mutornadomon_collector.stop()
        ioloop.stop()

    for port in opts.port:
        server.listen(port, opts.bind_address)
    for sig in (signal.SIGTERM, signal.SIGQUIT, signal.SIGINT):
        signal.signal(sig, stop)
    ioloop.start()
    return 0
Exemple #18
0
 def setUp(self):
     super(TestBasic, self).setUp()
     self.monitor = initialize_mutornadomon(self.app)
Exemple #19
0
 def setUp(self):
     super(TestBasic, self).setUp()
     self.monitor = initialize_mutornadomon(self.app)
Exemple #20
0
def main():
    parser = optparse.OptionParser()
    parser.add_option('-c',
                      '--config-file',
                      default=None,
                      help='Path to a YAML config file')
    parser.add_option(
        '-p',
        '--port',
        default=[],
        type=int,
        action='append',
        help=
        'Port to listen on. May be repeated. If not passed, defaults to :3333.'
    )
    parser.add_option(
        '-n',
        '--num-procs',
        default=1,
        type=int,
        help='Number of identical copies to run',
    )
    parser.add_option('-B',
                      '--bind-address',
                      default='0.0.0.0',
                      help='Address to listen on. Defaults to %default')
    parser.add_option(
        '--spool-root',
        default='/var/spool/hacheck',
        help='Root for spool for service states (default %default)')
    parser.add_option('-v', '--verbose', default=False, action='store_true')
    opts, args = parser.parse_args()
    if opts.config_file is not None:
        config.load_from(opts.config_file)

    if not opts.port:
        opts.port = [3333]
    if config.config['rlimit_nofile'] is not None:
        setrlimit_nofile(config.config['rlimit_nofile'])

    # set up logging
    log_path = config.config['log_path']
    level = logging.DEBUG if opts.verbose else logging.WARNING
    if log_path == 'stdout':
        handler = logging.StreamHandler(sys.stdout)
    elif log_path == 'stderr':
        handler = logging.StreamHandler(sys.stderr)
    else:
        handler = logging.handlers.WatchedFileHandler(log_path)
    fmt = logging.Formatter(logging.BASIC_FORMAT, None)
    handler.setFormatter(fmt)
    logging.getLogger().addHandler(handler)
    logging.getLogger().setLevel(level)

    # application stuff
    cache.configure(cache_time=config.config['cache_time'])
    spool.configure(spool_root=opts.spool_root)
    application = get_app()
    server = tornado.httpserver.HTTPServer(application)

    if initialize_mutornadomon is not None:
        mutornadomon_collector = initialize_mutornadomon(application)
    else:
        mutornadomon_collector = None

    def stop(*args):
        if mutornadomon_collector is not None:
            mutornadomon_collector.stop()
        IOLoop.current().stop()

    for port in opts.port:
        server.bind(port, opts.bind_address, reuse_port=True)
    for sig in (signal.SIGTERM, signal.SIGQUIT, signal.SIGINT):
        signal.signal(sig, stop)
    server.start(opts.num_procs)
    IOLoop.current().remove_timeout = types.MethodType(remove_timeout,
                                                       IOLoop.current())
    IOLoop.current().start()
    return 0
Exemple #21
0
 def setUp(self):
     super(TestProfiler, self).setUp()
     self.publisher = mock.Mock(return_value=None)
     self.io_loop = IOLoop.current()
     self.monitor = initialize_mutornadomon(
         io_loop=self.io_loop, publisher=self.publisher, tracer_port=5989)