receive message

This commit is contained in:
Peter Maquiran
2024-08-08 15:53:00 +01:00
parent 32181caefe
commit 45e829bec3
7 changed files with 120 additions and 30 deletions
@@ -1,4 +1,4 @@
import { err } from 'neverthrow';
import { err, ok } from 'neverthrow';
import { Schema, ZodError } from 'zod';
import { ColoredLoggerService } from '../logger/colored/service';
import { TracingType } from '../monitoring/opentelemetry/tracer';
@@ -73,3 +73,79 @@ export function SafeValidateSchema(schema: Schema, context: string) {
};
}
// export function ParamsValidationSchema(schema:Schema, { either = false, context = "" }) {
// return (
// target: unknown,
// propertyKey: string,
// descriptor: PropertyDescriptor,
// ) => {
// const originalMethod = descriptor.value;
// descriptor.value = function (...args: unknown[]) {
// const tracing: TracingType = args[args.length - 1] as any;
// context = context ? context : tracing?.name;
// try {
// tracing.addEvent("Parameter Validation start")
// const model = schema.parse(args[0]);
// tracing.addEvent("Parameter Validation end")
// args[0] = model;
// return originalMethod.apply(this, args);
// } catch (e) {
// if (e instanceof ZodError) {
// // If validation fails, throw an error with the details
// // Capture the Zod validation error with additional context
// tracing?.setAttribute?.('parameter.error', 'true')
// let i = 0;
// for(const schema of e.errors) {
// tracing?.setAttribute?.('map.error.schema-'+i, JSON.stringify(schema))
// }
// ColoredLoggerService.error(e.errors, 'Unexpected data structure '+ context,'..')
// console.error(args[0])
// tracing.addEvent("Validation parameter error")
// tracing.hasError("Invalid Parameter")
// if(either) {
// return err(e)
// }
// }
// return originalMethod.apply(this, args);
// }
// };
// };
// }
export function ParamsValidation(schema:Schema, args, tracing: TracingType) {
try {
tracing.addEvent("Parameter Validation start")
const model = schema.parse(args);
tracing.addEvent("Parameter Validation end")
args = model;
return ok(true);
} catch (e) {
if (e instanceof ZodError) {
// If validation fails, throw an error with the details
// Capture the Zod validation error with additional context
let i = 0;
for(const schema of e.errors) {
tracing?.setAttribute?.('map.error.schema-'+i, JSON.stringify(schema))
}
tracing.log("zod error "+ tracing?.name, {
zodError: e
})
ColoredLoggerService.error(e.errors, 'Unexpected data structure '+ tracing?.name,'..')
console.error(args)
tracing.addEvent("Validation parameter error")
tracing.hasError("Invalid Parameter")
}
return err(false)
}
}
@@ -7,13 +7,11 @@ import { SessionStore } from 'src/app/store/session.service';
import { environment } from 'src/environments/environment';
import { UseCaseCounter } from './matrix';
import { openTelemetryLogging } from './logging';
// import { context, propagation } from '@opentelemetry/api';
import {
SpanStatus, SpanStatusCode
} from '@opentelemetry/api';
const tracerInstance = OpentelemetryAgendaProvider.getTracer('example-tracer-hole', '111', {})
const tracerNotificationInstance = OpentelemetryNotificationProvider.getTracer('example-tracer-hole', '111', {})
// const logger: ILoggerAdapter = new ColoredLoggerService()
let device: DeviceInfo;
@@ -58,10 +56,12 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
event: {},
tags: {},
status: {} as any,
logs:[]
logs:[],
errors: []
}
const returnObject = {
name,
span: span as any,
tracer: tracerInstance,
tracerId: requestId,
@@ -69,12 +69,10 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
setStatus: (status: SpanStatus) => {
span.setStatus(status);
},
addEvent: (context: string, message?: any, obj?: any) => {
addEvent: (context: string, message: string = "") => {
data.event[context] = message;
const value = [JSON.stringify(message)] as any
span.addEvent(context, value);
span.addEvent(context, message as any);
},
LocalLogEvent:(context: string, message: any, obj: any) => {
data.tags[context] = message;
@@ -84,7 +82,9 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
span.setAttribute(key, value);
if(key =='outcome' && value == 'failed') {
returnObject.hasError('error')
if(data.errors.length == 0) {
returnObject.hasError('error')
}
if(!autoFinish) {
returnObject.finish()
}
@@ -130,6 +130,7 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
if(finish) return
if(environment.apiURL != 'https://gdqas-api.oapr.gov.ao/api/') {
span.setAttribute('error.list', data.errors.join(','))
span.end();
UseCaseCounter.add(1, {user: SessionStore?.user?.FullName, outcome:data.tags['outcome'] || data.status?.code , usecase: name})
}
@@ -141,11 +142,9 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
finish = true
},
hasError:(message: string) => {
if(data.status?.code != SpanStatusCode.ERROR) {
data.status = {code: SpanStatusCode.ERROR, message}
span.setStatus({code: SpanStatusCode.ERROR, message})
span.setAttribute('outcome','failed')
}
data.errors.push(message)
data.status = {code: SpanStatusCode.ERROR, message}
span.setStatus({code: SpanStatusCode.ERROR, message})
},
createSpan: (name, parent?: any) => {
return tracerInstance.startSpan(name, { root: false }, parent) as Span;
@@ -239,6 +238,7 @@ export function XTracer({ name, bugPrint, module, autoFinish = true, daley =0 })
}
export type TracingType = {
name: string,
span: Span;
tracer: Tracer;
tracerId: string;