{"id":37124179,"url":"https://github.com/spurge/goload","last_synced_at":"2026-01-14T14:20:17.882Z","repository":{"id":48426949,"uuid":"169986188","full_name":"spurge/goload","owner":"spurge","description":"Blackbox monitoring that passes data between endpoints","archived":false,"fork":false,"pushed_at":"2021-10-25T19:46:48.000Z","size":1409,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-21T03:18:47.660Z","etag":null,"topics":["blackbox","blackbox-exporter","golang","load-testing","prometheus","prometheus-exporter","rest-api","synthetic-traffic","yaml"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spurge.png","metadata":{"files":{"readme":"README.md","changelog":"history.go","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-10T14:21:34.000Z","updated_at":"2021-04-24T13:18:34.000Z","dependencies_parsed_at":"2022-08-24T02:50:19.050Z","dependency_job_id":null,"html_url":"https://github.com/spurge/goload","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/spurge/goload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spurge%2Fgoload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spurge%2Fgoload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spurge%2Fgoload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spurge%2Fgoload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spurge","download_url":"https://codeload.github.com/spurge/goload/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spurge%2Fgoload/sbom","scorecard":{"id":842810,"data":{"date":"2025-08-11","repo":{"name":"github.com/spurge/goload","commit":"3ba289af18bbc3347134f4a0d7a31d84e77271ff"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/25 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":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:3","Warn: containerImage not pinned by hash: Dockerfile:13: pin your Docker image by updating alpine to alpine@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Info:   0 out of   2 containerImage 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":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3372 / GHSA-6wxm-mpqj-6jpf","Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p","Warn: Project is vulnerable to: GO-2021-0059 / GHSA-w942-gw6m-p62c","Warn: Project is vulnerable to: GO-2022-0957 / GHSA-wjm3-fq3r-5x46","Warn: Project is vulnerable to: GO-2021-0054 / GHSA-p64j-r5f4-pwwx","Warn: Project is vulnerable to: GO-2021-0265 / GHSA-ppj4-34rq-v8j9","Warn: Project is vulnerable to: GO-2021-0061 / GHSA-r88r-gmrh-7j83","Warn: Project is vulnerable to: GO-2022-0956 / GHSA-6q6q-88xp-6f2r","Warn: Project is vulnerable to: GO-2020-0036 / GHSA-wxc4-f4m6-wwqv","Warn: Project is vulnerable to: GO-2022-0209 / GHSA-r5c5-pr8j-pfp7","Warn: Project is vulnerable to: GO-2023-1992 / GHSA-x3jr-pf6g-c48f","Warn: Project is vulnerable to: GO-2022-0229 / GHSA-cjjc-xp8v-855w","Warn: Project is vulnerable to: GO-2020-0012 / GHSA-ffhg-7mh4-33c4","Warn: Project is vulnerable to: GO-2021-0227 / GHSA-3vm4-22fp-5rfm","Warn: Project is vulnerable to: GO-2022-0968 / GHSA-gwc9-m7rh-j2ww","Warn: Project is vulnerable to: GO-2021-0356 / GHSA-8c26-wmh5-6g9v","Warn: Project is vulnerable to: GO-2024-2961","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T20:50:48.611Z","repository_id":48426949,"created_at":"2025-08-23T20:50:48.611Z","updated_at":"2025-08-23T20:50:48.611Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["blackbox","blackbox-exporter","golang","load-testing","prometheus","prometheus-exporter","rest-api","synthetic-traffic","yaml"],"created_at":"2026-01-14T14:20:17.218Z","updated_at":"2026-01-14T14:20:17.867Z","avatar_url":"https://github.com/spurge.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Goload\n======\n\nGoload is a blackbox-exporter, which is a monitoring tool exposing metrics with status and latency from its targets. It's written to do a series of requests against a set of targets with the ability to pass data between requests. It'll then export it's metrics for Prometheus to scrape.\n\nThe easiest way to run it, is by using docker. You'll then configure it by a set of environment variables and a file with your target definitions.\n\nUse cases\n---------\n\n* *Blackbox-exporter* by tracking responses and latency from a set of targets\n* *Load testing* by running this on many instances with a large number of concurrency\n* *Integration testing* by testing your API with a set of pre-defined requests\n* *Synthetic traffic generator* during development or in production to generate a baseline of metrics\n\nHow to run it\n-------------\n\nGoload comes shipped with Alpine as a docker image at `spurge/goload`\n\n### As a binary\n\n```sh\ngo get github.com/spurge/goload\ngo install github.com/spurge/goload\ngoload -host localhost -port 9115 -stderrthreshold ERROR -concurrency 1 -sleep 1 -repeat -1 -target your-targets.yml\n```\n\n### With docker\n\n```sh\ndocker run -d -v $PWD/targets.yml:/targets.yml -e TARGETS=/targets.yml -p 9115:9115 spurge/goload\ncurl localhost:9115/metrics\n```\n\n### Rolling your own docker image\n\n```Dockerfile\nFROM spurge/goload\n\nCOPY targets.yml /app\n\nENV TARGETS /app/targets.yml\n```\n\nand then ...\n\n```sh\ndocker build -t goload-some-target .\ndocker run -d goload-some-target\ncurl localhost:9115/metrics\n```\n\nEnvironment varables\n--------------------\n\n* `HOST` the host to listen on, default is `0.0.0.0`\n* `PORT` the port to listen on, default is `9115` *(the same as Prometheus blackbox-exporter)*\n* `LOG_LEVEL` sets the verbosity by INFO, WARNING and ERROR, default is `ERROR`\n* `CONCURRENCY` the number of concurrent workers, doing requests against your targets, default is `1`\n* `SLEEP` the time to sleep in seconds before running through your targets again, default is `1`\n* `REPEAT` the number of repeating target cycles, default is `-1` which means infinite\n* `TARGETS` the path to your targets defined in an yaml-file\n\nTargets yaml-file\n-----------------\n\n```yaml\n- name: login\n  url: http://some-host/login\n  params:\n    some-query: parameter\n  method: POST\n  body: \u003e\n    {\n      \"username\": \"yumba\",\n      \"password\": \"secret\"\n    }\n  expect:\n    status_code_re: '2[0-9]{2}'\n    headers_re:\n      Content-Type: 'application/json'\n    body_re: '\\{\"user\":\\{\"id\":\"[a-z0-9\\-]+\",\"name\":\"[a-z]+\".*'\n- name: profile\n  url: 'http://some-host/profile/{{ fromJson \"login\" \"user.id\" }}'\n  method: GET\n  headers:\n    Authentication: 'Bearer {{ fromJson \"login\" \"user.auth.token\" }}'\n```\n\nPassing data between targets\n----------------------------\n\nAs for now, there's only support for parsing and passing json-data. The targets yaml file is treated as a go-lang template, which means that you can access some functionality within double curly-brackets `{{ }}`.\n\nThe json-data is fetched with the template function `fromJson`. It takes two arguments, the first is the name of the request/target and the second is the path to you data from the response body. The path is defined and parsed using the [gjson](https://github.com/tidwall/gjson)-library.\n\nSee example above and the gjson documentation: https://github.com/tidwall/gjson\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspurge%2Fgoload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspurge%2Fgoload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspurge%2Fgoload/lists"}