Set up agent IO.
Reporting in the agent follows the PUB-SUB model. Reporters are nothing more than subscribers of messages published by the various agent components. Reporters can collect messages of interest and do with them what they will.
If a reporter want's to communicate with the agent, e.g. send it new settings to update feature behaviors, then it will publish the appropirate message to which the agent component is listening.
-
Like other services, core will compose
@contrast/reporters
into the dependency container object.const { reporters } require('@contrast/core')();
-
Clients can than
await
any reporter initialization code and respond to any errors.try { await reporters.install(); } catch (error) { // maybe we failed to connect to teamserver or something? // decide what to do. }
-
Other than that, it's just plugging into the agent's event stream.
// e.g. teamserver Protect reporter pseudocode module.exports = function(deps) { return { async install() { await this.startup(deps); await this.appCreate(deps); ['InputAnalysis', 'BlockAtPerimeter', 'SinkEvent', 'HTTPRequest'].forEach((msgName) => { deps.messages.on(msgName, (msg) => { putInQueueAndReportLater(msgName, msg); }); }); } }; };