Guest User

Untitled

a guest
Nov 4th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var config = require('../config.json');
  2. var api_caller = require('../helpers/api_caller');
  3. var async = require('async');
  4. var moment = require('moment');
  5. var mysql_helper = require('../helpers/mysql');
  6. const conn = mysql_helper.get_connection();
  7. const Entities = require('html-entities').AllHtmlEntities;
  8. const entities = new Entities();
  9. var request = require('request');
  10. const sleep = require('system-sleep');
  11.  
  12. var TOKEN = null;
  13.  
  14. var backboneRunCost = 0.0028;
  15. var lastmileRunCost = 0.0028;
  16. var mobileRunCost = backboneRunCost * 1.5;
  17.  
  18. module.exports = (function () {
  19.     var execute = function () {
  20.  
  21.         async.waterfall([
  22.  
  23.             function get_token(asynccb) {
  24.                 var gomez_config = config.gomez;
  25.                 var token_api_url = gomez_config.base_url + 'login?user=' + gomez_config.username + "&password=" + gomez_config.password;
  26.  
  27.                 // api_caller.execute('GET', token_api_url, {}, {}, function (err, response) {
  28.                 //     if (err) {
  29.                 //         asynccb(err);
  30.                 //         return;
  31.                 //     }
  32.  
  33.                 //     TOKEN = response.data;
  34.                 //     asynccb(null)
  35.                 // });
  36.  
  37.                 request(token_api_url, function (error, response, body) {
  38.                     if (!error && response.statusCode == 200) {
  39.                       TOKEN = body;
  40.                       asynccb(null);
  41.                     } else {
  42.                         asynccb(error);
  43.                     }
  44.  
  45.                 });
  46.  
  47.             },
  48.  
  49.             function get_tests(asynccb) {
  50.                 var gomez_config = config.gomez;
  51.                 var tests_api_url = gomez_config.base_url + 'tests';
  52.  
  53.                 var headers = {
  54.                     'Authentication': 'bearer ' + TOKEN,
  55.                     'Accept': 'application/json'
  56.                 }
  57.  
  58.                 var active_tests = [];
  59.  
  60.                 api_caller.execute('GET', tests_api_url, {}, { headers: headers }, function (err, response) {
  61.                     if (err) {
  62.                         asynccb(err);
  63.                         return;
  64.                     }
  65.  
  66.                     var result = response.data;
  67.                     console.log(result);
  68.                     var tests = result['Monitors']
  69.                     active_tests = tests.map(function (test) {
  70.                         return test['Monitor'];
  71.                     });
  72.                     asynccb(null, active_tests)
  73.                 })
  74.             },
  75.  
  76.             function delete_existing_tests(tests, asynccb) {
  77.                 var test_ids = [];
  78.                 for (var i in tests) {
  79.                     var test = tests[i];
  80.                     test_ids.push(test['monitorID'])
  81.                 }
  82.                
  83.  
  84.                 //Delete tests which aren't active anymore
  85.                 var query = "DELETE FROM `active_tests` WHERE source='gomez' AND `test_id` NOT IN(" + test_ids.join(',') + ");";
  86.                 console.log(query)
  87.                 mysql_helper.query(conn, query, function (err) {
  88.                     if (err) {
  89.                         asynccb(err);
  90.                         return;
  91.                     }
  92.                     asynccb(null, tests)
  93.                 });
  94.             },
  95.  
  96.             function fetch_test_details(tests, asynccb) {
  97.                 var detailed_tests = [];
  98.                 var gomez_config = config.gomez;
  99.                 var test_details_api_base_url = gomez_config.base_url + 'testresults/';
  100.  
  101.  
  102.                 var headers = {
  103.                     'Authentication': 'bearer ' + TOKEN,
  104.                     'Accept': 'application/json'
  105.                 }
  106.  
  107.                 var i = 0;
  108.                 async.eachSeries(tests, function (test, eachcb) {
  109.                     var mom = moment();
  110.                     var now = mom.utc().valueOf();
  111.                     var start = now - (3600 * 1000 * 7);
  112.                     var end = now - (3600 * 1000 * 6);
  113.                    
  114.                     test_details_api_url = test_details_api_base_url + test.monitorID + '?detailLevel=STEP,OBJECT&time=ARRIVAL&start=' + start + '&end=' + end;
  115.                     api_caller.execute('GET', test_details_api_url, {}, { headers: headers }, function (err, response) {
  116.                         console.log(test_details_api_url);
  117.                         i++;
  118.                         if (err) {
  119.                             eachcb(err);
  120.                             return;
  121.                         }
  122.  
  123.                         var response_data = response.data;
  124.                         var steps_data = null;
  125.                         var keys = Object.keys(response_data);
  126.                         for(var j in keys) {
  127.                             var key = keys[j];
  128.                             if(response_data[key]['StepLevelData']) {
  129.                                 steps_data = response_data[key]['StepLevelData'];
  130.                                 break;
  131.                             }
  132.                         }
  133.                         if(! steps_data) {
  134.                             steps_data = [];
  135.                         }
  136.  
  137.                         var maxSeq = 0;
  138.                         steps_data.forEach(function (step) {
  139.                             var seq = step['stepData']['pseq'];
  140.                             if (seq > maxSeq) {
  141.                                 maxSeq = seq;
  142.                             }
  143.                         });
  144.  
  145.  
  146.  
  147.                         //determine test target host
  148.                         var obj_data = [];
  149.                         for(var k in keys) {
  150.                             var key = keys[k];
  151.                             if(response_data[key]['ObjectLevelData']) {
  152.                                 obj_data = response_data[key]['ObjectLevelData'];
  153.                                 break;
  154.                             }
  155.                         }
  156.                         var host = 'Not Known';
  157.                         if(obj_data.length > 0) {
  158.                             var firstObjData = obj_data[0]['objectData'];
  159.                             host = firstObjData['uhost']
  160.                         }
  161.                         test.target_host = host;
  162.  
  163.                         var stepsPerHour = steps_data.length || 1;
  164.                         var runsPerHour = maxSeq / stepsPerHour;
  165.                         var pointsPerDay = 0;
  166.                         if (test.testType == 'BACKBONE') {
  167.                             pointsPerDay = backboneRunCost * stepsPerHour * 24;
  168.                         } else if (test.testType == 'LASTMILE') {
  169.                             pointsPerDay = lastmileRunCost * stepsPerHour * 24;
  170.                         } else if (test.testType == 'MOBILE') {
  171.                             pointsPerDay = mobileRunCost * stepsPerHour * 24;
  172.                         }
  173.                         test.pointsPerDay = pointsPerDay;
  174.  
  175.                         var pointsPerDay = test.pointsPerDay;
  176.                         var datetime = moment().format('YYYY-MM-DD HH:mm:ss');
  177.                         var frequency = (test.frequency / 60) + " Min";
  178.                         var testName = test.tname;
  179.                         if(testName.indexOf('instanttest') !== -1) {
  180.                             return eachcb(null);
  181.                         }
  182.                         var query = 'INSERT INTO active_tests(`test_id`, `name`, `product_id`, `type`, `monitors`, `frequency`, `started_at`, `points_per_day`, `source`, `target_host`) VALUES';
  183.                         query += '(' + test.monitorID + ',"' + test.tname + '",' + test.mbgMonitorId + ',"' + test.testType + '","' + test.class + '","' + frequency + '","' + datetime + '",' + pointsPerDay + ", 'gomez', '"+ test.target_host +"')";
  184.                         query += ' ON DUPLICATE KEY UPDATE `name` = "' + test.tname + '", `type` = "' + test.testType + '", monitors="' + test.class + '", frequency="' + frequency + '", `points_per_day` = ' + pointsPerDay + ", `target_host`='" + test.target_host + "';";
  185.                         console.log(query);
  186.                         mysql_helper.query(conn, query, function (err) {
  187.                             if (err) {
  188.                                 console.log(err);
  189.                                 eachcb(err);
  190.                                 return;
  191.                             }
  192.                             console.log(i + " Done")
  193.                             if(i % 8 == 0) {
  194.                                 sleep(55000)
  195.                             }
  196.                             eachcb(null);
  197.                         });
  198.                     });
  199.                 }, function eachendcb(err) {
  200.                     asynccb(err);
  201.                 });
  202.             }
  203.  
  204.             /*function save_new_tests(tests, asynccb) {
  205.                 async.eachSeries(tests, function (test, eachcb) {
  206.                     var pointsPerDay = test.pointsPerDay;
  207.                     var datetime = moment().format('YYYY-MM-DD HH:mm:ss');
  208.                     var frequency = (test.frequency / 60) + " Min";
  209.                     var testName = test.tname;
  210.                     if(testName.indexOf('instanttest') !== -1) {
  211.                         return eachcb(null);
  212.                     }
  213.                     var query = 'INSERT INTO active_tests(`test_id`, `name`, `product_id`, `type`, `monitors`, `frequency`, `started_at`, `points_per_day`, `source`, `target_host`) VALUES';
  214.                     query += '(' + test.monitorID + ',"' + test.tname + '",' + test.mbgMonitorId + ',"' + test.testType + '","' + test.class + '","' + frequency + '","' + datetime + '",' + pointsPerDay + ", 'gomez', '"+ test.target_host +"')";
  215.                     query += ' ON DUPLICATE KEY UPDATE `name` = "' + test.tname + '", `type` = "' + test.testType + '", monitors="' + test.class + '", frequency="' + frequency + '", `points_per_day` = ' + pointsPerDay + ", `target_host`='" + test.target_host + "';";
  216.                     console.log(query);
  217.                     mysql_helper.query(conn, query, function (err) {
  218.                         if (err) {
  219.                             console.log(err);
  220.                             eachcb(err);
  221.                             return;
  222.                         }
  223.                         eachcb(null);
  224.                     });
  225.                 }, function eachendcb(err) {
  226.                     asynccb(err);
  227.                 });
  228.             } */
  229.  
  230.         ], function (err, result) {
  231.             if (err) {
  232.                 console.log("Error in waterfall", err);
  233.                 return;
  234.             }
  235.             console.log("Process completed");
  236.         })
  237.     }
  238.     return {
  239.         execute: execute
  240.     }
  241. })();
Add Comment
Please, Sign In to add comment