Advertisement
Guest User

Untitled

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