Airwatch is an open web application that consumes data from the AirNow API (https://docs.airnowapi.org/Data/query) and allows a visitor to view the reported events on a map.
Type | URL |
---|---|
Release ☀️ | http://airwatch-proxy.airwatch-stack.sjmatta.svc.tutum.io/ |
Master Branch 🚀 | http://airwatch-proxy-snapshot.airwatch-stack-snapshot.sjmatta.svc.tutum.io/ |
- DevOps and Project Lead: sjmatta
- Developer: treyyoder
- Senior Software Consultant and Scrum Master: etrudeau
Our development process requires selection of a project lead to run the project. This individual is ultimately responsible for project success and product quality. A senior software consultant assists by coaching the team during sprint planning, daily scrums, and independent reviews. On most projects, DevOps would be a separate team member, but due to the small size of this project, the lead handles the DevOps setup and tweaks. We conduct code review directly in GitHub through comments and issues and in our Slack collaboration environment. Issues are automatically synced with Waffle.io Agile boards.
Airwatch is built on Meteor.js and MongoDB using Leaflet and OpenStreetMaps as the mapping layer and map provider, with Twitter Bootstrap as the CSS framework. We leverage CircleCI for continuous integration. The app is deployed in a Docker container hosted on DigitalOcean. We leverage Tutum to manage the Docker container on DigitalOcean.
Most of the technologies in Airwatch are free and open source. However, several tools used in the development process are only free to use on open source projects. These include Tutum, CircleCI, and NewRelic. The software licensing is as follows:
- Meteor: MIT
- Jasmine: MIT
- Leaflet: BSD
- MongoDB: GNU AGPL v3.0
- OpenStreetMap: ODbL
- HAProxy: GPL v2.0
- Docker: Apache 2.0
- Twitter Bootstrap: MIT
Use of Airwatch is limited by the licensing of its component parts. The Airwatch source code is licensed under GPL v3.0.
Automated continuous integration and deployment is managed through CircleCI. On commit to the Master branch, the code is automatically deployed to Docker Hub. Tutum describes the container configuration, layout, and relationships, and automatically downloads/starts the Docker containers on a node at DigitalOcean.
For additional details, please see the wiki.
Configuration for the app (Meteor in .meteor), CircleCI (circle.yml), and Tutum (tutum.yml) are managed through their respective config files in the repo. Confidential information (passwords, etc.) are stored as environmental variables in CircleCI and aren't available in GitHub.
The release containers are monitored by New Relic. The Tutum stack consists of 2 HAProxy (http://www.haproxy.org/) containers -- one for production/release, and one for the master branch, doing round robin load balancing to 4 Airwatch containers. Each set of 2 Airwatch containers share a MongoDB container. Two New Relic containers monitor half of the running containers each.
Unit tests are written using Jasmine and run using the Velocity test runner for Meteor. CircleCI runs the unit tests as part of the build/deploy process. See the Development section to run the unit tests.
- Install Meteor
- Clone this project
cd
into the project directory- Optionally run unit tests:
meteor --test
- Run the project:
meteor
- Go to http://localhost:3000/
There are several ways to run the application. You can use the badge above to create the Tutum stack (some environmental variables required), follow the instructions in the Development section, or launch the Docker container with the directions below:
- Set the following environmental variable
- SSL_CERT: Base64-encoded DER private key and certificate, all on one line, with the text
\n
replacing line separators
- Launch the required Mongo database:
docker run -d --name mongo mongo
- Launch the Airwatch container:
docker run -d --name airwatch --link mongo:mongo -e ROOT_URL=http://localhost -p 80:80 ditinc/airwatch
- Navigate to http://localhost/
Hot Air Balloon graphic by Freepik from Flaticon is licensed under CC BY 3.0. Made with Logo Maker