const { XMLParser } = require("fast-xml-parser"), { Client } = require('@elastic/elasticsearch'), config = require('./config.js'), parser = new XMLParser({ ignoreDeclaration: true, ignorePiTags: true }), client = new Client({ node: config.elasticnode }), monitnodes = config.monitnodes, username = config.username, password = config.password, request = async uri => { const ac = new AbortController() setTimeout(() => { ac.abort() }, 5000) const response = await fetch(uri, { signal: ac.signal, keepalive: false, timeout: config.timeout, headers: { Authorization: `Basic ${btoa(`${username}:${password}`)}` } }), xml = await response.text() setImmediate(() => { ac.abort() }) return xml }, index = async (node, data) => { await client.index({ index: config.index, body: { data, node, timestamp: new Date() } }) }, start = async () => { await Promise.all(monitnodes.map(async node => { try { const xml = await request(`http://${node}:2812/_status?format=xml`), json = parser.parse(xml) await index(node, json) } catch (e) { console.error(e) } })) setTimeout(async () => await start(), config.poll) } (async () => { await start() })()