{"id":26121863,"url":"https://github.com/ipfs-shipyard/ecosystem-dashboard","last_synced_at":"2025-04-13T13:06:08.226Z","repository":{"id":37803074,"uuid":"239823871","full_name":"ipfs-shipyard/ecosystem-dashboard","owner":"ipfs-shipyard","description":"A dashboard for monitoring the ecosystem around an open source project.","archived":false,"fork":false,"pushed_at":"2025-04-11T11:15:53.000Z","size":2075,"stargazers_count":27,"open_issues_count":28,"forks_count":12,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-13T13:06:02.687Z","etag":null,"topics":["dashboard","website"],"latest_commit_sha":null,"homepage":"https://ipfs.ecosystem-dashboard.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipfs-shipyard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-02-11T17:34:30.000Z","updated_at":"2025-04-03T13:27:17.000Z","dependencies_parsed_at":"2022-06-22T18:01:44.482Z","dependency_job_id":"c19afe5e-5575-44b4-9d9c-93440a2e078a","html_url":"https://github.com/ipfs-shipyard/ecosystem-dashboard","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fecosystem-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fecosystem-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fecosystem-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fecosystem-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs-shipyard","download_url":"https://codeload.github.com/ipfs-shipyard/ecosystem-dashboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248717242,"owners_count":21150389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dashboard","website"],"created_at":"2025-03-10T14:37:03.558Z","updated_at":"2025-04-13T13:06:08.203Z","avatar_url":"https://github.com/ipfs-shipyard.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ecosystem Dashboard\n\nA [dashboard](https://ipfs.ecosystem-dashboard.com/) for monitoring the ecosystem around an open source project.\n\n## Features\n\n### Organizations\n\nMonitor activity across multiple organizations, both internal to your project and from external collaborators as well. For the IPFS project that means monitoring activity [internal orgs](https://ipfs.ecosystem-dashboard.com/orgs) from:\n\n- https://github.com/ipfs\n- https://github.com/libp2p\n- https://github.com/ipfs-shipyard\n- https://github.com/multiformats\n- https://github.com/ipld\n- https://github.com/protoschool\n- https://github.com/ipfs-cluster\n\nand [collaborator organizations](https://ipfs.ecosystem-dashboard.com/collabs) such as:\n\n- https://github.com/orbitdb\n- https://github.com/qri-io\n- https://github.com/filecoin-project\n- https://github.com/textileio\n- https://github.com/ethereum\n- and many more.\n\n### [Collaborators](https://ipfs.ecosystem-dashboard.com/collabs)\n\n[Collaborators](https://ipfs.ecosystem-dashboard.com/collabs) are a key feature of the ecosystem dashboard, many large open source projects have more incoming issues and pull requests than they can possibly handle and so being able to visualize and prioritise activity by people from organizations that have an existing relationship with the project is essential to keeping those collaborations running smoothly.\n\nYou can highlight any github organization as a collaborator and then any activity by members of that organization will be added to the various collaborator dashboard views. The public activity within collaborator organizations will also be monitored for discovering new contributors, package usage and searching for relevant issues and pull requests.\n\n### [Stats Overview](https://ipfs.ecosystem-dashboard.com/)\n\nA high level overview of recent community metrics across all internal organizations, compared to the previous period.\n\nFilterable by date range and internal organization.\n\n### [Issues + PRs](https://ipfs.ecosystem-dashboard.com/all)\n\n[Issues + PRs](https://ipfs.ecosystem-dashboard.com/all) shows all issues and pull requests that have been opened by everyone (excluding bots), by default filtered to the last 30 days.\n\nIt's helpful to give an overview of all new issues and pull requests across all internal organizations for triage.\n\nIssues and pull requests opened by Collaborators and Core contributors are highlighted.\n\nIt also includes a graph of how many new issues and pull requests were opened each day over the past month.\n\nThe most active contributors are also shown on the right sidebar.\n\nThis view is also filterable by the standard set of issue and pull request filters:\n\n- Author\n- State (open/closed)\n- Type (issue/pull request)\n- Repository\n- Org (internal github organizations)\n- Language (repository programming language)\n- Label\n- No Core Contributors response\n- Uncommented\n- No milestone\n- Unlabelled\n- Exclude core contributors\n- Date range\n- Sort (newest, oldest, recently updated, least recently updated)\n\n### [Slow Responses](https://ipfs.ecosystem-dashboard.com/slow_response)\n\nThe [Slow Responses](https://ipfs.ecosystem-dashboard.com/slow_response) page shows every internal issue and pull request that has not had a response from a core contributor within a reasonable time frame, which by default is 48 hours, over the past 7 days (plus the slow response window, so last 9 days by default).\n\nIt is helpful to give a view of all the issues and pull requests that have not been triaged by a core team member yet. Note that this does not mean all issues are expected to be fixed within 48 hours, but should have at least received some kind of response such as a comment, review or label.\n\nIt also shows a graph of the number of slow responses vs the number of new issues and pull requests for the week and a graph of the average response time per week over the past year.\n\nIssues and pull requests opened by Collaborators are highlighted.\n\nIssues and pull requests opened by core contributors are not included in this view.\n\nThe most active contributors and collaborators with slow responses are also shown on the right sidebar.\n\nThis view is also filterable by the standard set of issue and pull request filters:\n\n- Author\n- State (open/closed)\n- Type (issue/pull request)\n- Repository\n- Org (internal github organizations)\n- Language (repository programming language)\n- Label\n- Uncommented\n- No milestone\n- Unlabelled\n- Date range\n- Sort (newest, oldest, recently updated, least recently updated)\n\n### [Internal Repositories](https://ipfs.ecosystem-dashboard.com/repositories)\n\n[Internal Repositories](https://ipfs.ecosystem-dashboard.com/repositories) gives a filterable view of all active repositories across all your internal organizations.\n\nIt shows highlevel information such as:\n- name\n- description\n- organization\n- last pushed date and time\n- repo size\n- number of dependencies\n\nRepositories are also filterable by:\n- Organization\n- Main language\n- Source (not forked)\n- Forks\n- Active (not archived)\n- Archived\n\n### [Collab Repositories](https://ipfs.ecosystem-dashboard.com/collabs/repositories)\n\n[Collab Repositories](https://ipfs.ecosystem-dashboard.com/collabs/repositories) gives a filterable view of all active repositories across all your collaborators organizations.\n\nIt shows highlevel information such as:\n- name\n- description\n- organization\n- last pushed date and time\n- repo size\n- number of dependencies\n\nRepositories are also filterable by:\n- Organization\n- Main language\n- Source (not forked)\n- Forks\n- Active (not archived)\n- Archived\n\n### [Community Repositories](https://ipfs.ecosystem-dashboard.com/community/repositories)\n\n[Community Repositories](https://ipfs.ecosystem-dashboard.com/community/repositories) gives a filterable view of all repositories that depend on an internal package and don't belong to a collaborator.\n\nIt shows highlevel information such as:\n- name\n- description\n- organization\n- last pushed date and time\n- repo size\n- number of dependencies\n\nRepositories are also filterable by:\n- Organization\n- Main language\n- Source (not forked)\n- Forks\n- Active (not archived)\n- Archived\n\n### [Events](https://ipfs.ecosystem-dashboard.com/events)\n\nThe [Events](https://ipfs.ecosystem-dashboard.com/events) view is a list of all types of public github activities across all internal organizations, including:\n\n- Issue Comments\n- Pushes\n- Stars\n- Pull Requests\n- Review Comments\n- Issues\n- Branches created\n- Forks\n- Branches delete\n- Releases\n- Members added\n- Commit Comments\n- Repositories Open Sourced\n- Wiki updates\n\nEvents are also filterable by:\n- Organization\n- Repository\n- User\n- Type\n\n### [Collabs Events](https://ipfs.ecosystem-dashboard.com/collabs/events)\n\nThe [Collabs Events](https://ipfs.ecosystem-dashboard.com/collabs/events) view is a list of all types of public github activities across all collaborator organizations, including:\n\n- Issue Comments\n- Pushes\n- Stars\n- Pull Requests\n- Review Comments\n- Issues\n- Branches created\n- Forks\n- Branches delete\n- Releases\n- Members added\n- Commit Comments\n- Repositories Open Sourced\n- Wiki updates\n\nEvents are also filterable by:\n- Organization\n- Repository\n- User\n- Type\n\n### [Packages](https://ipfs.ecosystem-dashboard.com/packages)\n\nThe [Packages](https://ipfs.ecosystem-dashboard.com/packages) view is a list of all internal packages that have been published from internal repositories.\n\nFor each package it shows:\n- name\n- platform (package manager)\n- description\n- latest release number\n- Dependent collab repositories\n- org icon\n\nIt also has a basic package search function.\n\nPackages are filterable by:\n- Organization\n- Platform (package manager)\n\n### [Collabs Packages](https://ipfs.ecosystem-dashboard.com/collabs/packages)\n\nThe [Collabs Packages](https://ipfs.ecosystem-dashboard.com/collabs/packages) view is a list of all packages owned by collaborator that have been published from collaborator repositories.\n\nFor each package it shows:\n- name\n- platform (package manager)\n- description\n- latest release number\n- Dependent collab repositories\n- org icon\n\n\n### [Community Packages](https://ipfs.ecosystem-dashboard.com/community/packages)\n\nThe [Packages](https://ipfs.ecosystem-dashboard.com/collabs/packages) view is a list of all packages found on a package registry (npmjs.org, crates.io etc) that depend on an internal package and don't belong to a collaborator.\n\nFor each package it shows:\n- name\n- platform (package manager)\n- description\n- latest release number\n- Dependent collab repositories\n- owner icon\n\n## Data model\n\nThe core data model of the dashboard is organized around a number of key entities, these can be sliced and diced to produce various dashboards, reports and other useful tools for investigating the ecosystem around an open source project.\n\n### Organizations\n\nThe dashboard is configured primarily around one or more github organizations that host the main open source project. For example, IPFS and related projects are hosted in a number of github orgs: [IPFS](https://github.com/ipfs), [IPFS Shipyard](https://github.com/ipfs-shipyard) and others. In general the internal organizations will be configured in initial setup and won't change regularly.\n\nThese organizations are called \"Internal Organizations\" in the dashboard schema, where `internal` is `true`. In code they can be loaded with the `internal` scope, for example: `Organization.internal.all`.\n\nCollaborator organizations are the primary way of configuring contributors and projects that are closely related to the primary open source project.\n\nCollaborator organizations are stored in the database with `collaborator` set to `true`. In code they can be loaded with the `collaborator` scope, for example: `Organization.collaborator.all`.\n\nIt's expected that new collaborator orgs will be added on a regular basis, and possibly even having some removed.\n\n### Repositories\n\nOrganizations have many repositories, the dashboard will attempt to download all public repositories for each org and them monitor them for new activity and updates.\n\nRepositories that belong to internal organizations can be found with the `internal` scope: `Repository.internal.all`\n\nRepositories that belong to collaborator organizations can be found with the `collaborator` scope: `Repository.collaborator.all`\n\nRepositories that belong don't belong to either collaborators or internal organizations can be found with the `community` scope: `Repository.community.all`\n\n### Events\n\nTODO\n\n### Issues\n\nTODO\n\n### Core Contributors and Bots\n\nTODO\n\n### Packages, Versions and Dependencies\n\nTODO\n\n### Manifests and Repository Dependencies\n\nTODO\n\n\n\n## Setup instructions\n\nWant to hack on the website? Awesome!\n\nNew to Ruby? No worries! You can follow these instructions to install a local server.\n\n#### Installing a Local Server\n\nIf you're on a Debian-based distro, you'll need some dependencies:\n\n```\nsudo apt install build-essential cmake pkg-config nodejs\n```\n\nFirst things first, you'll need to install Ruby 3.3.6. I recommend using the excellent [rbenv](https://github.com/rbenv/rbenv),\nand [ruby-build](https://github.com/rbenv/ruby-build).\n\n```bash\nrbenv install 3.3.6\nrbenv global 3.3.6\n```\n\nNext, you'll need to make sure that you have PostgreSQL installed. This can be\ndone easily on OSX using [Homebrew](http://mxcl.github.io/homebrew/) or by using [http://postgresapp.com](http://postgresapp.com). Please see these [further instructions for installing Postgres via Homebrew](http://www.mikeball.us/blog/setting-up-postgres-with-homebrew/).\n\n```bash\nbrew install postgres\n```\n\nOn Debian-based Linux distributions you can use apt-get to install Postgres:\n\n```bash\nsudo apt install postgresql postgresql-contrib libpq-dev\n```\n\nOn Windows, you can use the [Chocolatey package manager](http://chocolatey.org/) to install Postgres:\n\n```bash\nchoco install postgresql\n```\n\nClone this repository:\n\n```bash\ngit clone git@github.com:ipfs-shipyard/ecosystem-dashboard.git\n```\n\nNow, let's install the gems from the `Gemfile` (\"Gems\" are synonymous with libraries in other\nlanguages).\n\n```bash\ngem install bundler \u0026\u0026 rbenv rehash\nbundle install\n```\n\nOnce all the gems are installed, we'll need to create the databases and\ntables. Rails makes this easy through the use of \"Rake\" tasks.\n\n```bash\nbundle exec rake db:create:all\nbundle exec rake db:migrate\n```\n\nAlmost there! Now all we have to do is start up the Rails server and point\nour browser to \u003chttp://localhost:3000\u003e\n\n```bash\nbundle exec rails s\n```\n\n### Deployment\n\nTODO\n\n### Cron\n\nTo keep all data fresh, regular background tasks are provided that can be ran on a regular basis to find and update issues, repositories and packages.\n\nSuggested regular background rake tasks:\n\n| Command | Frequency |\n|---------|-----------|\n|`bundle exec rake issues:sync_recent` | Every 10 minutes |\n|`bundle exec rake search:run_all` | Every 10 minutes |\n|`bundle exec rake issues:sync_collabs` | Hourly |\n|`bundle exec rake packages:sync` | Hourly |\n|`bundle exec rake repositories:sync` | Hourly |\n|`bundle exec rake issues:sync_daily` | Daily |\n|`bundle exec rake packages:find_missing_package_repos` | Daily |\n|`bundle exec rake packages:find_missing_npm_packages` | Daily\t |\n|`bundle exec rake packages:find_dependent_github_repos` | Daily |\n|`bundle exec rake packages:sync_internal` | Daily\t |\n|`bundle exec rake repositories:discover_from_search_results` | Daily |\n|`bundle exec rake repositories:recalculate_scores` | Daily |\n\n\n### Configuring organizations\n\nTODO\n\nAccess the console with `$ bundle exec rails console` then you can create organizations with the following code replace GITHUB_ORG_NAME with your internal organization github name:\n\n```\norg = Organization.create(name: GITHUB_ORG_NAME, internal: true)\norg.import\n```\n\n### Configuring collabs\n\nAccess the console with `$ bundle exec rails console` then you can create collaborator organizations with the following code replace GITHUB_ORG_NAME with the github name of the collaborator:\n\n```\norg = Organization.create(name: GITHUB_ORG_NAME, collaborator: true)\norg.import\n```\n\n### Configuring core contributors\n\nAfter creating all of your internal organizations, access the console with `$ bundle exec rails console` and then run the following code to automatically detect all the core contributors in those organizations:\n\n```\nOrganization.internal.each(\u0026:guess_core_contributors)\n```\n\n### Configuring bots\n\nAfter creating all of your internal organizations, access the console with `$ bundle exec rails console` and then run the following code to automatically detect all the bots that contribute in those organizations:\n\n```\nOrganization.internal.each(\u0026:guess_bots)\n```\n\n## License\n\nCopyright (c) Protocol Labs, Inc.\n\nThis package is dual-licensed under Apache 2.0 and MIT terms:\n\n- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-shipyard%2Fecosystem-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipfs-shipyard%2Fecosystem-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-shipyard%2Fecosystem-dashboard/lists"}