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..8fcb69c14 100644 --- a/src/jobs/time-tracking-job.js +++ b/src/jobs/time-tracking-job.js @@ -11,30 +11,45 @@ * */ +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_MIN = 5; class TimeTrackingJob extends BaseJobHandler { constructor() { super(); - this.scheduleTime = intervalMin * 60 * 1000; + this.scheduleTime = INTERVAL_MIN * 60 * 1000; + this.startTime = moment.now(); } run() { - setInterval(trackTime, this.scheduleTime); + setTimeout(this.trackTime, this.scheduleTime); } -} -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') + } + + const runningTime = moment().diff(this.startTime, 'minutes'); + const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, { runningTime, agentsCount }); + await Tracking.processEvent(event); -async function trackTime() { - iteration++; - const runningTime = iteration * intervalMin; - const event = Tracking.buildEvent(TrackingEventType.RUNNING_TIME, runningTime,); - await Tracking.processEvent(event); + setTimeout(this.trackTime, this.scheduleTime); + } } 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..94c005b8f 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'}; @@ -101,13 +104,21 @@ function sendEvents(events) { function getUniqueTrackingUuid() { let uuid; + try { let allMacs = ''; const interfaces = os.networkInterfaces(); for (const i in interfaces) { - if (!i.internal) { - allMacs += i.mac + '-' + let networkInterface = interfaces[i]; + if (Array.isArray(networkInterface)) { + networkInterface = networkInterface.length > 0 ? networkInterface[0] : null; + } + + if (!networkInterface || networkInterface.internal) { + continue; } + + allMacs += networkInterface.mac + '-'; } uuid = crypto.createHash('md5').update(allMacs).digest("hex"); } catch (e) {