/* eslint-disable import/no-absolute-path */ // Telemetría de la unión de suscripciones (fase 12). // // Hasta ahora la única señal de que la unión iba mal era que el mapa se quedaba // viejo: los fallos del worker se registraban con console.error y ahí morían. Lo // que se manda a GlitchTip es deliberadamente poco: un aviso cuando una unión // tarda más de lo que el banco de carga considera sano, otro cuando hay que // degradar la geometría por tamaño, y los fallos. Las uniones normales solo // dejan una línea de log. import * as Sentry from '@sentry/node'; import { Meteor } from 'meteor/meteor'; import ravenLogger from '/imports/startup/server/ravenLogger'; // Medido en bench/union-bench.js: 10.000 suscripciones repartidas por España son // ~40 s. Pasar del minuto significa o mucha más gente, o una distribución que no // se solapa (el caso caro), o algo que se ha torcido. En cualquiera de los tres // casos queremos enterarnos. const DEFAULT_SLOW_MS = 60 * 1000; const slowMs = () => ( (Meteor.settings.private && Meteor.settings.private.unionSlowMs) || DEFAULT_SLOW_MS ); const unionTelemetry = { computed({ kind, isPublic, subs, ms, bytes, degraded }) { const scope = isPublic ? 'public' : 'private'; const line = `subsUnion ${kind} ${scope}: ${subs} subs, ${Math.round(ms)} ms, ${bytes} bytes${degraded ? ` (degradada: ${degraded})` : ''}`; console.log(line); if (ms > slowMs()) { Sentry.captureMessage(`subsUnion lenta: ${Math.round(ms / 1000)} s con ${subs} suscripciones`, { level: 'warning', extra: { kind, scope, subs, ms, bytes } }); } if (degraded) { Sentry.captureMessage(`subsUnion degradada por tamaño: ${degraded}`, { level: 'warning', extra: { kind, scope, subs, ms, bytes, degraded } }); } }, failed(error, context) { ravenLogger.log(error, context); } }; export default unionTelemetry;