Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var config = require('../config.json');
- var api_caller = require('../helpers/api_caller');
- var async = require('async');
- var moment = require('moment');
- var mysql_helper = require('../helpers/mysql');
- const conn = mysql_helper.get_connection();
- const Entities = require('html-entities').AllHtmlEntities;
- const entities = new Entities();
- var request = require('request');
- const sleep = require('system-sleep');
- var TOKEN = null;
- var backboneRunCost = 0.0028;
- var lastmileRunCost = 0.0028;
- var mobileRunCost = backboneRunCost * 1.5;
- module.exports = (function () {
- var execute = function () {
- async.waterfall([
- function get_token(asynccb) {
- var gomez_config = config.gomez;
- var token_api_url = gomez_config.base_url + 'login?user=' + gomez_config.username + "&password=" + gomez_config.password;
- // api_caller.execute('GET', token_api_url, {}, {}, function (err, response) {
- // if (err) {
- // asynccb(err);
- // return;
- // }
- // TOKEN = response.data;
- // asynccb(null)
- // });
- request(token_api_url, function (error, response, body) {
- if (!error && response.statusCode == 200) {
- TOKEN = body;
- asynccb(null);
- } else {
- asynccb(error);
- }
- });
- },
- function get_tests(asynccb) {
- var gomez_config = config.gomez;
- var tests_api_url = gomez_config.base_url + 'tests';
- var headers = {
- 'Authentication': 'bearer ' + TOKEN,
- 'Accept': 'application/json'
- }
- var active_tests = [];
- api_caller.execute('GET', tests_api_url, {}, { headers: headers }, function (err, response) {
- if (err) {
- asynccb(err);
- return;
- }
- var result = response.data;
- console.log(result);
- var tests = result['Monitors']
- active_tests = tests.map(function (test) {
- return test['Monitor'];
- });
- asynccb(null, active_tests)
- })
- },
- function delete_existing_tests(tests, asynccb) {
- var test_ids = [];
- for (var i in tests) {
- var test = tests[i];
- test_ids.push(test['monitorID'])
- }
- //Delete tests which aren't active anymore
- var query = "DELETE FROM `active_tests` WHERE source='gomez' AND `test_id` NOT IN(" + test_ids.join(',') + ");";
- console.log(query)
- mysql_helper.query(conn, query, function (err) {
- if (err) {
- asynccb(err);
- return;
- }
- asynccb(null, tests)
- });
- },
- function fetch_test_details(tests, asynccb) {
- var detailed_tests = [];
- var gomez_config = config.gomez;
- var test_details_api_base_url = gomez_config.base_url + 'testresults/';
- var headers = {
- 'Authentication': 'bearer ' + TOKEN,
- 'Accept': 'application/json'
- }
- var i = 0;
- async.eachSeries(tests, function (test, eachcb) {
- var mom = moment();
- var now = mom.utc().valueOf();
- var start = now - (3600 * 1000 * 7);
- var end = now - (3600 * 1000 * 6);
- test_details_api_url = test_details_api_base_url + test.monitorID + '?detailLevel=STEP,OBJECT&time=ARRIVAL&start=' + start + '&end=' + end;
- api_caller.execute('GET', test_details_api_url, {}, { headers: headers }, function (err, response) {
- console.log(test_details_api_url);
- i++;
- if (err) {
- eachcb(err);
- return;
- }
- var response_data = response.data;
- var steps_data = null;
- var keys = Object.keys(response_data);
- for(var j in keys) {
- var key = keys[j];
- if(response_data[key]['StepLevelData']) {
- steps_data = response_data[key]['StepLevelData'];
- break;
- }
- }
- if(! steps_data) {
- steps_data = [];
- }
- var maxSeq = 0;
- steps_data.forEach(function (step) {
- var seq = step['stepData']['pseq'];
- if (seq > maxSeq) {
- maxSeq = seq;
- }
- });
- //determine test target host
- var obj_data = [];
- for(var k in keys) {
- var key = keys[k];
- if(response_data[key]['ObjectLevelData']) {
- obj_data = response_data[key]['ObjectLevelData'];
- break;
- }
- }
- var host = 'Not Known';
- if(obj_data.length > 0) {
- var firstObjData = obj_data[0]['objectData'];
- host = firstObjData['uhost']
- }
- test.target_host = host;
- var stepsPerHour = steps_data.length || 1;
- var runsPerHour = maxSeq / stepsPerHour;
- var pointsPerDay = 0;
- if (test.testType == 'BACKBONE') {
- pointsPerDay = backboneRunCost * stepsPerHour * 24;
- } else if (test.testType == 'LASTMILE') {
- pointsPerDay = lastmileRunCost * stepsPerHour * 24;
- } else if (test.testType == 'MOBILE') {
- pointsPerDay = mobileRunCost * stepsPerHour * 24;
- }
- test.pointsPerDay = pointsPerDay;
- var pointsPerDay = test.pointsPerDay;
- var datetime = moment().format('YYYY-MM-DD HH:mm:ss');
- var frequency = (test.frequency / 60) + " Min";
- var testName = test.tname;
- if(testName.indexOf('instanttest') !== -1) {
- return eachcb(null);
- }
- var query = 'INSERT INTO active_tests(`test_id`, `name`, `product_id`, `type`, `monitors`, `frequency`, `started_at`, `points_per_day`, `source`, `target_host`) VALUES';
- query += '(' + test.monitorID + ',"' + test.tname + '",' + test.mbgMonitorId + ',"' + test.testType + '","' + test.class + '","' + frequency + '","' + datetime + '",' + pointsPerDay + ", 'gomez', '"+ test.target_host +"')";
- 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 + "';";
- console.log(query);
- mysql_helper.query(conn, query, function (err) {
- if (err) {
- console.log(err);
- eachcb(err);
- return;
- }
- console.log(i + " Done")
- if(i % 8 == 0) {
- sleep(55000)
- }
- eachcb(null);
- });
- });
- }, function eachendcb(err) {
- asynccb(err);
- });
- }
- /*function save_new_tests(tests, asynccb) {
- async.eachSeries(tests, function (test, eachcb) {
- var pointsPerDay = test.pointsPerDay;
- var datetime = moment().format('YYYY-MM-DD HH:mm:ss');
- var frequency = (test.frequency / 60) + " Min";
- var testName = test.tname;
- if(testName.indexOf('instanttest') !== -1) {
- return eachcb(null);
- }
- var query = 'INSERT INTO active_tests(`test_id`, `name`, `product_id`, `type`, `monitors`, `frequency`, `started_at`, `points_per_day`, `source`, `target_host`) VALUES';
- query += '(' + test.monitorID + ',"' + test.tname + '",' + test.mbgMonitorId + ',"' + test.testType + '","' + test.class + '","' + frequency + '","' + datetime + '",' + pointsPerDay + ", 'gomez', '"+ test.target_host +"')";
- 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 + "';";
- console.log(query);
- mysql_helper.query(conn, query, function (err) {
- if (err) {
- console.log(err);
- eachcb(err);
- return;
- }
- eachcb(null);
- });
- }, function eachendcb(err) {
- asynccb(err);
- });
- } */
- ], function (err, result) {
- if (err) {
- console.log("Error in waterfall", err);
- return;
- }
- console.log("Process completed");
- })
- }
- return {
- execute: execute
- }
- })();
Add Comment
Please, Sign In to add comment