User {
string username;
string firstname;
string lastname;
string email;
string avatar_url;
string mobile;
bool is_admin;
bool enabled;
}
HealthCheckTemplate {
string name; # e.g. "tcp-connect", "smtp", "http", "redis", or ...
text code; # ruby code block to execute
int interval; # run check every N secs
int timeout; # treat check as failed if it runs longer then N secs
}
HealthCheck {
Service service;
text code; # ruby code block to execute
int interval; # run check every N secs
int timeout; # treat check as failed if it runs longer then N secs
}
Service {
string name;
string display_name;
string docker_image; # such as example/myapp
string github_url; # Github project URL
Service[] dependencies; # hard dependencies
Service[] uses; # soft dependencies (system still up when failing
# but degraded)
Feature[] implements; # list of features this service [partially] implements
}
# an abstract entity to give a highlevel overview of what is failing due to
# a downtime
Feature {
string display_name; # e.g. "Cart Checkout", or "Product Show Page"
Service[] dependencies; # list of services used to implement this feature
}
Environment {
string name; # such as production, jail1, staging1, staging2, ...
string display_name;
Instance[] instances; # list of service instances currently running
Cluster cluster; # the reource cluster this env is running on
}
Instance {
User author;
Environment env;
Service service;
string docker_tag;
string release_message;
int instance_count;
InstanceLocation[] locations;
}
# and if mesos/marathon can provide us the info on which HW node it spawned
# our services, we can list them, too.
# (which we need for individual health checks)
InstanceLocation {
string hostname;
int port;
}
Cluster {
string type; # such as: "marathon"
string ip;
int port;
Environment[] envs;
}
Configuration {
string github_org;
string github_client_id;
string github_client_secret;
string marathon_ip;
int marathon_port;
}