メインコンテンツまでスキップ
翻訳ページ

このページは AI の支援を受けて英語から翻訳されています。内容が異なる場合は英語版が正となります。

StackQL によるオープンソースプロジェクトのアクティビティモニター

このガイドでは、GitHub のオープンソースソフトウェアのメンテナー向けに、リアルタイムの監視とアラートのシステムをセルフホストする方法を紹介します。

stackql は、SQL 言語、およびデータの可視化や分析のためのライブラリとツールを使用して、クラウドと SaaS のリソースをクエリし、操作できるオープンソースツールです。気に入ったら ⭐ を付けてください!

次のようなアラートを Slack と Discord でリアルタイムに受け取れます:

OSS モニター

動作確認済み 組み込み SQL バックエンド docker linux

概要​

自分たちのオープンソースプロジェクトを監視するツールを探したところ、そのほとんどが宣伝どおりに動作しないか、まったく動作しませんでした(GitHub のサードパーティアプリの場合)。そこで独自に作成しました。GitHub 上のオープンソースプロジェクトで起動して使用できます。

oss-activity-monitor プロジェクトは、stackql を使用してオープンソースプロジェクトのアクティビティをリアルタイムに監視します。次の項目をリアルタイムに通知します:

  • ⭐ GitHub リポジトリの新しいスターゲイザー
  • 👀 GitHub リポジトリの新しいウォッチャー
  • 🍴 GitHub リポジトリの新しいフォーク
  • 📊 GitHub リポジトリの新しい Issue
  • 🙋 GitHub Organization の新しいフォロワー
  • 📦 GitHub リリースアセットの新しいダウンロード
  • 🍺 homebrew の新しいダウンロード

仕組み​

このプロジェクトはコンテナー(docker またはその他のコンテナーデプロイプラットフォームを使用)にデプロイされます。python と pystackql パッケージで構築されており、stackql の github プロバイダーと homebrew プロバイダーを使用します。マテリアライズドビューと SELECT 文を使用して、監視対象の GitHub と Homebrew のエンドポイントについて、現在と前回のメトリクスの状態を取得して比較します。これを次の図に示します。

たとえば、stackql を使用して次のマテリアライズドビューを作成し、データを投入したとします。

CREATE OR REPLACE MATERIALIZED VIEW mvw_github_repo_stargazers AS
SELECT login FROM github.activity.repo_stargazers
WHERE owner = 'your-org' and repo = 'your-repo'

次の stackql クエリは、GitHub をポーリングして新しいスターゲイザーを検出します。

SELECT c.login
FROM github.activity.repo_stargazers c
LEFT JOIN mvw_github_repo_stargazers mvw
ON c.login = mvw.login
WHERE mvw.login IS NULL
AND c.owner = 'your-org' AND c.repo = 'your-repo'

その後、次の文で状態を更新します。

REFRESH MATERIALIZED VIEW mvw_github_repo_stargazers

リポジトリのウォッチャー、Issue、Organization のフォロワー、リリースアセットのダウンロード、homebrew のダウンロードにも、同様のパターンを繰り返します。

プロジェクトの実行​

以下の手順に従って、ローカル環境または任意のクラウドプラットフォームでプロジェクトを起動して実行します。

1. リポジトリをクローンする​

git clone https://github.com/stackql/oss-activity-monitor.git
# or
git clone git@github.com:stackql/oss-activity-monitor.git

2. 環境変数を設定する​

プロジェクトの設定には、次の環境変数が必要です(環境変数として指定します。以下の例では .env ファイルを使用します)。

変数説明値の例
LOG_LEVELログレベル(一般的なログには INFO、詳細なログには DEBUG)INFO
SLEEP_INTERVALリクエストループ間の待機時間(秒)5
GITHUB_REPOGitHub リポジトリ名stackql
GITHUB_REPO_OWNERGitHub の Organization 名またはオーナー名stackql
HOMEBREW_FORMULA_NAMEHomebrew の formula 名(存在する場合)stackql
STACKQL_GITHUB_USERNAMEGitHub のユーザー名jeffreyaven
STACKQL_GITHUB_PASSWORDGitHub の個人用アクセストークンghp_yourpersonalaccesstoken
SLACK_WEBHOOK_URL通知の送信に使用する Slack の Webhook URLhttps://hooks.slack.com/services/...
DISCORD_WEBHOOK_URL通知の送信に使用する Discord の Webhook URLhttps://discord.com/api/webhooks/...

3. コンテナーをビルドする​

docker build --no-cache -t oss-activity-monitor .

4. コンテナーを実行する​

docker run --env-file .env oss-activity-monitor

以上です!これで、オープンソースプロジェクトでアクティビティがあると、リアルタイムにアラートを受け取れます。コンテナーを停止するには、次のコマンドを使用します。

docker stop $(docker ps -a -q --filter ancestor=oss-activity-monitor)

GitHub で ⭐ を付けてください