Distributed DigitalOcean droplet auto-healing built on top of democracy.js.
npm install healthcarenpm install healthcareyarn add healthcare``javascript
const Healthcare = require('healthcare');
// Setup the healthcare.
const healthcare = new Healthcare({
key: '...',
tag: 'healthcare',
interval: 5000,
timeout: 30000,
});
// Initialize the healthcare system and setup the groups.
healthcare.init().then(() => {
// Setup the test server group.
healthcare.group({
tags: ['ENV:Test', 'TYPE:Test'],
size: 2,
config: {
name: 'TEST',
region: 'nyc3',
size: 's-1vcpu-1gb',
image: 'ubuntu-16-04-x64',
ssh_keys: ['...'],
backups: false,
ipv6: false,
private_networking: true,
user_data: '',
monitoring: true,
tags: ['ENV:Test', 'TYPE:Test', 'healthcare'],
},
});
});
`
javascript
new Healthcare({
key: 'API KEY', // Your DigitalOcean API key.
tag: 'healthcare', // All servers with this tag will be auto-discovered and managed by the matching groups.
timeout: 60000, // How long a peer must go without sending a hello to be considered down.
interval: 10000, // The interval (ms) at which hello heartbeats are sent to the other peers.
port: 12345, // The port that democracy.js will listen on for health checks (this is over UDP).
});
`$3
#### init()
Sets up the "healthcare system" by discovering all of the DigitalOcean servers with the matching tag. Everything else must happen inside of the returned promise.
#### group({tags = [], size = 1, floatingIp = '', config = {}})
Initialize a new group of servers. Prvide a list of tags to identify the group with, a size for the number of servers and a config to build the new servers with.You can also optionally include a
floatingIp for the group. If this is provided, this IP will always be assigned to the current master server (useful for a cluster of load balancers for example).Server config uses the following format:
`javascript
{
name: 'NAME', // This is a base name and is appended with a unique ID.
region: 'nyc3', // The slug identifier for the region to build the server.
size: 's-1vcpu-1gb', The slug identifier for the Droplet size.
image: 'ubuntu-16-04-x64', The image ID of a private image or slug identifier of a public.
ssh_keys: [], An array of SSH key IDs or fingerprints.
backups: false, // Whether or not to enable backups.
ipv6: false, // Whether or not to enable ipv6 networking.
private_networking: true, // Whether or not to enable private networking.
user_data: '', // Bash script string to run on server creation.
monitoring: true, // Whether or not to enable monitoring on server.
volumes: [], An array of the string identifier for each block storage volume to attach.
tags: ['healthcare'], // Tags to add to the server.
}
``Released under the MIT License.