domotz-remote-pawn
Version:
Domotz Agent
86 lines (75 loc) • 3 kB
JavaScript
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;