{"id":36586580,"url":"https://github.com/forrestjgq/gmeter","last_synced_at":"2026-01-12T08:03:52.705Z","repository":{"id":43844564,"uuid":"316531396","full_name":"forrestjgq/gmeter","owner":"forrestjgq","description":"gmeter customizes HTTP RESTful clients and HTTP RESTful servers and runs them by configuration. With variable and command system supports, json acts as a script language to process HTTP request and response.","archived":false,"fork":false,"pushed_at":"2022-04-29T03:08:03.000Z","size":377,"stargazers_count":10,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-19T17:50:55.071Z","etag":null,"topics":["benchmark","go","http-client","http-server","jmeter","jsonc","restful"],"latest_commit_sha":null,"homepage":"https://github.com/forrestjgq/gmeter","language":"Go","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/forrestjgq.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}},"created_at":"2020-11-27T15:03:23.000Z","updated_at":"2024-03-20T03:38:29.000Z","dependencies_parsed_at":"2022-08-28T10:20:29.691Z","dependency_job_id":null,"html_url":"https://github.com/forrestjgq/gmeter","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/forrestjgq/gmeter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forrestjgq%2Fgmeter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forrestjgq%2Fgmeter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forrestjgq%2Fgmeter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forrestjgq%2Fgmeter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forrestjgq","download_url":"https://codeload.github.com/forrestjgq/gmeter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forrestjgq%2Fgmeter/sbom","scorecard":{"id":407316,"data":{"date":"2025-08-11","repo":{"name":"github.com/forrestjgq/gmeter","commit":"38d76deaaf6aed5013afa6727b7fca1f080fbdbb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"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":"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":"Code-Review","score":0,"reason":"Found 0/23 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":"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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 'main'"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 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"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"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-18T21:41:13.095Z","repository_id":43844564,"created_at":"2025-08-18T21:41:13.095Z","updated_at":"2025-08-18T21:41:13.095Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337006,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"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":["benchmark","go","http-client","http-server","jmeter","jsonc","restful"],"created_at":"2026-01-12T08:03:51.603Z","updated_at":"2026-01-12T08:03:52.694Z","avatar_url":"https://github.com/forrestjgq.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg \n    src=\"assets/gmeter_logo.png\" \n    width=\"387\" height=\"100\" border=\"0\" alt=\"gmeter\"\u003e\n\u003cbr\u003e\n\u003ca href=\"https://godoc.org/github.com/forrestjgq/gmeter\"\u003e\u003cimg src=\"https://img.shields.io/badge/api-reference-blue.svg?style=flat-square\" alt=\"GoDoc\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eMake RESTful HTTP More Easy\u003c/a\u003e\u003c/p\u003e\n\n# What is gmeter\ngmeter customizes HTTP RESTful clients and HTTP RESTful servers and runs them by configuration. With variable and command system supports, json acts as a script language to process HTTP request and response.\n\n# Features\n1. test case configure with json;\n2. gmeter environment variables access and fantastic embedded command system with pipeline support;\n3. test control over specified count or iterable command\n4. concurrency\n5. test pipeline\n6. customized response checking and reporting\n7. proxy support\n8. performance monitoring, QPS limiting(under development)\n9. json compare based on template(under development)\n10. arithmatic and logical expressions support.\n\n# Install\n\n```sh\ngo get github.com/forrestjgq/gmeter\n```\nIt will be installed into $GOBIN(if it's empty, get from `go env $GOBIN`). It requires you've got a GO environment.\n\nOr you may directly install to /usr/local/bin:\n```sh\ncurl -sf https://gobinaries.com/forrestjgq/gmeter | sh\n```\nroot permission may be required to install.\n\n# Usage\n```\ngmeter [options] \u003cconfig\u003e[, \u003cconfig\u003e, ...]\n```\n `\u003cconfig\u003e` is a file path, it could be\n    - A json file path(end with .json), a sample can be get [here](example/sample.json), see [Configuration](https://godoc.org/github.com/forrestjgq/gmeter/config#Config), or\n    - A list file, each line contains a file path ends with .json will be treated as a gmeter configuration and will be called. If it is an relative path, it's related to `\u003cconfig\u003e`'s directory. In a line, `#` is considered to be start of comment, any thing after (and include) `#` will be ignored. Empty line is allowed.\n    - A directory, any .json file in this directory and sub-directories of this directory will be treated as a test configuration and will be called.\n\nOptional arguments includes:\n- `-t, -template \u003cconfig\u003e`: load an HTTP client template configuration. `\u003ctemplate-config\u003e` is a configure json file used as a base configuration. If this argument is present, the Hosts/Messages/Tests/Env/Options will be copied to all `\u003cconfig\u003e` if target configuration does not define those items identified by the key of map. An example could be find in [template](example/base.json) and [configuration](example/sep.json), and the command line would be `gmeter -template example/base.json example/sep.json`.\n- `-httpsrv \u003chttp-server-config\u003e`: start an HTTP server. `\u003chttp-server-config\u003e` is configure json file path for creating http server, a sample can be get [here](example/server.json), see [HTTP Server Configuration](https://godoc.org/github.com/forrestjgq/gmeter/config#HttpServers) for more information.\n- `-e=\"k1=v1 k2=v2 ...\"`: predefined global variables. Each variable is defined in `key=value` form, and multiple key value pairs are seperated by spaces.\n- `-call \u003ccommandline\u003e`: command line called before any config is executed and after any server is started.\n- `-f \u003cfinal\u003e`: final config called even running fails.\n- `-gm \u003cport\u003e`: set [GoMark](https://github.com/forrestjgq/gomark) HTTP port, default 7777.\n- `-fs \u003cpath:port\u003e`: enable a file server for local file system `\u003cpath\u003e` using HTTP server on port `\u003cport\u003e`\n\n# Documents\n- [Guideline](./guideline.md): A guideline explains with examples for you to ease into gmeter:\n- [Configurations](https://godoc.org/github.com/forrestjgq/gmeter/config): godoc for configuration description\n- [Command](./command.md): gmeter command system and manual\n- [Json Compare](./jsonc.md): Json compare manual.\n\n# TODOs\n1. gomark support\n2. better logging\n\n# Thanks\n\n\u003cp align=\"left\"\u003e\n\u003ca href=\"https://www.jetbrains.com\"\u003e\n\u003cimg \n    src=\"assets/jetbrains-small.png\" \n    width=\"150\" height=\"163\" border=\"0\" alt=\"Jetbrains\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforrestjgq%2Fgmeter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforrestjgq%2Fgmeter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforrestjgq%2Fgmeter/lists"}