diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2019-12-04 18:04:30 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2019-12-04 18:04:30 +0100 |
commit | fcc2328a3bf49eb5310413058cc9ebaf8e7819f8 (patch) | |
tree | c6faabae8badd96455453b72472ac08a2fe0b1c2 /docker/netiquette/src/catalog/consul.mjs | |
parent | 0b3eb8ec1b3ba3691410744f6397437c9832e74d (diff) | |
download | infrastructure-fcc2328a3bf49eb5310413058cc9ebaf8e7819f8.tar.gz infrastructure-fcc2328a3bf49eb5310413058cc9ebaf8e7819f8.zip |
WIP netiquette
Diffstat (limited to 'docker/netiquette/src/catalog/consul.mjs')
-rw-r--r-- | docker/netiquette/src/catalog/consul.mjs | 30 |
1 files changed, 30 insertions, 0 deletions
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') +} |