Skip to content

prometheus exporter for developer and engineering team manager using github

License

Notifications You must be signed in to change notification settings

ko-da-k/github-developer-exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documentation

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.

Why do we create it ?

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.

What we can do with this exporter

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.

Installation

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.

Environment Variable

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)

Metrics

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