Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const WebSocket = require('ws');
  2. const http = require('http');
  3. const request = require('request');
  4.  
  5. const client = require('prom-client');
  6.  
  7.  const register = client.register
  8.  
  9. const port = 3000
  10.  
  11. const requestHandler = (request, response) => {
  12.   response.end(register.metrics())
  13. }
  14.  
  15. const server = http.createServer(requestHandler)
  16.  
  17. server.listen(port, (err) => {
  18.   if (err) {
  19.     return console.log('something bad happened', err)
  20.   }
  21.  
  22.   console.log(`server is listening on ${port}`)
  23. })
  24.  
  25.  
  26. const hosts = [
  27.   '123.123.123.123'
  28. ]
  29. const ports = [
  30.   '8001'
  31. ]
  32.  
  33. const sentGauge = new client.Gauge({
  34.   name: 'sent',
  35.   help: 'sent data in bytes',
  36.   labelNames: ['host', 'port', 'version']
  37. });
  38. const receivedGauge = new client.Gauge({
  39.   name: 'received',
  40.   help: 'received data in bytes',
  41.   labelNames: ['host', 'port', 'version']
  42. });
  43. const sendingGauge = new client.Gauge({
  44.   name: 'sending',
  45.   help: 'sending data in bytes',
  46.   labelNames: ['host', 'port', 'version']
  47. });
  48. const receivingGauge = new client.Gauge({
  49.   name: 'receiving',
  50.   help: 'receiving data in bytes',
  51.   labelNames: ['host', 'port', 'version']
  52. });
  53.  
  54. hosts.forEach((host) => {
  55.   ports.forEach((port) => {
  56.     const ws = new WebSocket(`ws://${host}:${port}/1/1/websocket`)
  57.  
  58.     ws.on('close', () => {
  59.       console.log('close')
  60.       process.exit(1)
  61.     })
  62.  
  63.     ws.on('error', (err) => {
  64.       console.log('ERROR', err)
  65.       process.exit(1)
  66.     })
  67.  
  68.     function bytesToSize(bytes) {
  69.        var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  70.        if (bytes == 0) return '0 Byte';
  71.        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  72.        return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
  73.     };
  74.  
  75.     let version = 'unknown'
  76.     const get_version = (callback) => {
  77.       request({
  78.         url:`http://${host}:${port}/api/help`,
  79.         auth: {user: 'username', pass: 'password'}
  80.       }, (err, res, body) => {
  81.         if (err) console.log(err)
  82.         let foundLine = false
  83.         body.split('\n').forEach((line) => {
  84.           if (line.indexOf('Cloning version') !== -1) {
  85.             foundLine = true
  86.             version = line.split(' ')[9]
  87.             console.log('got version ' + version)
  88.             if(callback) callback()
  89.           }
  90.         })
  91.         if (!foundLine) {
  92.           console.log(body)
  93.         }
  94.       })
  95.     }
  96.     setInterval(get_version, 1000 * 60)
  97.     get_version(() => {
  98.       sentGauge.set({host, port, version}, 0)
  99.       receivedGauge.set({host, port, version}, 0)
  100.       sendingGauge.set({host, port, version}, 0)
  101.       receivingGauge.set({host, port, version}, 0)
  102.       ws.on('message', function incoming(data) {
  103.         try {
  104.           const parsed = JSON.parse(JSON.parse(data.substring(1))[0])
  105.           if (parsed.event_name === 'bandwidth') {
  106.             const {received, sent} = parsed.message
  107.             const {receiving, sending} = parsed.message
  108.             sentGauge.set({host, port, version}, sent)
  109.             receivedGauge.set({host, port, version}, received)
  110.             sendingGauge.set({host, port, version}, sending)
  111.             receivingGauge.set({host, port, version}, receiving)
  112.           }
  113.         } catch (err) {
  114.           console.log(err)
  115.         }
  116.       })
  117.     })
  118.   })
  119. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement