aboutsummaryrefslogtreecommitdiff
path: root/docker/netiquette/src/catalog/consul.mjs
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2019-12-04 18:04:30 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2019-12-04 18:04:30 +0100
commitfcc2328a3bf49eb5310413058cc9ebaf8e7819f8 (patch)
treec6faabae8badd96455453b72472ac08a2fe0b1c2 /docker/netiquette/src/catalog/consul.mjs
parent0b3eb8ec1b3ba3691410744f6397437c9832e74d (diff)
downloadinfrastructure-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.mjs30
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')
+}