A sleek and smart infrastructure mapping and monitoring tool by Zalando.
npm install systemapp
|1||downloads in the last week|
|3||downloads in the last month|
|Version||0.7.0 last updated 3 months ago|
|License||Apache License 2.0|
|Keywords||auditing, diagram, infrastructure, mapping, monitoring, nagios, network, server, svg, system|
|Dependencies (10)||async, coffee-script, connect-flash, expresser, lodash, moment, passport, passport-http, passport-ldapauth, socket.io|
System App by Zalando
Official homepage: http://systemapp.io
Blog post: http://tech.zalando.com/meet-the-system-app
The System App is a sleek, smart and open-source IT mapping and monitoring tool by Zalando. Please note that it is still in BETA so some features are not yet fully implemented, although it's quite usable in its current state.
Full documentation can be found under the
/docs directory of the app.
The final 1.0.0 version is expected to be ready by Summer 2013.
What's still not ready for prime time?
Sooner than later
- Better and smarter auto completion when editing shape labels.
- Auto completion when editing Audit Event rules (just like on shape labels).
- Self-healing features - app will self diagnose in case too many errors are triggered.
Not so soon
- Better and more stable sync of data using Socket.IO instead of AJAX calls.
- External API with HTTP webhooks. The current API is for internal use only.
- Undo and redo of actions especially when editing maps.
- Support for multiple users editing a map at the same time, or at least map locking when there's someone editing it already.
Felling lazy? Simply run the
./install.sh script and it will try to do all the hard work for you.
It should work on Linux and OS X.
- Download the
./install.shand save it on the directory where you want to install the System App.
$ wget https://raw.github.com/zalando/system/master/install.sh
- Make it executable.
$ chmod +x install.sh
- Run it and hope for the best :-)
The script should tell you what's missing and ask if you want to install the missing dependencies.
If the install script doesn't work or if you prefer to do stuff manually, please make sure you have installed on your system:
To install Node.js on Linux: http://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
MongoDB can be downloaded from: http://www.mongodb.org/downloads
ImageMagick is necessary to generate map thumbnails. The app will actually run without it, but then you won't have a "preview" of each map on the start screen. To download ImageMagick: http://www.imagemagick.org/script/binary-releases.php
Required Node.js modules
package.json file for details on dependencies.
The easiest way to get these is by running NPM update:
$ npm update
Please note that all modules will be installed locally under the
Avoiding MongoDB installation
Configuring the server
All basic server configuration settings are located on the file
If you want to override settings, please create or edit the
settings.json file with
the properties and values to be overriden.
Detailed instructions are available on on the top of the
The following settings will need your attention:
appTitle- The app title, default is "System App". You can use something like "MyCompany System".
debug- Enable debbuging logs. This should be set to false before you deploy the app to production!
connString- The MongoDB connection string. Default is host "localhost", database "systemapp".
port- The port used by the Node.js server, default is 3003.
paas- Set to true if you're deploying to common PaaS services. More info below.
port- The port used by the Node.js server, default is 3003.
userPasswordKey- The secret key/token used to encrypt passwords on the database.
Deploying to PaaS
The System App can be easily deployed to AppFog, OpenShift and Heroku. The only requirement is
that you set
web.paas to true (it is true by default). In this case we'll override a few
settings to cope with the PaaS environment. For example:
- the web
portwill be automatically set so it doesn't matter what value you have entered.
- if your app on AppFog has a MongoDB bound to it, the
connStringwill be automatically set.
- it will use Logentries for logging if you have enabled it on your AppFog account.
Starting the server
To start the System App:
$ node index.js
This will start Node.js under the port 3003 (or whatever port you have set on the server settings).
Production vs. Debugging
By default Node.js will run in "Debug mode". If you're deploying and running on production,
you must set the
NODE_ENV to "production" to avoid having all the debugging statements
logged to the console. Putting it simple:
$ NODE_ENV=production node index.js
Running the server forever
If you want the server to run like a service (so it restarts itself in case of crash / error / termination) we recommend using the node module forever. You can install it using NPM like this:
$ sudo npm install -g forever
To start the SYstem App using forever, run it under the app root folder:
$ forever start -c node index.js
To make things easier to understand:
- All customizable client settings are available on the SystemApp.Settings object, at the
- Terms, validation and error messages are set under the SystemApp.Messages object, file
- URL routes are set under a SystemApp.Routes object, file
Having experience with the aforementioned libraries is not strictly necessary, but highly desirable in case you want to customize the System App's code.
Models and collections
Models won't inherit directly from Backbone.Model. Instead we're using our own
which extends Backbone's model with special methods like
generateId, etc. Same thing
for collections, which should inherit from
All models are located under the folder
/assets/js/models, and each model has its own specific collection
implemented at the end of the same file.
The views are composed of:
- HTML template using Jade, folder
- CSS styles using Stylus, folder
- View controllers implemented with CoffeeScript, folder
Just like models and collections, the app has its own
which extends Backbone's view with extra helpers and utilities.
The System App uses MongoDB to store its data, having the following collections:
- map - stores all maps (Map model) including their referenced shapes (Shape model) and links (Link model).
- entity - store entity schemas (EntityDefinition model) and data (EntityObject model).
- auditdata - store all audit data definitions and data (AuditData model).
- auditevent - store all audit events and alerts (AuditEvent model).
- variable - stores custom JS variables (Variable model) created by users.
- user - stores uses (User model) and their associated roles.
- log - logs all updates, inserts and deletes on the collections above.
The "log" collection is there for increased security and damage control. All updates, inserts
and deletions are logged there, and these records stay saved for 2 hours by default - you can
change this setting on the server's
Issues should be posted on the Issues section on our GitHub project page: https://github.com/zalando/system/issues