Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.

Commit

Permalink
- Custom metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
meenal-developer committed Jan 2, 2024
1 parent 73f9396 commit cbf897a
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 28 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@middleware.io/node-apm",
"version": "1.2.6",
"version": "1.2.7",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
Expand Down
5 changes: 3 additions & 2 deletions packages/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ const configDefault = {
'accessToken': '',
'tenantID': '',
'mwAuthURL': 'https://app.middleware.io/api/v1/auth',
'consoleLog':false
'consoleLog':false,
'meterProvider':false
}

module.exports.init = (config = {}) => {
Expand All @@ -32,7 +33,7 @@ module.exports.init = (config = {}) => {
configDefault['target'] = process.env.MW_AGENT_SERVICE+":"+configDefault.port.grpc
}
diag.setLogger(new DiagConsoleLogger(), configDefault['DEBUG'] ? DiagLogLevel.DEBUG : DiagLogLevel.NONE);
if (configDefault['collectMetrics']) {metrics.init(configDefault)}
metrics.init(configDefault)
tracer.init(configDefault)
return configDefault
}
11 changes: 9 additions & 2 deletions packages/init.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const otel = require('@opentelemetry/api')
const {loggerInitializer,log} = require('./logger')

let config;
module.exports.track = (newConfig = {}) => {
let config = require('./config').init(newConfig)
config = require('./config').init(newConfig)
loggerInitializer(config);
require('./profiler').init(config);
};
Expand Down Expand Up @@ -38,3 +38,10 @@ module.exports.setAttribute = (name,value) => {
span.setAttribute(name,value)
}
};

module.exports.getMeter =() => {
if (config.meterProvider){
return config.meterProvider.getMeter(config.serviceName)
}
return false
}
49 changes: 26 additions & 23 deletions packages/metrics-collector.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
module.exports.init = (config) => {
const {OTLPMetricExporter} = require('@opentelemetry/exporter-metrics-otlp-grpc');
const {SemanticResourceAttributes} = require("@opentelemetry/semantic-conventions");
const {Resource} = require("@opentelemetry/resources");
const {MeterProvider, PeriodicExportingMetricReader} = require('@opentelemetry/sdk-metrics');
const metricsExporter = new OTLPMetricExporter({url: config.target});
this.config = config;
this.serviceName = config.serviceName;
this.projectName = config.projectName;
this.meterProvider = new MeterProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: this.serviceName,
['mw_agent']: true,
['project.name']: this.projectName,
['mw.account_key']: config.accessToken,
['runtime.metrics.nodejs']: true,
['mw.app.lang']: "nodejs",
})
});
this.meterProvider.addMetricReader(new PeriodicExportingMetricReader({
exporter: metricsExporter,
exportIntervalMillis: 10000
}));
config.meterProvider=this.meterProvider
let apm_pause_metrics = config.pauseMetrics && config.pauseMetrics == 1 ? true : false;
if (!apm_pause_metrics) {
const v8 = require('v8')
const os = require('os')
const {OTLPMetricExporter} = require('@opentelemetry/exporter-metrics-otlp-grpc');
const {SemanticResourceAttributes} = require("@opentelemetry/semantic-conventions");
const {Resource} = require("@opentelemetry/resources");
const {MeterProvider,PeriodicExportingMetricReader} = require('@opentelemetry/sdk-metrics');
const metricsExporter = new OTLPMetricExporter({url: config.target});
this.config = config;
this.time = process.hrtime()
this.cpuUsage = false
this.serviceName = config.serviceName;
this.projectName = config.projectName;
setInterval(() => {
if (config.collectMetrics) {
setInterval(() => {
if (process.cpuUsage) {
this.elapsedTime = process.hrtime(this.time)
this.elapsedUsage = process.cpuUsage(this.cpuUsage)
Expand Down Expand Up @@ -67,26 +83,13 @@ module.exports.init = (config) => {
}
Object.keys(this.enqueue).forEach(metric_name => {
if (this.enqueue[metric_name]) {
this.meterProvider = new MeterProvider({
resource:new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: this.serviceName,
['mw_agent']: true,
['project.name']: this.projectName,
['mw.account_key']:config.accessToken,
['runtime.metrics.nodejs']:true,
['mw.app.lang']:"nodejs",
})
});
this.meterProvider.addMetricReader(new PeriodicExportingMetricReader({
exporter: metricsExporter,
exportIntervalMillis: 10000,
}));
this.meter = this.meterProvider.getMeter(this.serviceName);
this.counter = this.meter.createCounter(metric_name);
this.counter.add(parseFloat(this.enqueue[metric_name]));
}
})
}, 10000)
}
}
};

Expand Down

0 comments on commit cbf897a

Please sign in to comment.