github-developer-exporter is a prometheus exporter which talks to GitHub or GitHub Enterprise API to get information about Organization, Repository, Issue and Pull Request connected to Assignee, Requested Reviewers, State etc.
One of the problem in developer teams is that someone has a lot of tasks comparing with other members. Unbalanced assign of issues and of reviews makes them less productive. And we have no solution or tool to track time-series task assignee or requested reviewers. So we create it to check developer team conditions through time-series analysis via prometheus.
We can visualize time-series Organization, Repository, Issue or Pull Request with labels as a Prometheus Exporter.
Prometheus is a open source systems monitoring with time series data. Grafana is a open source analytics and monitoring solution for every database.
This exporter is written in Go, making it easy to build and deploy as a static binary. You can clone this repository and build yourself or pull image from DockerHub.
| Name | Description |
|---|---|
| PORT | server port. default: 8888 |
| MAX_WORKER | background worker num. default: 2 |
| MAX_QUEUE | background queue size. default: 5 |
| GITHUB_TOKEN | token for GitHub API. |
| GITHUB_ORGS | organization name. if you want to check multiple organizations, you can set them with comma. e.g. "hoge,fuga" |
| GITHUB_URL | If GH:E, you should set your gh:e endpoint. default: https://api.github.com/ |
| GITHUB_INTERVAL | you should set it becaulse of API rate limit. default: 30 (minute) |
| Metric name | Metric type | Labels/tags | Status |
|---|---|---|---|
| org_info | gauge | login=<login-field>name=<organization-name>url=<url>email=<organization-email>blog=<blog-url>created_at=<created timestamp>updated_at=<last update timestamp> |
STABLE |
| org_total_repos_count | gauge | login=<login-field>name=<organization-name>url=<url>email=<organization-email>blog=<blog-url>created_at=<created timestamp>updated_at=<last update timestamp> |
STABLE |
| org_public_repos_count | gauge | login=<login-field>name=<organization-name>url=<url>email=<organization-email>blog=<blog-url>created_at=<created timestamp>updated_at=<last update timestamp> |
STABLE |
| org_private_repos_count | gauge | login=<login-field>name=<organization-name>url=<url>email=<organization-email>blog=<blog-url>created_at=<created timestamp>updated_at=<last update timestamp> |
STABLE |
| repo_info | gauge | org_name=<organization-name>name=<repository-name>full_name=<fullname>owner=<organization-owner>url=<repository-url>default_branch=<default-branch>archived=<true or false>laungage=<mainly used laungage>created_at=<created timestamp>updated_at=<last updated timestamp>pushed_at=<last pushed timestamp> |
STABLE |
| repo_open_issue_count | gauge | org_name=<organization-name>name=<repository-name>full_name=<fullname>owner=<organization-owner>url=<repository-url>default_branch=<default-branch>archived=<true or false>laungage=<mainly used laungage>created_at=<created timestamp>updated_at=<last updated timestamp>pushed_at=<last pushed timestamp> |
STABLE |
| issue_info | gauge | org_name=<organization-name>repo_name=<repository-name>state=<open or close>title=<issue-title>created_at=<creation timestamp>updated_at=<last updated timestamp>closed_at=<If not closed, it returns "">assignee=<if not assigned, it returns "">label=<labels joined with comma. e.g. "good first issue,help wanted"> |
STABLE |
| pull_request_info | gauge | org_name=<organization-name>repo_name=<repository-name>state=<open or close>title=<issue-title>created_at=<creation timestamp>updated_at=<last updated timestamp>closed_at=<If not closed, it returns "".>assignee=<If not assigned, it returns "".>reviewer=<If someone finished review, it does not return them.>label=<labels joined with comma. e.g. "good first issue,help wanted"> |
STABLE |