From fcc2328a3bf49eb5310413058cc9ebaf8e7819f8 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 4 Dec 2019 18:04:30 +0100 Subject: WIP netiquette --- docker/netiquette/src/catalog/consul.mjs | 30 ++++++++++++++++++++++++++ docker/netiquette/src/catalog/control_loop.mjs | 10 +++++++++ 2 files changed, 40 insertions(+) create mode 100644 docker/netiquette/src/catalog/consul.mjs create mode 100644 docker/netiquette/src/catalog/control_loop.mjs (limited to 'docker/netiquette/src/catalog') diff --git a/docker/netiquette/src/catalog/consul.mjs b/docker/netiquette/src/catalog/consul.mjs new file mode 100644 index 0000000..655c61f --- /dev/null +++ b/docker/netiquette/src/catalog/consul.mjs @@ -0,0 +1,30 @@ +'use strict' + +let l +export default l = async (node, consul, log, notify) => { + const watch = consul.watch({ method: consul.catalog.node.services, options: {node: node}}) + + const extract_tags = data => + data ? + Object + .keys(data.Services) + .map(k => data.Services[k].Tags) + .reduce((acc, v) => [...acc, ...v], []) : + [] + + watch.on('error', err => { + console.error('error', err) + }) + + watch.on('change', async (data, res) => { + try { + const tags = extract_tags(data) + log(`[consul] new update, detected ${tags.length} tags`) + await notify(tags) + } catch(e) { + console.error('failed to notify target', e) + } + }) + + log('[consul] initialized') +} diff --git a/docker/netiquette/src/catalog/control_loop.mjs b/docker/netiquette/src/catalog/control_loop.mjs new file mode 100644 index 0000000..56ad6f5 --- /dev/null +++ b/docker/netiquette/src/catalog/control_loop.mjs @@ -0,0 +1,10 @@ +'use strict' + +let l +export default l = async (timer, interval, notify) => { + timer(() => { + notify([]) + console.log(`[control_loop] actuation (triggered every ${interval} ms)`) + }, interval) + console.log("[control_loop] initialized") +} -- cgit v1.2.3