Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const WebSocket = require('ws');
- const http = require('http');
- const request = require('request');
- const client = require('prom-client');
- const register = client.register
- const port = 3000
- const requestHandler = (request, response) => {
- response.end(register.metrics())
- }
- const server = http.createServer(requestHandler)
- server.listen(port, (err) => {
- if (err) {
- return console.log('something bad happened', err)
- }
- console.log(`server is listening on ${port}`)
- })
- const hosts = [
- '123.123.123.123'
- ]
- const ports = [
- '8001'
- ]
- const sentGauge = new client.Gauge({
- name: 'sent',
- help: 'sent data in bytes',
- labelNames: ['host', 'port', 'version']
- });
- const receivedGauge = new client.Gauge({
- name: 'received',
- help: 'received data in bytes',
- labelNames: ['host', 'port', 'version']
- });
- const sendingGauge = new client.Gauge({
- name: 'sending',
- help: 'sending data in bytes',
- labelNames: ['host', 'port', 'version']
- });
- const receivingGauge = new client.Gauge({
- name: 'receiving',
- help: 'receiving data in bytes',
- labelNames: ['host', 'port', 'version']
- });
- hosts.forEach((host) => {
- ports.forEach((port) => {
- const ws = new WebSocket(`ws://${host}:${port}/1/1/websocket`)
- ws.on('close', () => {
- console.log('close')
- process.exit(1)
- })
- ws.on('error', (err) => {
- console.log('ERROR', err)
- process.exit(1)
- })
- function bytesToSize(bytes) {
- var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
- if (bytes == 0) return '0 Byte';
- var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
- return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
- };
- let version = 'unknown'
- const get_version = (callback) => {
- request({
- url:`http://${host}:${port}/api/help`,
- auth: {user: 'username', pass: 'password'}
- }, (err, res, body) => {
- if (err) console.log(err)
- let foundLine = false
- body.split('\n').forEach((line) => {
- if (line.indexOf('Cloning version') !== -1) {
- foundLine = true
- version = line.split(' ')[9]
- console.log('got version ' + version)
- if(callback) callback()
- }
- })
- if (!foundLine) {
- console.log(body)
- }
- })
- }
- setInterval(get_version, 1000 * 60)
- get_version(() => {
- sentGauge.set({host, port, version}, 0)
- receivedGauge.set({host, port, version}, 0)
- sendingGauge.set({host, port, version}, 0)
- receivingGauge.set({host, port, version}, 0)
- ws.on('message', function incoming(data) {
- try {
- const parsed = JSON.parse(JSON.parse(data.substring(1))[0])
- if (parsed.event_name === 'bandwidth') {
- const {received, sent} = parsed.message
- const {receiving, sending} = parsed.message
- sentGauge.set({host, port, version}, sent)
- receivedGauge.set({host, port, version}, received)
- sendingGauge.set({host, port, version}, sending)
- receivingGauge.set({host, port, version}, receiving)
- }
- } catch (err) {
- console.log(err)
- }
- })
- })
- })
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement