From eb4f8d77065e05f509705562bf031f9ffecaa412 Mon Sep 17 00:00:00 2001 From: baghbidi Date: Thu, 14 Feb 2019 15:41:52 -0800 Subject: [PATCH 1/4] adding agentsCount to tracking abnd fixing UUID generation bug --- package.json | 15 +++++---- src/jobs/time-tracking-job.js | 38 ++++++++++++++++------ src/services/iofog-access-token-service.js | 9 +++-- src/tracking/index.js | 16 +++++++-- 4 files changed, 56 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 9f0e6c4ad..47a67e435 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,9 @@ "iofog-controller": "src/main.js" }, "dependencies": { + "@sentry/node": "4.5.3", "body-parser": "1.18.3", + "child_process": "1.0.2", "command-line-args": "5.0.2", "command-line-usage": "5.0.5", "continuation-local-storage": "3.2.1", @@ -64,13 +66,18 @@ "ftp": "0.3.10", "helmet": "3.15.0", "jsonschema": "1.2.4", + "moment": "^2.24.0", "morgan": "1.9.1", "nconf": "0.10.0", + "newman": "4.3.1", "nodemailer": "5.1.1", "nodemailer-smtp-transport": "2.7.4", + "os": "0.1.1", "path": "0.12.7", "portscanner": "2.2.0", + "qs": "6.6.0", "retry-as-promised": "3.1.0", + "semver": "5.6.0", "sequelize": "4.42.0", "sequelize-cli": "5.4.0", "sqlite3": "4.0.6", @@ -78,13 +85,7 @@ "umzug": "2.2.0", "underscore": "1.9.1", "winston": "3.1.0", - "xss-clean": "0.1.1", - "qs": "6.6.0", - "child_process": "1.0.2", - "os": "0.1.1", - "semver": "5.6.0", - "newman": "4.3.1", - "@sentry/node": "4.5.3" + "xss-clean": "0.1.1" }, "devDependencies": { "automatic-release": "1.1.1", diff --git a/src/jobs/time-tracking-job.js b/src/jobs/time-tracking-job.js index 00f53c24c..6346d2384 100644 --- a/src/jobs/time-tracking-job.js +++ b/src/jobs/time-tracking-job.js @@ -11,30 +11,48 @@ * */ +const moment = require('moment'); + const BaseJobHandler = require('./base/base-job-handler'); +const FogAccessTokenService = require('../services/iofog-access-token-service'); +const logger = require('../logger'); const Tracking = require('../tracking'); const TrackingEventType = require('../enums/tracking-event-type'); +const TransactionDecorator = require('../decorators/transaction-decorator'); + + +const INTERVAL = 5 * 60 * 1000; class TimeTrackingJob extends BaseJobHandler { constructor() { super(); - this.scheduleTime = intervalMin * 60 * 1000; + this.startTime = moment.now(); } run() { - setInterval(trackTime, this.scheduleTime); + setTimeout(this.trackTime, INTERVAL); } -} -let iteration = 0; -const intervalMin = 5; + async trackTime() { + let agentsCount = 0 + try { + const agents = await TransactionDecorator.generateFakeTransaction(FogAccessTokenService.all)(); + agentsCount = (agents || []).length; + } catch (e) { + logger.warn('Unable to count ioFog agents') + } -async function trackTime() { - iteration++; - const runningTime = iteration * intervalMin; - const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, runningTime,); - await Tracking.processEvent(event); + try { + const runningTime = moment().diff(this.startTime, 'minutes'); + const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, { runningTime, agentsCount }); + await Tracking.processEvent(event); + } catch (err) { + logger.error(`Unable to send "${TrackingEventType.RUNNING_TIME}" tracking info`); + } finally { + setTimeout(this.trackTime, INTERVAL); + } + } } module.exports = new TimeTrackingJob(); \ No newline at end of file diff --git a/src/services/iofog-access-token-service.js b/src/services/iofog-access-token-service.js index 2d2177e72..75031e466 100644 --- a/src/services/iofog-access-token-service.js +++ b/src/services/iofog-access-token-service.js @@ -42,7 +42,12 @@ async function updateAccessToken(fogUuid, newAccessToken, transaction) { }, transaction); } +async function all(transaction) { + return FogAccessTokenManager.findAll(null, transaction); +} + module.exports = { - generateAccessToken: generateAccessToken, - updateAccessToken: updateAccessToken + generateAccessToken, + updateAccessToken, + all, }; \ No newline at end of file diff --git a/src/tracking/index.js b/src/tracking/index.js index dbc91bc77..91e28f96f 100644 --- a/src/tracking/index.js +++ b/src/tracking/index.js @@ -52,7 +52,10 @@ function buildEvent(eventType, res, args, functionName) { eventInfo.data = {event: 'user created'}; break; case EventTypes.RUNNING_TIME: - eventInfo.data = {event: `${res} min`}; + eventInfo.data = { + event: `${res.runningTime} min`, + agentsCount: res.agentsCount, + }; break; case EventTypes.IOFOG_CREATED: eventInfo.data = {event: 'iofog agent created'}; @@ -105,8 +108,15 @@ function getUniqueTrackingUuid() { let allMacs = ''; const interfaces = os.networkInterfaces(); for (const i in interfaces) { - if (!i.internal) { - allMacs += i.mac + '-' + const networkInterface = interfaces[i]; + if (networkInterface.internal) { + continue; + } + + if (!Array.isArray(networkInterface)) { + allMacs += networkInterface.mac + '-'; + } else if (networkInterface.length > 0) { + allMacs += networkInterface[0].mac + '-'; } } uuid = crypto.createHash('md5').update(allMacs).digest("hex"); From a39d75915fa75f875555410f5c2a2763b405cee3 Mon Sep 17 00:00:00 2001 From: baghbidi Date: Thu, 14 Feb 2019 16:29:00 -0800 Subject: [PATCH 2/4] Igonre internal network interface --- src/tracking/index.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/tracking/index.js b/src/tracking/index.js index 91e28f96f..aad1c24b6 100644 --- a/src/tracking/index.js +++ b/src/tracking/index.js @@ -104,20 +104,21 @@ function sendEvents(events) { function getUniqueTrackingUuid() { let uuid; + debugger try { let allMacs = ''; const interfaces = os.networkInterfaces(); for (const i in interfaces) { - const networkInterface = interfaces[i]; - if (networkInterface.internal) { - continue; + let networkInterface = interfaces[i]; + if (Array.isArray(networkInterface)) { + networkInterface = networkInterface.length > 0 ? networkInterface[0] : null; } - if (!Array.isArray(networkInterface)) { - allMacs += networkInterface.mac + '-'; - } else if (networkInterface.length > 0) { - allMacs += networkInterface[0].mac + '-'; + if (!networkInterface || networkInterface.internal) { + continue; } + + allMacs += networkInterface.mac + '-'; } uuid = crypto.createHash('md5').update(allMacs).digest("hex"); } catch (e) { From cfef97fb44b1508c67dd1a081a5ef1d549fe1725 Mon Sep 17 00:00:00 2001 From: baghbidi Date: Thu, 14 Feb 2019 16:29:13 -0800 Subject: [PATCH 3/4] remove debugger --- src/tracking/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tracking/index.js b/src/tracking/index.js index aad1c24b6..94c005b8f 100644 --- a/src/tracking/index.js +++ b/src/tracking/index.js @@ -104,7 +104,7 @@ function sendEvents(events) { function getUniqueTrackingUuid() { let uuid; - debugger + try { let allMacs = ''; const interfaces = os.networkInterfaces(); From d2d0298d720f54393be2ebc4cf84c5b007d95736 Mon Sep 17 00:00:00 2001 From: baghbidi Date: Fri, 15 Feb 2019 10:29:39 -0800 Subject: [PATCH 4/4] fixing Maksim's comments --- src/jobs/time-tracking-job.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/jobs/time-tracking-job.js b/src/jobs/time-tracking-job.js index 6346d2384..8fcb69c14 100644 --- a/src/jobs/time-tracking-job.js +++ b/src/jobs/time-tracking-job.js @@ -21,17 +21,18 @@ const TrackingEventType = require('../enums/tracking-event-type'); const TransactionDecorator = require('../decorators/transaction-decorator'); -const INTERVAL = 5 * 60 * 1000; +const INTERVAL_MIN = 5; class TimeTrackingJob extends BaseJobHandler { constructor() { super(); + this.scheduleTime = INTERVAL_MIN * 60 * 1000; this.startTime = moment.now(); } run() { - setTimeout(this.trackTime, INTERVAL); + setTimeout(this.trackTime, this.scheduleTime); } async trackTime() { @@ -43,15 +44,11 @@ class TimeTrackingJob extends BaseJobHandler { logger.warn('Unable to count ioFog agents') } - try { - const runningTime = moment().diff(this.startTime, 'minutes'); - const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, { runningTime, agentsCount }); - await Tracking.processEvent(event); - } catch (err) { - logger.error(`Unable to send "${TrackingEventType.RUNNING_TIME}" tracking info`); - } finally { - setTimeout(this.trackTime, INTERVAL); - } + const runningTime = moment().diff(this.startTime, 'minutes'); + const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, { runningTime, agentsCount }); + await Tracking.processEvent(event); + + setTimeout(this.trackTime, this.scheduleTime); } }