strong-mesh-client

strong-mesh-client

Usage no npm install needed!

<script type="module">
  import strongMeshClient from 'https://cdn.skypack.dev/strong-mesh-client';
</script>

README

strong-mesh-client

Background

This module provides a node.js and browser client that interacts with a set of strong-pm APIs.

Usage

Node.js

Below is an example setting up the mesh client for use in node.js.

var mesh = MeshClient.create('/path/to/config/file.json', {
  interval: 2000
});

mesh.ManagerHost.create({host: 'foo.com', port: 3000});

Browser + Proxy

First mount the proxy as an express middleware / route handler.

// app => an express / loopback app
var meshProxy = require('strong-mesh-client/proxy/server')('/path/to/config/file.json', {
  interval: 2000
});

app.use('/path/to/proxy', meshProxy.middleware(app));

Add the client script.

<script src="/path/to/proxy/client.js"></script>

Interact with mesh from the browser via the proxy.

var mesh = require('strong-mesh-client')('http://localhost:3000');;

// get notifications when hosts change
mesh.notifications.on('host changed', function() {
  mesh.ManagerHost.find(function(err, hosts) {
    $scope.hosts = hosts;
    $scope.$apply();
  });
});

// adding a host to the manager (that is a PM)
mesh.ManagerHost.create({
  host: '...',
  port: ...
}, function(err, inst) {
  // host added
});

// delete from the config
ManagerHost.deleteById('...', cb);

// perform an action on a specific host
managerHost.action({
  cmd: 'stop'
}, cb);

Models

ManagerHost

{
  host: 'foo.com',
  port: 3000,
  error: {message: '...', status: 500},
  errorType: 'connection', // correspond to the error property
  app: {
    name: 'appname',
    version: '1.2.3',
    port: 4000
  }, // if null, app is not running
  actions: [
    'start',
    'edit', // always included
    'delete' // always included
  ], // list of available actions depending on the state of the host
  processes: {
    targetCount: 7,
    pids: [{
      id: '...',
      pid: 123
    }]
  },
  credentials: {
    username: '...',
    password: '...'
  }
}

LoadBalancer

{
  host: 'foo.com',
  port: 3000,
  credentials: {
    username: '...',
    password: '...'
  },
  error: {status: 500, message: '...'}
}