Skip to content

devstats: 開発貢献数の計算方法

Kenichi Omichi edited this page Apr 22, 2022 · 7 revisions

Kubernetesを中心とした開発貢献の統計情報を提供するサイト devstats での計算方法を調べ、ここに整理する。 特に2022年4月10日頃に開発貢献数(Contributions)が大幅に増えた原因を中心に調べる。

概要

devstats は github 上のアクティビティ(=イベント)をアーカイブし、Grafana で可視化するツール。

アーカイブ部分は gharchive というツールを使っている。 gharchive(=GitHub archive) は Shopify の開発者 Ilya Grigorik 氏がメンテナンスしている Open Source Software である。

devstats2

gharchive 以外のデータソースとして、git リポジトリと github API がある。

  • git リポジトリは、各コミットでどの程度ファイルを変更しているのかなど詳細を分析するために利用する。
  • github API は labels や milestones の情報を取得するために利用する。他の情報も API 経由で取れるが Rate Limit に引っかかるので取っていない。

各データソースの情報は PostgreSQL に格納され、それをタイムシリーズ化した情報を InfluxDB に格納する。 これにより Grafana での「時間軸での情報出力」を容易にしている。

gharchive

Open Source 開発者は世界中で数百万のプロジェクトで共に働いている。コードを書き、ドキュメントを整備し、バグを修正・報告したり様々なことをしている。 GH Archive は公の github タイムラインを記録し、アーカイブし、そして更なる分析のためにアーカイブしたデータに容易にアクセスできるようにするものだ。

github は20種類以上のイベントを提供している。 たとえば新たな commit, fork, 新たなチケットの作成、コメント投稿などのイベントだ。 gharchive はこれらのイベントを毎時集計、アーカイブする。 gharchive は REST API を通してクライアントにそれらの集計情報を提供する。

例: Activity for 1/1/2015 @ 3PM UTC

$ wget https://data.gharchive.org/2015-01-01-15.json.gz

ただし、devstats では gharchive は REST API 経由ではなく PostgreSQL データベースに格納している。

devstats はどのような種類のイベントを github から集計しているか

ドキュメント より

  • Contributor: anyone who made a review, comment, commit, created issue or PR, reviewed PR, or commented on an issue or PR
  • Contribution: a review, comment, commit, issue or PR
  • Pusher: anyone who pushed a commit into the repository
  • Committer: anyone who made/authored a commit/PR pushed by the committer, this can be the same person or not
  • Reviewer: someone who has added a pull request review comment(s), /lgtm, the lgtm approve label, /approve, or the approve label
  • Approve: when someone adds /approve comment
  • Review: when someone adds /approve, /lgtm, the approved or lgtm label, or adds a PR review comment

devstats ソースコード上、上記をどのように定義しているか

例: Contribution: a review, comment, commit, issue or PR

Grafana 上の表示項目: Developer Activity Counts by Repository Group

Grafana 設定ファイル: ./grafana/dashboards/kubernetes/developer-activity-counts-by-repository-group.json

          {
            "selected": true,
            "text": "Contributions",
            "value": "contributions"
          },

2022年4月10日頃に開発貢献数(Contributions)が大幅に増えた原因

reviews項目を追加するコミット が4月8日に追加されたことが原因。 このコミットでは「github 上のレビューに関する情報を保持するテーブル」gha_reviews が追加された。

  • これは Issue と Pull Request 上でのコメントを含んでいる。
  • もしも review type が commented で review body が空の場合、レビューのコメントがテーブル gha_reviews に格納される。
  • それ以外の review type(approved, rejected, dismissed など)の場合もテーブル gha_reviews に格納される。
  • これは変数テーブルであり、詳細は variable table を確認してほしい。

この変更のきっかけとなったのが Not counting PR reviews? という Issue。

  • SQL ファイルは PR reviews のコメントはカウントしているように見える。
  • しかし PR reviews (PullRequestReviewEvent) をトラッキングしているように見えない。

この Issue の中で devstats のメンテナーが詳細を調査。

  • contributions は 'IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent' のイベントから統計情報を収集している。
  • 指摘の通り PullRequestReviewEvent が contributions に入っていない。
  • 更に PullRequestReviewEvent に含まれる2種類の日付項目 first と last の内、first が古い日付になっていることが判明。
  • PullRequestReviewEvent のイベントをそのまま使わずに日付を修正したものを新たなテーブル gha-reviews に格納する。

これにより、PullRequestReviewEvent がカウントされるようになり、Contributions の数が大幅に増えた。

参考

Clone this wiki locally