UNPKG

domotz-remote-pawn

Version:

Domotz Agent

86 lines (75 loc) 3 kB
var sentryManager = function (resourceLocator) { const settingsManager = resourceLocator.settingsManager; const sentry = resourceLocator.sentry; const errorCounter = resourceLocator.utils.errorCounter; const myConsole = resourceLocator.log.decorateLogs(); let sentReports = 0; function isEnabled() { return settingsManager.getSetting('configuration.settings.sentry_configurations.enabled', false); } function getDsn() { return settingsManager.getSetting('configuration.settings.sentry_configurations.dsn', null); } function getMaxReportPerDays() { return parseInt(settingsManager.getSetting('configuration.settings.sentry_configurations.max_reports_per_day', 0)); } function getTracesSampleRate() { let floatSampleRate = parseFloat(settingsManager.getSetting('configuration.settings.sentry_configurations.traces_sample_rate', 1)); return Math.floor(floatSampleRate * 100) / 100; } function initializeSentry() { if (isEnabled()) { sentry.init({ dsn: getDsn(), tracesSampleRate: getTracesSampleRate(), }); setContext(); setUser(); } } function setContext() { if (isEnabled()) { const configuration = resourceLocator.configuration; const platform = resourceLocator.utils.platform; const pkgJson = resourceLocator.pkg.json; sentry.setContext('agent', { api_endpoint: configuration.engine.api_endpoints.agent, agent_id: configuration.id, platform: platform.getFullPlatform(), agent_version: pkgJson.version, pkg_version: process.env.DVERSION, }); } } function setUser() { if (isEnabled()) { const configuration = resourceLocator.configuration; sentry.setUser({ id: configuration.credentials.user }); } } function captureException(error) { if (!isEnabled()) { myConsole.warn('Sentry is not enabled for this platform'); return; } if (errorCounter.getIgnoredErrorsCode().includes(error.code) || errorCounter.getShutdownErrorsCode().includes(error.code)) { myConsole.warn('Ignoring %s message: %s', error.code, error.message); errorCounter.addToIgnoredErrorsCounter(error.code); return; } if (sentReports > getMaxReportPerDays()) { myConsole.warn('Ignoring error %s for reached max report per days: %s', error.code, sendedReports - 1); return; } sentry.captureException(error); sentReports += 1; } return { initializeSentry: initializeSentry, captureException: captureException, setContext: setContext, setUser: setUser, isEnabled: isEnabled, }; }; module.exports.factory = sentryManager;