Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
chore: updating host metrics to v0.13 of core and simplifying data co…
…llection due to latest changes
  • Loading branch information
obecny committed Dec 9, 2020
commit 79528795caa4a853a73e7260979235250e4b1fc9
10 changes: 5 additions & 5 deletions examples/host-metrics/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
"url": "https://github.com/open-telemetry/opentelemetry-js/issues"
},
"dependencies": {
"@opentelemetry/api": "^0.12.0",
"@opentelemetry/core": "^0.12.0",
"@opentelemetry/exporter-prometheus": "^0.12.0",
"@opentelemetry/exporter-collector": "^0.12.0",
"@opentelemetry/metrics": "^0.12.0",
"@opentelemetry/api": "^0.13.0",
"@opentelemetry/core": "^0.13.0",
"@opentelemetry/exporter-prometheus": "^0.13.0",
"@opentelemetry/exporter-collector": "^0.13.0",
"@opentelemetry/metrics": "^0.13.0",
"@opentelemetry/host-metrics": "^0.11.0"
},
"homepage": "https://github.com/open-telemetry/opentelemetry-js#readme"
Expand Down
8 changes: 4 additions & 4 deletions packages/opentelemetry-host-metrics/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@
"typescript": "3.9.7"
},
"dependencies": {
"@opentelemetry/api": "^0.12.0",
"@opentelemetry/core": "^0.12.0",
"@opentelemetry/metrics": "^0.12.0",
"systeminformation": "^4.27.10"
"@opentelemetry/api": "^0.13.0",
"@opentelemetry/core": "^0.13.0",
"@opentelemetry/metrics": "^0.13.0",
"systeminformation": "^4.31.0"
}
}
6 changes: 2 additions & 4 deletions packages/opentelemetry-host-metrics/src/metric.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,11 @@ import { CpuUsageData, MemoryData, NetworkData } from './types';
export class HostMetrics extends BaseMetrics {
private _cpuTimeObserver!: api.SumObserver;
private _cpuUtilizationObserver!: api.ValueObserver;
private _memUsageObserver!: api.ValueObserver;
private _memUsageObserver!: api.UpDownSumObserver;
private _memUtilizationObserver!: api.ValueObserver;
private _networkDroppedObserver!: api.SumObserver;
private _networkErrorsObserver!: api.SumObserver;
private _networkIOObserver!: api.SumObserver;
// once metrics api and exporter is fixed it should be this
// private _memUsageObserver!: api.UpDownSumObserver;

private _updateCpuTime(
observerBatchResult: api.BatchObserverResult,
Expand Down Expand Up @@ -192,7 +190,7 @@ export class HostMetrics extends BaseMetrics {
description: 'Cpu usage time 0-1',
}
);
this._memUsageObserver = this._meter.createValueObserver(
this._memUsageObserver = this._meter.createUpDownSumObserver(
enums.METRIC_NAMES.MEMORY_USAGE,
{
description: 'Memory usage in bytes',
Expand Down
27 changes: 10 additions & 17 deletions packages/opentelemetry-host-metrics/src/stats/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,35 +19,28 @@ import * as os from 'os';
import { CpuUsageData, MemoryData } from '../types';

const MICROSECOND = 1 / 1e6;
let cpuUsage: NodeJS.CpuUsage | undefined;
let cpuUsageTime = 0;

/**
* It returns cpu load delta from last time - to be used with SumObservers.
* When called first time it will return 0 and then delta will be calculated
*/
export function getCpuUsageData(): CpuUsageData {
let timeElapsed = (new Date().getTime() - cpuUsageTime) / 1000;
if (!cpuUsageTime) {
timeElapsed = 0;
cpuUsageTime = new Date().getTime() - process.uptime() * 1000;
}
const elapsedUsage = process.cpuUsage(cpuUsage);
cpuUsage = process.cpuUsage();
let user = elapsedUsage.user * MICROSECOND;
let system = elapsedUsage.system * MICROSECOND;
if (!cpuUsageTime) {
user = 0;
system = 0;
timeElapsed = 1;
}
const idle = timeElapsed - user - system;

const timeElapsed = (new Date().getTime() - cpuUsageTime) / 1000;
const elapsedUsage = process.cpuUsage();

const user = elapsedUsage.user * MICROSECOND;
const system = elapsedUsage.system * MICROSECOND;
const idle = Math.max(0, timeElapsed - user - system);

const userP = user / timeElapsed;
const systemP = system / timeElapsed;
const idleP = idle / timeElapsed;

cpuUsageTime = new Date().getTime();

return {
user: user,
system: system,
Expand All @@ -73,7 +66,7 @@ export function getMemoryData(): MemoryData {
return {
used: used,
free: free,
usedP: usedP, // this is frac part (0-1) not delta
freeP: freeP, // this is frac part (0-1) not delta
usedP: usedP, // this is frac part (0-1)
freeP: freeP, // this is frac part (0-1)
};
}
46 changes: 1 addition & 45 deletions packages/opentelemetry-host-metrics/src/stats/si.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,55 +16,11 @@

import * as SI from 'systeminformation';
import { NetworkData } from '../types';
import { ObjectKeys } from '../util';

const previousNetworkStats: Record<string, Partial<NetworkData>> = {};

/**
* It returns network usage as delta to be able to use with SumObservers.
* With network usage we start counting from 0.
*/
export function getNetworkData() {
return new Promise<NetworkData[]>(resolve => {
const stats: Partial<NetworkData> = {
rx_bytes: 0,
rx_dropped: 0,
rx_errors: 0,
tx_bytes: 0,
tx_dropped: 0,
tx_errors: 0,
};
SI.networkStats()
.then(results => {
const allStats: NetworkData[] = [];
for (let i = 0, j = results.length; i < j; i++) {
const currentStats = Object.assign({}, stats);
let previousStats = previousNetworkStats[results[i].iface];
const firstTime = !previousStats;
if (firstTime) {
previousStats = {};
}

ObjectKeys(stats).forEach(key => {
if (typeof stats[key] === 'number') {
const current = results[i][key] as number;
if (firstTime) {
(previousStats[key] as number) = current;
(currentStats[key] as number) = 0;
} else {
const previous = (previousStats[key] || 0) as number;
(currentStats[key] as number) = current - previous;
(previousStats[key] as number) = current;
}
}
});
currentStats.iface = results[i].iface;
previousNetworkStats[currentStats.iface] = previousStats;
allStats.push(currentStats as NetworkData);
}

resolve(allStats);
})
.then(resolve)
.catch(() => {
resolve([]);
});
Expand Down