|
|
@ -1,4 +1,5 @@ |
|
|
|
import { AnalyticsMessageMethod, AnalyticsMessage } from '../models/analytics_message_model' |
|
|
|
import { AnalyticsTask } from '../models/analytics_task_model'; |
|
|
|
|
|
|
|
import { AnalyticsMessageMethod, AnalyticsMessage } from '../models/analytics_message_model'; |
|
|
|
import * as config from '../config'; |
|
|
|
import * as config from '../config'; |
|
|
|
|
|
|
|
|
|
|
|
const zmq = require('zeromq'); |
|
|
|
const zmq = require('zeromq'); |
|
|
@ -22,24 +23,25 @@ export class AnalyticsService { |
|
|
|
this._init(); |
|
|
|
this._init(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public async sendTask(taskObj: any): Promise<void> { |
|
|
|
public async sendTask(task: AnalyticsTask): Promise<void> { |
|
|
|
if(!this._ready) { |
|
|
|
if(!this._ready) { |
|
|
|
return Promise.reject("Analytics is not ready"); |
|
|
|
return Promise.reject("Analytics is not ready"); |
|
|
|
} |
|
|
|
} |
|
|
|
let message = { |
|
|
|
let message = new AnalyticsMessage( |
|
|
|
method: AnalyticsMessageMethod.TASK, |
|
|
|
AnalyticsMessageMethod.TASK, |
|
|
|
payload: taskObj |
|
|
|
task.toObject() |
|
|
|
} |
|
|
|
); |
|
|
|
return this.sendMessage(message); |
|
|
|
return this.sendMessage(message); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public async sendMessage(message: AnalyticsMessage): Promise<void> { |
|
|
|
public async sendMessage(message: AnalyticsMessage): Promise<void> { |
|
|
|
let strMessage = JSON.stringify(message); |
|
|
|
let strMessage = JSON.stringify(message); |
|
|
|
if(message.method === AnalyticsMessageMethod.PING) { |
|
|
|
return this.sendText(strMessage); |
|
|
|
strMessage = 'PING'; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async sendText(text: string): Promise<void> { |
|
|
|
return new Promise<void>((resolve, reject) => { |
|
|
|
return new Promise<void>((resolve, reject) => { |
|
|
|
this._requester.send(strMessage, undefined, (err: any) => { |
|
|
|
this._requester.send(text, undefined, (err: any) => { |
|
|
|
if(err) { |
|
|
|
if(err) { |
|
|
|
reject(err); |
|
|
|
reject(err); |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -169,7 +171,8 @@ export class AnalyticsService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private _onAnalyticsMessage(data: any) { |
|
|
|
private _onAnalyticsMessage(data: any) { |
|
|
|
if(data.toString() === 'PONG') { |
|
|
|
let text = data.toString(); |
|
|
|
|
|
|
|
if(text === 'PONG') { |
|
|
|
this._pingResponded = true; |
|
|
|
this._pingResponded = true; |
|
|
|
if(!this._ready) { |
|
|
|
if(!this._ready) { |
|
|
|
this._ready = true; |
|
|
|
this._ready = true; |
|
|
@ -178,7 +181,6 @@ export class AnalyticsService { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let text = data.toString(); |
|
|
|
|
|
|
|
let response; |
|
|
|
let response; |
|
|
|
try { |
|
|
|
try { |
|
|
|
response = JSON.parse(text); |
|
|
|
response = JSON.parse(text); |
|
|
@ -201,7 +203,7 @@ export class AnalyticsService { |
|
|
|
} |
|
|
|
} |
|
|
|
this._pingResponded = false; |
|
|
|
this._pingResponded = false; |
|
|
|
// TODO: set life limit for this ping
|
|
|
|
// TODO: set life limit for this ping
|
|
|
|
this.sendMessage({ method: AnalyticsMessageMethod.PING }); |
|
|
|
this.sendText('PING'); |
|
|
|
}, config.ANLYTICS_PING_INTERVAL); |
|
|
|
}, config.ANLYTICS_PING_INTERVAL); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|