ContainerHQ/arkis-api

View on GitHub
app/routes/api/v1/agent.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

let _ = require('lodash'),
  express = require('express'),
  middlewares = require('../../../middlewares'),
  services = require('../../../services'),
  Node = require('../../../models').Node;

let router = express.Router();

const REGISTER_PARAMS = [
  'cpu', 'memory', 'disk', 'swarm_version', 'docker_version'
];

router
.param('token', middlewares.tokenDecoder)
.param('token', (req, res, next) => {
  Node.findById(req.token.jit).then(node => {
    if (!node) { return res.notFound(); }

    req.agent = new services.AgentManager(node);
    next();
  });
})
.get('/:token/infos', (req, res, next) => {
  req.agent.infos().then(infos => {
    res.json(infos);
  }).catch(next);
})
.post('/:token/notify', (req, res, next) => {
  req.agent.notify(_.pick(req.body, REGISTER_PARAMS)).then(action => {
    res.json({ action: action });
  }).catch(next);
})
.get('/clusters/:token', (req, res, next) => {
  req.agent.fetch().then(addresses => {
    res.json(addresses);
  }).catch(next);
})
.post('/clusters/:token', (req, res, next) => {
  let addr = _.first(_.keys(req.body));

  req.agent.register(addr).then(() => {
    res.noContent();
  }).catch(next);
});

module.exports = router;