diff --git a/NOTICE b/NOTICE index 3ed05b8..caf000f 100644 --- a/NOTICE +++ b/NOTICE @@ -15,6 +15,9 @@ license. For details, see https://github.com/testing-cabal/mock. This product bundles glog 0.3.1 which is available under a "2-clause BSD" license. For details, see https://github.com/benley/python-glog. +This product bundles python-daemon 2.2.0 which is available under an "Apache" +license. For details see https://pagure.io/python-daemon. + This product uses dumb-init which is available under an "MIT" license. For details, see https://github.com/Yelp/dumb-init. Copyright (c) 2015 Yelp, Inc. diff --git a/README.md b/README.md index 0bfea6b..712cfc5 100644 --- a/README.md +++ b/README.md @@ -38,13 +38,15 @@ pip3 install prometheus_speedtest ### Usage ``` -usage: prometheus_speedtest.py [-h] [-p port] +usage: prometheus_speedtest [-h] [-d] [-p port] Instrument speedtest.net speedtests from Prometheus. optional arguments: -h, --help show this help message and exit - -p port, --port port port to listen on. + -d, --daemon Run prometheus_speedtest in the background. (default: + False) + -p port, --port port port to listen on. (default: 8080) ``` ### Integrating with Prometheus @@ -169,3 +171,4 @@ file for details. * The Prometheus team * Testing in Python team * Benjamin Staffin [python-glog](https://github.com/benley/python-glog) +* Ben Finney [python-daemon](https://pypi.org/project/python-daemon) diff --git a/prometheus_speedtest.py b/prometheus_speedtest.py index d901262..461430e 100755 --- a/prometheus_speedtest.py +++ b/prometheus_speedtest.py @@ -5,13 +5,21 @@ import http import socketserver +import daemon import glog as logging import prometheus_client from prometheus_client import core import speedtest PARSER = argparse.ArgumentParser( - description='Instrument speedtest.net speedtests from Prometheus.') + description='Instrument speedtest.net speedtests from Prometheus.', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) +PARSER.add_argument( + '-d', + '--daemon', + action='store_true', + default=False, + help='Run prometheus_speedtest in the background.') PARSER.add_argument( '-p', '--port', @@ -20,6 +28,8 @@ type=int, help='port to listen on.') +FLAGS = PARSER.parse_args() + class PrometheusSpeedtest: """Enapsulates behavior performing and reporting results of speedtests.""" @@ -95,8 +105,6 @@ def collect(self): def main(): """Entry point for prometheus_speedtest.py.""" - flags = PARSER.parse_args() - registry = core.CollectorRegistry(auto_describe=False) registry.register(SpeedtestCollector()) metrics_handler = prometheus_client.MetricsHandler.factory(registry) @@ -106,11 +114,15 @@ def main(): threading_http_server = type( 'ThreadingHTTPServer', (socketserver.ThreadingMixIn, http.server.HTTPServer), {}) - server = threading_http_server(('', flags.port), metrics_handler) + server = threading_http_server(('', FLAGS.port), metrics_handler) - logging.info('Starting HTTP server on port %s', flags.port) + logging.info('Starting HTTP server on port %s', FLAGS.port) server.serve_forever() if __name__ == '__main__': - main() + if FLAGS.daemon: + with daemon.DaemonContext(): + main() + else: + main() diff --git a/prometheus_speedtest_test.py b/prometheus_speedtest_test.py index ccd21b1..75857a0 100755 --- a/prometheus_speedtest_test.py +++ b/prometheus_speedtest_test.py @@ -57,8 +57,7 @@ def test_collect(mock_metric): collections.deque(collector.collect()) mock_metric.assert_has_calls( - [mock.call( - labels=[], value=value) for value in speedtest_results]) + [mock.call(labels=[], value=value) for value in speedtest_results]) if __name__ == '__main__': diff --git a/requirements.txt b/requirements.txt index 3684aab..064e852 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ glog>=0.3.1 mock>=2.0.0 prometheus_client>=0.4.2 speedtest-cli>=2.0.2 +python-daemon>=2.2.0 diff --git a/setup.py b/setup.py index 3ca236d..82e72db 100644 --- a/setup.py +++ b/setup.py @@ -45,6 +45,7 @@ def read_file(rel_path): 'glog>=0.3.1', 'mock>=2.0.0', 'prometheus_client>=0.3.1', + 'python-daemon>=2.2.0', 'speedtest-cli>=2.0.2', ], keywords=['prometheus', 'monitoring', 'speedtest', 'speedtest.net'], diff --git a/version.txt b/version.txt index 0d91a54..1d0ba9e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.3.0 +0.4.0