42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
|
|
function envFlag(value, fallback = false) {
|
||
|
|
const raw = String(value ?? '').trim().toLowerCase();
|
||
|
|
if (!raw) return fallback;
|
||
|
|
return ['1', 'true', 'yes', 'on'].includes(raw);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isSessionBrokerMetricsEnabled(env = process.env) {
|
||
|
|
return envFlag(env.MEMIND_SESSION_BROKER_METRICS, false);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function formatSessionBrokerMetric(metric, fields = {}) {
|
||
|
|
return `[session_broker.${metric}] ${JSON.stringify({
|
||
|
|
metric: `session_broker.${metric}`,
|
||
|
|
...fields,
|
||
|
|
})}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function createSessionBrokerMetrics({
|
||
|
|
logger = console,
|
||
|
|
enabled = isSessionBrokerMetricsEnabled(),
|
||
|
|
} = {}) {
|
||
|
|
function emit(metric, fields = {}) {
|
||
|
|
if (!enabled) return;
|
||
|
|
const line = formatSessionBrokerMetric(metric, fields);
|
||
|
|
if (typeof logger.info === 'function') logger.info(line);
|
||
|
|
else logger.log(line);
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
enabled,
|
||
|
|
ownershipDenied(fields) {
|
||
|
|
emit('ownership.denied', fields);
|
||
|
|
},
|
||
|
|
registerDuplicate(fields) {
|
||
|
|
emit('register.duplicate', fields);
|
||
|
|
},
|
||
|
|
resolveTargetMiss(fields) {
|
||
|
|
emit('resolve_target.miss', fields);
|
||
|
|
},
|
||
|
|
};
|
||
|
|
}
|