{"id":37076081,"url":"https://github.com/jeanralphaviles/prometheus_speedtest","last_synced_at":"2026-01-14T08:57:13.638Z","repository":{"id":41482946,"uuid":"132377949","full_name":"jeanralphaviles/prometheus_speedtest","owner":"jeanralphaviles","description":" Instrument Speedtest.net tests from Prometheus","archived":false,"fork":false,"pushed_at":"2025-05-19T21:22:31.000Z","size":314,"stargazers_count":54,"open_issues_count":3,"forks_count":20,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-29T03:19:18.567Z","etag":null,"topics":["docker","monitoring","prometheus","prometheus-speedtest","pypi","python","speedtest"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeanralphaviles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-06T21:37:16.000Z","updated_at":"2025-05-05T09:26:45.000Z","dependencies_parsed_at":"2024-12-24T04:17:48.736Z","dependency_job_id":"d7219208-8a42-4eda-a0ae-f7d0e164b560","html_url":"https://github.com/jeanralphaviles/prometheus_speedtest","commit_stats":{"total_commits":145,"total_committers":9,"mean_commits":16.11111111111111,"dds":0.1103448275862069,"last_synced_commit":"ea31df521373eca3b3afea420b7da03c090c46dd"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/jeanralphaviles/prometheus_speedtest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanralphaviles%2Fprometheus_speedtest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanralphaviles%2Fprometheus_speedtest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanralphaviles%2Fprometheus_speedtest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanralphaviles%2Fprometheus_speedtest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeanralphaviles","download_url":"https://codeload.github.com/jeanralphaviles/prometheus_speedtest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanralphaviles%2Fprometheus_speedtest/sbom","scorecard":{"id":513263,"data":{"date":"2025-08-11","repo":{"name":"github.com/jeanralphaviles/prometheus_speedtest","commit":"5215dd0f375a7341a1fc758204c81005369a45e4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 1/27 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/deploy.yml:9","Warn: topLevel 'packages' permission set to 'write': .github/workflows/deploy.yml:11","Warn: no topLevel permission defined: .github/workflows/python.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/deploy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/jeanralphaviles/prometheus_speedtest/python.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3.13-alpine to python:3.13-alpine@sha256:af1fd7a973d8adc761ee6b9d362b99329b39eb096ea3c53b8838f99bd187011e","Warn: pipCommand not pinned by hash: Dockerfile:4","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:24","Warn: pipCommand not pinned by hash: .github/workflows/python.yml:23","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  10 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy.yml:32"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 5 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T01:07:57.614Z","repository_id":41482946,"created_at":"2025-08-20T01:07:57.614Z","updated_at":"2025-08-20T01:07:57.614Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","monitoring","prometheus","prometheus-speedtest","pypi","python","speedtest"],"created_at":"2026-01-14T08:57:12.895Z","updated_at":"2026-01-14T08:57:13.633Z","avatar_url":"https://github.com/jeanralphaviles.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Prometheus Speedtest\n\nInstrument [Speedtest.net](http://speedtest.net) tests from\n[Prometheus](https://prometheus.io). Provides metrics on download\\_speed,\nupload\\_speed, and latency.\n\n[![test](https://github.com/jeanralphaviles/prometheus_speedtest/actions/workflows/python.yml/badge.svg)](https://github.com/jeanralphaviles/prometheus_speedtest/actions/workflows/python.yml)\n[![deploy](https://github.com/jeanralphaviles/prometheus_speedtest/actions/workflows/deploy.yml/badge.svg)](https://github.com/jeanralphaviles/prometheus_speedtest/actions/workflows/deploy.yml)\n[![PyPI status](https://img.shields.io/pypi/status/prometheus_speedtest.svg)](https://pypi.python.org/pypi/prometheus_speedtest/)\n[![Docker Pulls](https://img.shields.io/docker/pulls/jraviles/prometheus_speedtest)](https://hub.docker.com/r/jraviles/prometheus_speedtest)\n[![PyPI version shields.io](https://img.shields.io/pypi/v/prometheus_speedtest.svg)](https://pypi.python.org/pypi/prometheus_speedtest/)\n[![PyPI license](https://img.shields.io/pypi/l/prometheus_speedtest.svg)](https://pypi.python.org/pypi/prometheus_speedtest/)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/prometheus_speedtest.svg)](https://pypi.python.org/pypi/prometheus_speedtest/)\n\n![Grafana](https://github.com/jeanralphaviles/prometheus_speedtest/raw/master/images/grafana.png)\n\n## Getting Started\n\nThese instructions will install and run `prometheus_speedtest` on your system.\n\n### PyPi Package\n\n`prometheus_speedtest` is provided as a\n[PyPi package](https://pypi.org/project/prometheus_speedtest).\n\n1. Installing\n\n   ```shell\n   pip install prometheus_speedtest\n   ```\n\n1. Running\n\n   ```shell\n   prometheus_speedtest\n   ```\n\n#### Usage\n\n```\nInstrument speedtest.net speedtests from Prometheus.\nflags:\n\nprometheus_speedtest.py:\n  --address: address to listen on\n    (default: '0.0.0.0')\n  --excludes: speedtest server(s) to exclude - leave empty for no exclusion\n    (a comma separated list)\n  --port: port to listen on\n    (default: '9516')\n    (an integer)\n  --servers: speedtest server(s) to use - leave empty for auto-selection\n    (a comma separated list)\n  --[no]version: show version\n    (default: 'false')\n```\n\n### Running with Docker\n\n`prometheus_speedtest` is also available as a [Docker](http://docker.com) image\non [Docker Hub](https://hub.docker.com/r/jraviles/prometheus_speedtest)\n:whale:.\n\n```shell\ndocker run --rm -d --name prometheus_speedtest -p 9516:9516/tcp jraviles/prometheus_speedtest:latest\n```\n\nYou can also append extra flags when running with Docker. For example:\n\n```shell\n$ docker run --rm --name prometheus_speedtest -p 9516:9516/tcp \\\n    jraviles/prometheus_speedtest:latest --version\nprometheus_speedtest v0.9.9\n```\n\n### Running with Kubernetes\n\nSince you can run this from a Docker container, you can also run it in Kubernetes.\n\n```shell\nkubectl apply -f deploy/namespace.yaml\nkubectl apply -f deploy/deployment.yaml\n```\n\nThe Kubernetes YAML files are pre-configured to work with the\n`kubernetes-pods-slow` job that comes with Prometheus, which is configured with\n5m scrape times and 30s timeouts.  If you need to raise the timeout, you'll\nneed to change that in your Prometheus config map.\n\nJust keep in mind, that if you increase the replica count, then Prometheus will\nrun a speedtest for each pod, every 5m. The same goes for if you are running\nmore than one replica of Prometheus, as each replica independently scrapes\ntargets.\n\n### Integrating with Prometheus\n\n`prometheus_speedtest` is best when paired with\n[Prometheus](https://prometheus.io). Prometheus can be configured to perform\nSpeedtests on an interval and record their results.\n\nSpeedtest metrics available to query in Prometheus.\n\n| Metric Name           | Description                 |\n|---------------------- |---------------------------- |\n| download\\_speed\\_bps  | Download speed (bit/s)      |\n| upload\\_speed\\_bps    | Upload speed (bit/s)        |\n| ping\\_ms              | Latency (ms)                |\n| bytes\\_received       | Bytes received during test  |\n| bytes\\_sent           | Bytes sent during test      |\n\n#### prometheus.yml config\n\nAdd this to your\n[Prometheus config](https://prometheus.io/docs/prometheus/latest/configuration/configuration)\nto start instrumenting Speedtests and recording their metrics.\n\n```yaml\nglobal:\n  scrape_timeout: 2m\n\nscrape_configs:\n- job_name: 'speedtest'\n  metrics_path: /probe\n  static_configs:\n  - targets:\n    - localhost:9516\n```\n\nNote if you're running `prometheus` under Docker, you must link the\n`prometheus` container to `prometheus_speedtest`. See the steps below for how\nthis can be done.\n\n#### Trying it out\n\nAn example\n[Prometheus config](https://prometheus.io/docs/prometheus/latest/configuration/configuration)\nhas been provided at\n[example/prometheus.yml](https://github.com/jeanralphaviles/prometheus_speedtest/blob/master/example/prometheus.yml).\nWe'll start `prometheus` with this config.\n\n1. Docker Network\n\n   Create the [Docker network](https://docs.docker.com/network) that will link\n   `prometheus_speedtest` and `prometheus` together.\n\n   ```shell\n   docker network create prometheus_network\n   ```\n\n1. Start Prometheus Speedtest\n\n   ```shell\n   docker run --rm -d --net prometheus_network -p 9516:9516/tcp \\\n      --name prometheus_speedtest jraviles/prometheus_speedtest:latest\n   ```\n\n1. Start Prometheus\n\n   ```shell\n   docker run --rm -d --net prometheus_network -p 9516:9516/tcp \\\n      -v $PWD/example/prometheus.yml:/etc/prometheus/prometheus.yml \\\n      --name prometheus prom/prometheus:latest\n   ```\n\n1. Query results\n\n   * Visit \u003chttp://localhost:9516/probe\u003e\n\n   * Wait around **45 seconds** for Prometheus to perform a Speedtest\n\n   * Issue a query for **download\\_speed\\_bps**\n\n     You should see something like this.\n\n     ![Prometheus Query](https://github.com/jeanralphaviles/prometheus_speedtest/raw/master/images/query.png)\n\n### Instrumenting Speedtests with cURL\n\nOnce `prometheus_speedtest` has been started, with either Docker or PyPi,\nSpeedtests can be instrumented with [cURL](https://curl.haxx.se).\n\n```shell\n$ curl localhost:9516/probe\n# HELP download_speed_bps Download speed (bit/s)\n# TYPE download_speed_bps gauge\ndownload_speed_bps 88016694.95692767\n# HELP upload_speed_bps Upload speed (bit/s)\n# TYPE upload_speed_bps gauge\nupload_speed_bps 3415613.277989314\n# HELP ping_ms Latency (ms)\n# TYPE ping_ms gauge\nping_ms 20.928\n# HELP bytes_received Bytes received during test\n# TYPE bytes_received gauge\nbytes_received 111342756.0\n# HELP bytes_sent Bytes sent during test\n# TYPE bytes_sent gauge\nbytes_sent 5242880.0\n```\n\nYou can also visit \u003chttp://localhost:9516/probe\u003e in your browser to see the same\nmetrics.\n\n### Default Port\n\nPrometheus Speedtest defaults to running on port 9516; this is the allocated\nport for this exporter in the\n[Prometheus Default Port Allocations Guide](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\n\n## Getting Started (Development)\n\nThese instructions will get you a copy `prometheus_speedtest` up and running on\nyour local machine for development and testing purposes.\n\n### Prerequisites\n\n* [Python](https://www.python.org)\n* [Docker](https://www.docker.com)\n* [Pytest](https://pytest.org)\n\n### Running Locally\n\n#### Python\n\n1. Ensure packages listed in\n   [requirements.txt](https://github.com/jeanralphaviles/prometheus_speedtest/blob/master/requirements.txt)\n   are installed with `pip`\n\n   ```python\n   pip3 install -r requirements.txt\n   ```\n\n1. Run `prometheus_speedtest`\n\n   ```python\n   python3 -m prometheus_speedtest.prometheus_speedtest\n   ```\n\n#### Docker\n\n1. Building image\n\n   ```shell\n   docker build -t prometheus_speedtest:latest .\n   ```\n\n1. Running\n\n   ```shell\n   docker run --rm -d --name prometheus_speedtest -p 9516:9516/tcp prometheus_speedtest:latest\n   ```\n\n### Perform a Speedtest\n\n```shell\ncurl localhost:9516/probe\n```\n\nOr visit \u003chttp://localhost:9516/probe\u003e\n\n### Running Unit Tests\n\n```shell\npytest\n```\n\n### Contributing\n\nPull requests are welcome. Please adhere to the\n[Google Python style guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md).\n\nPlease format your contributions with the\n[yapf](https://github.com/google/yapf) formatter and lint your code with\n[pylint](https://www.pylint.org). A\n[.pylintrc](https://github.com/jeanralphaviles/prometheus_speedtest/blob/master/.pylintrc)\nconfig has been provided.\n\n```shell\nyapf -i **/*.py\npylint **/*.py\npytype\n```\n\n## Grafana Dashboard Template\n\nUser Doğukan Çağatay has created a Grafana dashboard template for\nprometheus_speedtest. Go check it out on\n[grafana.com](https://grafana.com/grafana/dashboards/11229).\n\n## Maintenance\n\n### Deploying to PyPi\n\n1. Increment version number in\n   [version.py](https://github.com/jeanralphaviles/prometheus_speedtest/blob/master/prometheus_speedtest/version.py)\n\n1. Create PyPi package\n\n   ```shell\n   python3 setup.py sdist\n   ```\n\n1. Upload package to PyPi\n\n   Ensure that [Twine](https://github.com/pypa/twine) has been installed.\n\n   ```shell\n   twine upload dist/*\n   ```\n\n### Deploying multi-architecture images to Docker Hub\n\n1. Ensure that Docker \u003e= 19.03 and\n   [docker buildx](https://docs.docker.com/buildx/working-with-buildx/) is\n   installed.\n\n1. Build and push the new image.\n\n   ```shell\n   # Ensure you have run 'docker login'\n   # https://github.com/docker/buildx/issues/495#issuecomment-754688157\n   docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n   docker buildx create --use --name my-builder\n   TAG=\"$(python3 -m prometheus_speedtest.prometheus_speedtest --version \\\n       | cut -d 'v' -f 2)\"\n   docker buildx build --push --platform linux/amd64,linux/arm64,linux/arm/v7 \\\n       -t jraviles/prometheus_speedtest:latest \\\n       -t jraviles/prometheus_speedtest:${TAG:?} .\n   docker buildx rm my-builder\n   ```\n\n## Authors\n\n* Jean-Ralph Aviles\n\n## License\n\nThis product is licensed under the Apache 2.0 license. See [LICENSE](LICENSE)\nfile for details.\n\n## Acknowledgments\n\n* Matt Martz [speedtest-cli](https://github.com/sivel/speedtest-cli)\n* The Prometheus team \u003chttps://prometheus.io\u003e\n* Testing in Python team \u003chttp://lists.idyll.org/listinfo/testing-in-python\u003e\n* Benjamin Staffin [python-glog](https://github.com/benley/python-glog)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeanralphaviles%2Fprometheus_speedtest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeanralphaviles%2Fprometheus_speedtest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeanralphaviles%2Fprometheus_speedtest/lists"}