{"id":21477814,"url":"https://github.com/ricardocasares/kbme","last_synced_at":"2025-07-15T10:33:46.061Z","repository":{"id":24367748,"uuid":"101318220","full_name":"ricardocasares/kbme","owner":"ricardocasares","description":"Gather kanban metrics from your JIRA instance","archived":false,"fork":false,"pushed_at":"2023-01-03T15:15:19.000Z","size":1237,"stargazers_count":10,"open_issues_count":26,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-11T15:19:40.868Z","etag":null,"topics":["api","atlassian","cycle","jira","kanban","lead","metrics","rest","throughput","time"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ricardocasares.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-24T16:57:22.000Z","updated_at":"2023-08-29T10:34:44.000Z","dependencies_parsed_at":"2023-01-14T00:50:48.629Z","dependency_job_id":null,"html_url":"https://github.com/ricardocasares/kbme","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardocasares%2Fkbme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardocasares%2Fkbme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardocasares%2Fkbme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardocasares%2Fkbme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ricardocasares","download_url":"https://codeload.github.com/ricardocasares/kbme/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225611971,"owners_count":17496554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api","atlassian","cycle","jira","kanban","lead","metrics","rest","throughput","time"],"created_at":"2024-11-23T11:15:11.999Z","updated_at":"2024-11-23T11:15:12.840Z","avatar_url":"https://github.com/ricardocasares.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kbme\n\n[![Build Status](https://travis-ci.com/ricardocasares/kbme.svg?branch=master)](https://travis-ci.com/ricardocasares/kbme)\n[![codecov](https://codecov.io/gh/ricardocasares/kbme/branch/master/graph/badge.svg)](https://codecov.io/gh/ricardocasares/kbme)\n[![npm](https://img.shields.io/npm/dt/kbme.svg)](https://npmjs.com/package/kbme)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\nGather kanban metrics from your JIRA instance:\n\n- Lead time\n- Cycle time\n- Throughput\n\nThis tool was inspired by one of the talks on the european Atlassian Summit 2017\n\n[![Atlassian Summit](https://image.ibb.co/faANgk/Screen_Shot_2017_08_26_at_3_42_48_PM.png)](https://www.youtube.com/watch?v=m-w2cU_1oB8)\n\nWatch the video to understand how metrics are collected.\n\n## Installation\n\n`npm install -g kbme`\n\n## Usage\n\nDefault output is prettified `json`\n\n\u003e `kbme \u003e\u003e metrics.json`\n\nUse the `kbme` command to gather information for a particular period of time\n\n\u003e `kbme --csv --start 2017-08-01 --finish 2017-08-31 \u003e\u003e metrics.csv`\n\nCollect metrics for the last 90 days using 15 days intervals\n\n\u003e `kbme --report --interval 15 --period 90 --csv \u003e\u003e metrics.csv`\n\nAdds a new line to the previous report using data from last 15 days\n\n\u003e `kbme --period 15 --csv \u003e\u003e metrics.csv`\n\n### Options\n\n    -c, --csv         Outputs comma separated values [false]\n    -k, --keys        Comma separated list of projects keys\n    -t, --types       Issue types filter [NOT IN (Epic)]\n    -d, --done        Done status [Done]\n    -t, --todo        ToDo status [ToDo]\n    -s, --start       Period start [2017-08-01]\n    -f, --finish      Period finish [2017-08-15]\n    -q, --query       JIRA JQL Query [project IN (%keys) AND status IN (%done) AND resolutiondate \u003e %start AND resolutiondate \u003c %finish AND issuetype %types]\n    -u, --user        JIRA username []\n    -p, --pass        JIRA password\n    -j, --jira        JIRA REST API URL [https://server-name.com]\n    -e, --endpoint    JIRA JQL /search endpoint [%jira/jira/rest/api/2/search?jql=%jql\u0026expand=changelog\u0026maxResults=1000]\n    --period          Period of time to collect metrics, in days [90]\n    -i, --interval    Interval to split metrics on when using --report, in days [15]\n\n## Automatic environment variables detection\n\nYou can create a `.env` file from which `kbme` will read environment variables, use this to setup a project you want constant metrics from.\n\n### Sample .env file\n\n```\nKBME_JIRA=\"http://server-url.com\"\nKBME_USER=\"MrBobry\"\nKBME_PASS=\"DzienBobry\"\nKBME_AUTO=15\nKBME_REPORT=false\nKBME_PERIOD=365\nKBME_INTERVAL=15\nKBME_START=\"2017-01-01\"\nKBME_FINISH=\"2017-06-01\"\nKBME_DONE=\"Done\"\nKBME_TODO=\"In Progress\"\nKBME_KEYS=\"ELEMENTS\"\nKBME_TYPES=\"NOT IN (Epic)\"\nKBME_QUERY=\"project IN (%keys) AND status IN (%done) AND resolutiondate \u003e %start AND resolutiondate \u003c %finish AND issuetype %types\"\nKBME_ENDPOINT=\"%jira/jira/rest/api/2/search?jql=%jql\u0026expand=changelog\"\n```\n\nPay special attention to the query and endpoint options, they have special characters (%opt) that\ncan be used as a template to replace by another option value.\n\n## Debug\n\nLog JQL queries into the console\n\n\u003e `DEBUG=jql kbme`\n\n## Contributing\n\nFeel free to fill an issue and submit a pull request if you find any problems.\n\n**IMPORTANT:** Always create feature branches from the `beta` branch.\n\n### Automated versioning\n\nWe use `semantic-release` to automate the versioning process, make sure you follow the [commit message convention explained here](https://github.com/semantic-release/semantic-release#commit-message-format).\n\n**HEADS UP:** If you are not sure how write a commit message, make your changes in your feature branch and run `npm run commit` and follow the assistant.\n\n### Releases\n\n#### Beta\n\nCreate a feature branch and make a pull-request to `beta` branch.\nOnce its merged, you can try and install the package using `@beta` dist tag on `npm`.\n\n```bash\n\u003e npm i -g kbme@beta\n```\n\n#### Production\n\nCreate a new pull-request from `beta` to `master` branch.\nOnce it gets merged, the final version will be released using `@latest` dist tag on `npm`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricardocasares%2Fkbme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fricardocasares%2Fkbme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricardocasares%2Fkbme/lists"}