{"id":13528200,"url":"https://github.com/vmware-archive/projectmonitor","last_synced_at":"2025-12-17T23:26:04.094Z","repository":{"id":3025285,"uuid":"4045165","full_name":"vmware-archive/projectmonitor","owner":"vmware-archive","description":"Big Visible Chart CI aggregator","archived":true,"fork":false,"pushed_at":"2022-03-24T16:13:21.000Z","size":45138,"stargazers_count":428,"open_issues_count":22,"forks_count":120,"subscribers_count":48,"default_branch":"master","last_synced_at":"2024-12-19T00:04:38.293Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://ci.pivotallabs.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vmware-archive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-04-16T20:33:46.000Z","updated_at":"2024-11-19T15:07:13.000Z","dependencies_parsed_at":"2022-09-04T18:22:28.408Z","dependency_job_id":null,"html_url":"https://github.com/vmware-archive/projectmonitor","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vmware-archive%2Fprojectmonitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vmware-archive%2Fprojectmonitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vmware-archive%2Fprojectmonitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vmware-archive%2Fprojectmonitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vmware-archive","download_url":"https://codeload.github.com/vmware-archive/projectmonitor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246631784,"owners_count":20808753,"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":[],"created_at":"2024-08-01T06:02:17.850Z","updated_at":"2025-12-17T23:25:59.039Z","avatar_url":"https://github.com/vmware-archive.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"Description [![Build Status](https://secure.travis-ci.org/pivotal-legacy/projectmonitor.png?branch=master)](http://travis-ci.org/pivotal-legacy/projectmonitor) [![Code Climate](https://codeclimate.com/github/pivotal/projectmonitor.png)](https://codeclimate.com/github/pivotal/projectmonitor)\n===========\n\nProjectMonitor is a CI display aggregator. It displays the status of multiple\nContinuous Integration builds on a single web page.  The intent is that you\ndisplay the page on a big screen monitor or TV so that the status of all your\nprojects' builds are highly visible/glanceable (a \"Big Visible Chart\").\nProjectMonitor currently supports:\n\n  * [CircleCI](http://circleci.com)\n  * [Codeship](https://www.codeship.io/)\n  * [Concourse](http://concourse.ci/)\n  * [Cruise Control](http://cruisecontrolrb.thoughtworks.com/)\n  * [Jenkins](http://jenkins-ci.org/)\n  * [Semaphore](http://www.semaphoreci.com/)\n  * [Solano CI (formerly loved as tddium)](http://solanolabs.com/)\n  * [TeamCity](http://www.jetbrains.com/teamcity/)\n  * [Travis CI](http://travis-ci.org/)\n  * [Travis CI Pro](http://travis-ci.com/)\n\nWe use ProjectMonitor internally at Pivotal Labs to display the status of the\nbuilds for all our client projects. We also have an instance of ProjectMonitor\nrunning at [ci.pivotallabs.com](http://ci.pivotallabs.com) that we use for\ndisplaying the status of the builds of various open source projects - both of\nprojects Pivotal Labs maintains (such as Jasmine) and of non-Pivotal projects\n(such as Rails).\n\n[![](http://f.cl.ly/items/2R2U392y1D2B033I0z3J/Screen%20Shot%202013-04-02%20at%208.27.44%20PM.png)](http://ci.pivotallabs.com)\n\nIn practice, ProjectMonitor is often displayed on publicly-viewable monitors mounted to the wall. This provides transparency into the health of the build(s) that entire team can see at a glance. When a build goes red (fails), the next person or pair to finish their story can take a look at what broke before starting new work. If a build goes red a lot over a period of time, it can prompt a conversation about what isn't working.\n\n![ProjectMonitor in use](http://i.imgur.com/HRy31hX.jpg)\n\n## Table of Contents\n\n1. [Installation](#installation)\n2. [Custom Configuration](#custom-configuration)\n3. [In-app Configuration](#in-app-configuration)\n4. [Deployment](#deployment)\n5. [Ideas and Improvements](#ideas-and-improvements)\n\n## Linked Documents\n\n1. [Upgrading to Devise](docs/upgrading_to_devise.md)\n2. [Adding a Project](docs/adding\\_a\\_project.md)\n3. [Displaying Your Project's Status](docs/displaying\\_your\\_projects\\_status.md)\n\n## Installation\n\n### Get the code\nTo get the code, execute the following:\n\n    git clone git://github.com/pivotal/projectmonitor.git\n    cd projectmonitor\n    \n### Get Docker\nProjectMonitor provides a one-line setup using Docker\n\nDownload and install docker from [the official Docker website](https://docs.docker.com/install/)\n\n### Run the app locally with the default configuration\n\n\tdocker run -p 3000:3000 -v `pwd`:/projectmonitor pivotaliad/project-monitor \\\n\tbash -c \"cd projectmonitor \u0026\u0026 bundle install \u0026\u0026 RAILS_ENV=development rake local:start\"\n\nThe app will be available at: [http://0.0.0.0:3000](http://0.0.0.0:3000)\n\nAdd a user: \n\n\tdocker exec CONTAINER_ID_OR_NAME \\\n\tbash -c 'cd projectmonitor \u0026\u0026 \\\n\techo \"User.create!(login: \\\"jane\\\", name: \\\"Jane Martinez\\\", email: \\\"jmartinez@example.com\\\", password: \\\"password\\\")\" | \\\n\trails c development'\n\nTo stop: `docker kill \u003ccontainer-id\u003e`\n\n### Local development\n\tdocker run -it -p 3000:3000 -v `pwd`:/projectmonitor pivotaliad/project-monitor\n\nInside the container run:\n\t\n\tbundle install\n\nTo run tests:\n   \n\trake local:test\n\t\nsee [Custom Configuration](#custom-configuration) for DB setup\n\n## Custom configuration\n\n### Set up the database\nYou'll need a database. Create it with whatever name you want. For defaults, copy `database.yml.example` to `database.yml`.  Edit the\nproduction environment configuration so it's right for your database:\n\nFirst, get the defaults copied:\n\n    cp config/database.yml.example config/database.yml\n\nEdit the defaults in `config/database.yml`\n\nCreate the db and set the tables:\n\n    RAILS_ENV=production rake db:create\n    RAILS_ENV=production rake db:migrate\n\n### Authentication support\n#### IP Whitelist\nIf you want to use Webhooks, your ProjectMonitor instance will need to be located on a\npublicly accessible server. If you don't want your ProjectMonitor dashboard to also be\npublicly accessible, you can whitelist access by IP address.\n\nThe whitelist is disabled by default, but can be enabled by uncommenting the \"ip_whitelist\" property\nin settings.yml and adding a list of IP addresses to whitelist. If you're running ProjectMonitor\nbehind a load balancer (e.g. on a hosted provider such as Heroku), you'll probably want to set\n\"ip_whitelist_request_proxied\" to true. See settings.yml for more documentation.\n\n#### Password authentication\nProject monitor uses [Devise](https://github.com/plataformatec/devise) to provide both database backed authentication and\nGoogle OAuth2 logins.\n\nRegular password authentication for managing project settings is enabled by default. \nRun `rake db:seed` with the environment variables `PROJECT_MONITOR_LOGIN`, `PROJECT_MONITOR_EMAIL` and\n`PROJECT_MONITOR_PASSWORD` set to create a new account.\n\nTo switch off password auth, set `password_auth_enabled` setting to `false`. To ensure strong\npassword encryption you should adjust the value for `password_auth_pepper` and\n`password_auth_stretches` appropriately.\n\n#### Google OAuth2 setup\nTo use Google OAuth2 authentication you need Google apps set up for your domain\nand the following configuration options specified:\n\n    oauth2_enabled: true\n    oauth2_apphost: 'MY_APP_ID'\n    oauth2_secret: 'MY_SECRET'\n\n### Setup Cron with Whenever\nWe have included a sample whenever gem config in config/schedule.rb. Refer to\nthe [whenever documentation](https://github.com/javan/whenever) for instructions\non how to integrate it with your deployment. Refer to [Heroku scheduler documentation](https://devcenter.heroku.com/articles/scheduler) for instructions\non how to integrate the rake task with your Heroku deployment.\n\nThe default schedule clears log entries and cleans up unused tags daily, and fetches project statuses every 3 minutes.\n\nThe fetch project task is what goes out and hits the individual builds. We find\nthat if you do this too frequently it can swamp the builds. On the other hand,\nyou don't want ProjectMonitor displaying stale information. At Pivotal we set\nit up to run every 3 minutes.\n\n### Start workers\nThe cron job above will add jobs to the queue, which workers will execute.  To\nstart running the workers, use the following command:\n\n    rake start_workers\n\nThe default number of workers is 2, but if you wanted 3 you would call it like this:\n\n    rake start_workers[3]\n\nThese workers need only be started once per system reboot, and must be running\nfor your project statuses to update.  To stop the workers, run this command:\n\n    rake stop_workers\n\nThe workers are implemented using the [delayed_job\ngem](http://github.com/collectiveidea/delayed_job).  The workers are configured\nto have a maximum timeout of 1 minute when polling project status.  If you want\nto change this setting, you can edit `config/initializers/delayed_job_config.rb`\n\n### Start the application\nExecute:\n\n    nohup rails server -e production \u0026\u003e projectmonitor.log\n\n### Next Steps\n\nNow you need to add a project or two! Keep reading the *In-app Configuration* section for instructions.\n\n## In-app Configuration\n\nEach build that you want ProjectMonitor to display is called a \"project\" in\nProjectMonitor. You can log in to set up projects by clicking the \"Manage Projects\"\nlink in the bottom-right corner of the main ProjectMonitor screen. You can either\ncreate a user using the console as follows:\n\n    rails c production\n    User.create!(login: 'john', name: 'John Doe', email: 'jdoe@example.com', password: 'password')\n\nOr, if you have set up Google OAuth2 as per above, you can simply log in with Google to create a new user account.\n\n### Admin Interface\n\nClick 'manage projects' at the lower right to edit project details.\n\n### Add Projects\n\nWe have instructions detailing [how to add a project](docs/adding_a_project.md).\n\n### Importing and Exporting Configurations\nYou can export your configuration for posterity or to be transferred to another\nhost:\n\n    rake projectmonitor:export \u003e ${your_configuration.yml}\n\nOr using heroku:\n\n    heroku run rake projectmonitor:export --app projectmonitor-staging \u003e ${your_configuration.yml}\n\nOr you can download it using the configuration endpoint, using curl (or your web browser):\n\n    curl --user ${username}:${password} ${your_project_monitor_host}/configuration \u003e ${your_configuration.yml}\n\nNOTE: That heroku doesn't treat STDERR and STDOUT differently so you may get\nsome warnings at the beginning of the generated file that you'll have to remove\nmanually.\n\nIt can be imported in a similar way:\n\n    rake projectmonitor:import \u003c ${your_configuration.yml}\n\nOn heroku or another host which doesn't allow you to directly load files or\nread from stdin, you'll need to post the file to the configuration endpoint\nlike so:\n\n    curl --user ${username}:${password} -F \"content=@-\" ${your_project_monitor_host}/configuration \u003c ${your_configuration.yml}\n\n## Deployment\n\n### Cloud Foundry\nProjectMonitor requires a database that can handle more than 4 concurrent connections, otherwise occasional errors might pop up.\n\nCreate a CF space and add a db service named `rails-mysql`\n\nThe default way to deploy to CF is using the attached [concourse](https://concourse-ci.org/) pipeline. Follow the concourse installation steps to setup concourse-ci.\n\ncreate a credentials yml at `concourse/projectmonitor-production-credentials.yml`\n\npopulate it with \n\n\tapi-endpoint: \u003creplace with CF api endpoint ex: api.run.cfapps.io\u003e\n\tcf-username: \u003creplace with CF username\u003e\n\tcf-password: \u003creplace with CF password\u003e\n\tcf-org: \u003creplace with CF organization name\u003e\n\tcf-space: \u003creplace with CF space name\u003e\n\nSet the pipilene: \n\n\tfly set-pipeline -c concourse/projectmonitor-production-pipeline.yml -p PIPELINE_NAME \\\n\t-l concourse/projectmonitor-production-credentials.yml -t TARGET_NAME\n\t\nThe pipeline will deploy the latest stable version with default configuration every time it is updated.\n\nAdd a user once deployed:\n\n\tcf ssh project-monitor-web -t -c \"/tmp/lifecycle/launcher /home/vcap/app 'rails c' ''\"\n\tUser.create!(login: 'jane', name: 'Jane Martinez', email: 'jmartinez@example.com', password: 'password')\n\t\nFor manual CF deployment:\n\n```\ncf target -s SPACE -o ORG\ncf create-service DB_SERVICE DB_SERVICE_PLAN rails-mysql\ncf push\n```\n\n### Heroku\nTo get running on Heroku, after you have cloned and bundled, run the following commands:\n\nNB: These instructions are for the basic authentication strategy.\n\n    heroku create\n    git push heroku master\n    heroku run rake db:migrate\n    heroku config:add REST_AUTH_SITE_KEY=\u003cunique, private and long alphanumeric key, e.g. abcd1234edfg78910\u003e\n    heroku config:add REST_AUTH_DIGEST_STRETCHES=\u003ccount of number of times to apply the digest, 10 recommended\u003e\n    heroku run console\n\nWhen inside the console, run the creating a new user step above. You should then be able to access your server and start using it.\n\n## Ideas and Improvements\nGot a burning idea that just needs to be implemented? Check the CONTRIBUTE.md file for help getting started. Join the google group and share your ideas with the team.\n\nThe google group for Project Monitor is [projectmonitor_pivotallabs](http://groups.google.com/group/projectmonitor_pivotallabs)\n\nCopyright (c) 2018 Pivotal Labs. This software is licensed under the MIT License.\n\n\n[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/pivotal/projectmonitor/trend.png)](https://bitdeli.com/free \"Bitdeli Badge\")\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvmware-archive%2Fprojectmonitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvmware-archive%2Fprojectmonitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvmware-archive%2Fprojectmonitor/lists"}