{"id":15715713,"url":"https://github.com/stackql/oss-activity-monitor","last_synced_at":"2026-02-17T16:01:20.833Z","repository":{"id":232313528,"uuid":"783534149","full_name":"stackql/oss-activity-monitor","owner":"stackql","description":"Real time notifications for open source project maintainers","archived":false,"fork":false,"pushed_at":"2024-04-30T06:00:08.000Z","size":466,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T15:02:44.907Z","etag":null,"topics":["github","homebrew","open-source","stackql"],"latest_commit_sha":null,"homepage":"https://github.com/stackql/stackql","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stackql.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-08T04:49:44.000Z","updated_at":"2024-10-02T03:19:57.000Z","dependencies_parsed_at":"2024-04-30T07:27:49.485Z","dependency_job_id":null,"html_url":"https://github.com/stackql/oss-activity-monitor","commit_stats":null,"previous_names":["stackql/oss-activity-monitor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stackql/oss-activity-monitor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackql%2Foss-activity-monitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackql%2Foss-activity-monitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackql%2Foss-activity-monitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackql%2Foss-activity-monitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackql","download_url":"https://codeload.github.com/stackql/oss-activity-monitor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackql%2Foss-activity-monitor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["github","homebrew","open-source","stackql"],"created_at":"2024-10-03T21:42:32.490Z","updated_at":"2026-02-17T16:01:20.820Z","avatar_url":"https://github.com/stackql.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open Source Project Activity Monitor\r\n\r\nGet real-time alerts in Slack or Discord for GitHub project activity.  \r\n\r\n![OSS Monitor](images/oss-activity-monitor.png)\r\n\r\nThis project uses [__stackql__](https://github.com/stackql/stackql) to perform real-time open source project activity monitoring, this includes real time notification of:\r\n\r\n- ⭐ new GitHub repo stargazers\r\n- 👀 new GitHub repo watchers\r\n- 🍴 new GitHub repo forks\r\n- 📊 new GitHub repo issues\r\n- 🙋 new GitHub org followers\r\n- 📦 new GitHub release asset downloads\r\n- 🍺 new homebrew downloads\r\n\r\n## How it works\r\n\r\nMaterialized views and `SELECT` statements are used to capture and compare state between current and previous metrics for GitHub and Homebrew monitored endpoints, this is described in the diagram here:  \r\n\r\n```mermaid\r\ngraph TB\r\n    A[CREATE MATERIALIZED VIEW\\nof GitHub or Homebrew metric] --\u003e B[SELECT query for\\nGitHub or Homebrew metric]\r\n    B --\u003e C[Compare current state\\nto previous state]\r\n    C --\u003e D[Send Slack and/or Discord\\nmessage with alert]\r\n    D --\u003e B\r\n```\r\nfor example, here given this materialized view created and populated using `stackql`:  \r\n\r\n```sql\r\nCREATE OR REPLACE MATERIALIZED VIEW mvw_github_repo_stargazers AS \r\nSELECT login FROM github.activity.repo_stargazers\r\nWHERE owner = 'your-org' and repo = 'your-repo'\r\n```\r\n\r\nthe following `stackql` query polls GitHub for new stargazers...\r\n\r\n```sql\r\nSELECT c.login\r\nFROM github.activity.repo_stargazers c\r\nLEFT JOIN mvw_github_repo_stargazers mvw\r\nON c.login = mvw.login\r\nWHERE mvw.login IS NULL\r\nAND c.owner = 'your-org' AND c.repo = 'your-repo'\r\n```\r\n\r\nthen the state is refreshed using...\r\n\r\n```sql\r\nREFRESH MATERIALIZED VIEW mvw_github_repo_stargazers\r\n```\r\n\r\nsimilar patterns are repeated for repo watchers, issues, org followers, release asset downloads and homebrew downloads.\r\n\r\n## Deployment\r\n\r\nbasic configuration required (provided using environment variables, a `.env` file in the example below):  \r\n\r\n| Variable                   | Description                                                                       | Example Value                                    |\r\n|----------------------------|-----------------------------------------------------------------------------------|--------------------------------------------------|\r\n| `LOG_LEVEL`                | Log level (INFO for general logs; DEBUG for detailed logging)                     | INFO                                             |\r\n| `SLEEP_INTERVAL`           | Time delay in seconds between request loops                                       | 5                                                |\r\n| `GITHUB_REPO`              | GitHub repository name                                                            | stackql                                          |\r\n| `GITHUB_REPO_OWNER`        | GitHub organization or owner name                                                 | stackql                                          |\r\n| `HOMEBREW_FORMULA_NAME`    | Homebrew formula name, if available                                               | stackql                                          |\r\n| `STACKQL_GITHUB_USERNAME`  | Your GitHub username                                                              | jeffreyaven                                      |\r\n| `STACKQL_GITHUB_PASSWORD`  | Your GitHub personal access token                                                 | ghp_yourpersonalaccesstoken                      |\r\n| `SLACK_WEBHOOK_URL`        | Slack webhook URL for sending notifications                                       | https://hooks.slack.com/services/...             |\r\n| `DISCORD_WEBHOOK_URL`      | Discord webhook URL for sending notifications                                     | https://discord.com/api/webhooks/...             |\r\n\r\n### Build and run locally using `docker`\r\n\r\nTo build and run the container locally using `docker` run the following commands:\r\n```bash\r\ndocker build --no-cache -t oss-activity-monitor .\r\n# to supply the above variables in a .env file\r\ndocker run --env-file .env oss-activity-monitor\r\n```\r\n\u003e to stop the container use `docker stop $(docker ps -a -q --filter ancestor=oss-activity-monitor)`\r\n\r\n### Run locally using `docker` from image in Dockerhub\r\n\r\nTo run the container using the image hosted on [Docker Hub](https://hub.docker.com/repository/docker/stackql/oss-activity-monitor/general), execute the following command:\r\n\r\n```bash\r\ndocker run --env-file .env stackql/oss-activity-monitor:latest\r\n```\r\n\r\n\u003e to stop the container use `docker stop $(docker ps -q --filter ancestor=stackql/oss-activity-monitor:latest)`\r\n\r\n### Run in Azure Container Instances\r\n\r\nTo run Azure Container Instances, first, build and push an image to your Azure Container Registry (ACR) using the following commands:\r\n\r\n```bash\r\ndocker build -t oss-activity-monitor .\r\ndocker tag oss-activity-monitor {replace-with-your-acr-name}.azurecr.io/oss-activity-monitor:latest\r\ndocker push {replace-with-your-acr-name}.azurecr.io/oss-activity-monitor:latest\r\n```\r\n\r\nReplace `{replace-with-your-acr-name}` with the name of your Azure Container Registry.\r\n\r\nThen, you can deploy the container instance using the `az` command-line tool, the following example exports container logs to an Azure Log Analytics workspace for inspection:\r\n\r\n```bash\r\n# replace with your variables....\r\nRESOURCE_GROUP=\"oss-activity-monitor-rg-prd\"\r\nLOCATION=\"eastus\"\r\nCONTAINER_NAME=\"activity-monitor-instance\"\r\nACR_NAME=\"ossactivitymonitorprd\"\r\nSTORAGE_ACCOUNT_NAME=\"ossactivitymonitorprd\"\r\nIMAGE_NAME=\"$ACR_NAME.azurecr.io/activity-monitor:latest\"\r\nACR_USERNAME=ossactivitymonitorprd\r\nACR_PASSWORD=xxxxxx\r\nLOG_ANALYTICS_WORKSPACE_NAME=\"activity-monitor-logs-prd\"\r\nFILE_SHARE_NAME=fileshareprd\r\nMOUNT_PATH=/mnt/azure\r\n\r\n# Read .env file and prepare environment variables for ACI\r\nENV_VARS=()\r\nwhile IFS='=' read -r key value; do\r\n    ENV_VARS+=(\"$key=$value\")\r\ndone \u003c .env\r\n\r\n# create a Log Analytics workspace\r\naz monitor log-analytics workspace create \\\r\n--resource-group $RESOURCE_GROUP \\\r\n--workspace-name $LOG_ANALYTICS_WORKSPACE_NAME \\\r\n--location $LOCATION\r\n\r\n# get the workspace key\r\nLOG_ANALYTICS_WORKSPACE_KEY=$(az monitor log-analytics workspace get-shared-keys \\\r\n--resource-group $RESOURCE_GROUP \\\r\n--workspace-name $LOG_ANALYTICS_WORKSPACE_NAME \\\r\n--query primarySharedKey -o tsv)\r\n# get the Workspace ID\r\nLOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show --resource-group $RESOURCE_GROUP --workspace-name $LOG_ANALYTICS_WORKSPACE_NAME --query \"customerId\" -o tsv)\r\n\r\nSTORAGE_KEY=$(az storage account keys list \\\r\n--resource-group $RESOURCE_GROUP \\\r\n--account-name $STORAGE_ACCOUNT_NAME \\\r\n--query \"[0].value\" -o tsv)\r\n\r\n# Create a file share\r\naz storage share create \\\r\n--account-name $STORAGE_ACCOUNT_NAME \\\r\n--name $FILE_SHARE_NAME\r\n\r\n# add backend storage variable\r\nBACKEND_FILE_STORAGE_LOCATION=\"$MOUNT_PATH/stackql.db\"\r\nENV_VARS+=(\"BACKEND_FILE_STORAGE_LOCATION=$BACKEND_FILE_STORAGE_LOCATION\")\r\n\r\n# create the container instance\r\naz container create \\\r\n--resource-group $RESOURCE_GROUP \\\r\n--name $CONTAINER_NAME \\\r\n--image $IMAGE_NAME \\\r\n--registry-login-server $ACR_NAME.azurecr.io \\\r\n--registry-username $ACR_USERNAME \\\r\n--registry-password $ACR_PASSWORD \\\r\n--environment-variables \"${ENV_VARS[@]}\" \\\r\n--log-analytics-workspace \"$LOG_ANALYTICS_WORKSPACE_ID\" \\\r\n--log-analytics-workspace-key $LOG_ANALYTICS_WORKSPACE_KEY \\\r\n--azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \\\r\n--azure-file-volume-account-key $STORAGE_KEY \\\r\n--azure-file-volume-share-name $FILE_SHARE_NAME \\\r\n--azure-file-volume-mount-path $MOUNT_PATH\r\n```\r\n\r\naz container create \\\r\n--resource-group $RESOURCE_GROUP \\\r\n--name $CONTAINER_NAME \\\r\n--image stackql/oss-activity-monitor \\\r\n--environment-variables \"${ENV_VARS[@]}\" \\\r\n--log-analytics-workspace \"$LOG_ANALYTICS_WORKSPACE_ID\" \\\r\n--log-analytics-workspace-key $LOG_ANALYTICS_WORKSPACE_KEY \\\r\n--azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \\\r\n--azure-file-volume-account-key $STORAGE_KEY \\\r\n--azure-file-volume-share-name $FILE_SHARE_NAME \\\r\n--azure-file-volume-mount-path $MOUNT_PATH\r\n\r\n\r\naz container list \\\r\n--resource-group $RESOURCE_GROUP \\","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackql%2Foss-activity-monitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackql%2Foss-activity-monitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackql%2Foss-activity-monitor/lists"}