feat: update Telemetry import paths and add CaptureSpan decorator for enhanced telemetry tracking

This commit is contained in:
Simon Larsen 2025-03-14 14:30:01 +00:00
parent e45477fce8
commit 521e9ca1ed
No known key found for this signature in database
GPG key ID: 96C5DCA24769DBCA
7 changed files with 50 additions and 4 deletions

View file

@ -1,5 +1,5 @@
import App from "./App";
import Telemetry from "Common/UI/Utils/Telemetry";
import Telemetry from "Common/UI/Utils/Telemetry/Telemetry";
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";

View file

@ -1,5 +1,5 @@
import App from "./App";
import Telemetry from "Common/UI/Utils/Telemetry";
import Telemetry from "Common/UI/Utils/Telemetry/Telemetry";
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";

View file

@ -5,6 +5,7 @@ import { ClickhouseAppInstance } from "./ClickhouseDatabase";
import PostgresAppInstance from "./PostgresDatabase";
import Redis from "./Redis";
import DatabaseNotConnectedException from "Common/Types/Exception/DatabaseNotConnectedException";
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
export default class InfrastructureStatus {
public static async checkStatus(data: {
@ -42,6 +43,7 @@ export default class InfrastructureStatus {
}
}
@CaptureSpan("Check Infrastructure Status With Retry")
public static async checkStatusWithRetry(data: {
retryCount: number;
checkRedisStatus: boolean;

View file

@ -0,0 +1,43 @@
import Telemetry from "../Telemetry";
import { Span } from "@opentelemetry/api";
function CaptureSpan(name: string) {
return function (
_target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
const originalMethod = descriptor.value;
descriptor.value = async function (...args: any[]) {
const attributes = args.reduce((acc: { [key: string]: any }, arg: any, index: number) => {
acc[`arg${index}`] = arg;
return acc;
}, {});
return await Telemetry.startActiveSpan<Promise<void>>({
name: name || propertyKey,
options: {
attributes: attributes,
},
fn: async (span: Span): Promise<void> => {
try {
await originalMethod.apply(this, args);
} catch (err) {
Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan({
span,
exception: err,
});
throw err;
} finally {
span.end();
}
},
});
};
return descriptor;
};
}
export default CaptureSpan;

View file

@ -1,5 +1,5 @@
import App from "./App";
import Telemetry from "Common/UI/Utils/Telemetry";
import Telemetry from "Common/UI/Utils/Telemetry/Telemetry";
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";

View file

@ -19,6 +19,7 @@ app.use([`/${APP_NAME}`, "/"], OTelIngestAPI);
const init: PromiseVoidFunction = async (): Promise<void> => {
try {
const statusCheck: PromiseVoidFunction = async (): Promise<void> => {
return await InfrastructureStatus.checkStatusWithRetry({
checkClickhouseStatus: true,

View file

@ -1,5 +1,5 @@
import App from "./App";
import Telemetry from "Common/UI/Utils/Telemetry";
import Telemetry from "Common/UI/Utils/Telemetry/Telemetry";
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";