import MetricService, { LabelValues } from "../services/metric.service"; export const MonitoringSection = (sectionName: string, labels: LabelValues) => (target: any, memberName: string, descriptor: PropertyDescriptor) => { const metricService = MetricService.getInstance(); const originalFn: Function = target[memberName]; const newFn = async function (this: any, ...args: any[]): Promise { const endTimer = metricService.startSection(sectionName); let success = true; try { return await originalFn.apply(this, args); } catch (err) { success = false; throw err; } finally { endTimer(success, labels); } }; descriptor.value = newFn; };