Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
573 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# <%= name %> | ||
|
||
<%= description %> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
{ | ||
"name": "@webda/otel", | ||
"version": "3.0.0", | ||
"description": "OpenTelemetry module", | ||
"main": "lib/index.js", | ||
"type": "module", | ||
"scripts": { | ||
"build": "webda build", | ||
"pretest": "npm run build", | ||
"test": "c8 mocha --recursive --exit --timeout=100000 src/**/*.spec.ts", | ||
"test:debug": "mocha --recursive --exit --timeout=100000 src/**/*.spec.ts", | ||
"new-model": "webda init webda:model", | ||
"new-service": "webda init webda:service" | ||
}, | ||
"keywords": [ | ||
"webda-module" | ||
], | ||
"files": [ | ||
"lib", | ||
"webda.module.json", | ||
"package.json" | ||
], | ||
"dependencies": { | ||
"@opentelemetry/api": "^1.7.0", | ||
"@opentelemetry/api-logs": "^0.45.1", | ||
"@opentelemetry/auto-instrumentations-node": "^0.40.0", | ||
"@opentelemetry/exporter-logs-otlp-grpc": "^0.45.1", | ||
"@opentelemetry/exporter-metrics-otlp-proto": "^0.45.1", | ||
"@opentelemetry/sdk-logs": "^0.45.1", | ||
"@opentelemetry/sdk-metrics": "^1.18.1", | ||
"@opentelemetry/sdk-node": "^0.45.1", | ||
"@types/node": "^20.8.7", | ||
"@webda/core": "^3.7.0" | ||
}, | ||
"devDependencies": { | ||
"@testdeck/mocha": "^0.3.3", | ||
"@types/node": "^20.8.7", | ||
"@webda/shell": "^3.5.0", | ||
"c8": "^8.0.1", | ||
"glob": "^10.3.10", | ||
"js-beautify": "^1.14.9", | ||
"mocha": "^10.2.0", | ||
"prettier": "^3.0.3", | ||
"source-map-support": "^0.5.21", | ||
"ts-node": "^10.9.1", | ||
"typescript": "^5.2.2" | ||
}, | ||
"c8": { | ||
"extends": "@istanbuljs/nyc-config-typescript", | ||
"report-dir": "./reports", | ||
"reporter": [ | ||
"html", | ||
"lcov", | ||
"json" | ||
], | ||
"exclude": [ | ||
"**/*.spec.ts", | ||
"test/**/*" | ||
] | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/loopingz/webda.io/issues" | ||
}, | ||
"homepage": "https://github.com/loopingz/webda.io#readme", | ||
"repository": "git://github.com/loopingz/webda.io.git", | ||
"license": "MIT" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// Export all objects from here to expose them to other modules | ||
export * from "./otel"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
import { DiagLogLevel, diag } from "@opentelemetry/api"; | ||
import { suite, test } from "@testdeck/mocha"; | ||
import { ResourceService, Service } from "@webda/core"; | ||
import { WebdaSimpleTest } from "@webda/core/lib/test"; | ||
import * as assert from "assert"; | ||
import { OtelLogger, OtelService } from "./otel"; | ||
|
||
class FakeService extends Service { | ||
myRecursiveMethod(i: number = 0) { | ||
if (i > 3) { | ||
return 3; | ||
} | ||
return this.myRecursiveMethod(i + 1); | ||
} | ||
|
||
myFaultyMethod() { | ||
throw new Error("Fake"); | ||
} | ||
} | ||
|
||
@suite | ||
class OtelTest extends WebdaSimpleTest { | ||
@test | ||
async test() { | ||
let resource = await this.registerService( | ||
new ResourceService(this.webda, "ResourceService", { folder: "./src", url: "/" }) | ||
) | ||
.resolve() | ||
.init(); | ||
let fake = await this.registerService(new FakeService(this.webda, "fake", {})) | ||
.resolve() | ||
.init(); | ||
let service = await this.registerService(new OtelService(this.webda, "otel", {})) | ||
.resolve() | ||
.init(); | ||
|
||
let ctx = await this.newContext(); | ||
await this.execute(ctx, "test.webda.io", "GET", "/otel.ts"); | ||
fake.myRecursiveMethod(); | ||
assert.throws(() => fake.myFaultyMethod()); | ||
delete service.getParameters().traceExporter; | ||
await service.reinit({ traceExporter: { type: "otlp", enable: false } }); | ||
await service.reinit({ traceExporter: { type: "otlp", enable: true } }); | ||
// Ensure to be able to stop | ||
await service.stop(); | ||
} | ||
|
||
@test | ||
async otelLogger() { | ||
let out = this.webda.getApplication().getWorkerOutput(); | ||
new OtelLogger({ emit: () => {} }, out); | ||
out.log("INFO", "test"); | ||
await this.nextTick(2); | ||
} | ||
|
||
@test | ||
async getDiagLevel() { | ||
const service = new OtelService(this.webda, "otel", { diagnostic: "ALL" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.ALL); | ||
|
||
service.reinit({ diagnostic: "ERROR" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.ERROR); | ||
|
||
service.reinit({ diagnostic: "INFO" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.INFO); | ||
|
||
service.reinit({ diagnostic: "TRACE" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.VERBOSE); | ||
|
||
service.reinit({ diagnostic: "WARN" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.WARN); | ||
|
||
service.reinit({ diagnostic: "DEBUG" }); | ||
assert.strictEqual(service.getDiagLevel(), DiagLogLevel.DEBUG); | ||
|
||
diag.verbose("test"); | ||
diag.debug("test"); | ||
diag.error("test"); | ||
diag.warn("test"); | ||
diag.info("test"); | ||
|
||
await this.nextTick(2); | ||
} | ||
} |
Oops, something went wrong.