diff --git a/lib/services/tracking/Tracker.js b/lib/services/tracking/Tracker.js index 2e212f2..0889f92 100644 --- a/lib/services/tracking/Tracker.js +++ b/lib/services/tracking/Tracker.js @@ -15,55 +15,67 @@ const deviceId = getUniqueId() || 'N/A'; const version = await getPackageVersion(); const FREDY_TRACKING_URL = 'https://fredy.orange-coding.net/tracking'; -export const trackMainEvent = async () => { +const staticTrackingData = { + operatingSystem: os.platform(), + osVersion: os.release(), + arch: process.arch, + language: process.env.LANG || 'en', + nodeVersion: process.version || 'N/A', + deviceId, + version, +}; + +const shouldTrack = async () => { + const settings = await getSettings(); + return settings.analyticsEnabled && !inDevMode(); +}; + +const sendTrackingData = async (endpoint, payload) => { try { - const settings = await getSettings(); - if (settings.analyticsEnabled && !inDevMode()) { - const activeProvider = new Set(); - const activeAdapter = new Set(); - - const jobs = getJobs(); - - if (jobs != null && jobs.length > 0) { - jobs.forEach((job) => { - job.provider.forEach((provider) => activeProvider.add(provider.id)); - job.notificationAdapter.forEach((adapter) => activeAdapter.add(adapter.id)); - }); - - const trackingObj = enrichTrackingObject({ - adapter: Array.from(activeAdapter), - provider: Array.from(activeProvider), - }); - - await fetch(`${FREDY_TRACKING_URL}/main`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(trackingObj), - }); - } + const response = await fetch(`${FREDY_TRACKING_URL}${endpoint}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: payload ? JSON.stringify(payload) : undefined, + }); + if (!response.ok) { + logger.warn(`Error sending tracking data to ${endpoint}. Status: ${response.status}`); } } catch (error) { - logger.warn('Error sending tracking data', error); + logger.warn(`Error sending tracking data to ${endpoint}`, error); + } +}; + +export const trackMainEvent = async () => { + if (!(await shouldTrack())) return; + + const activeProvider = new Set(); + const activeAdapter = new Set(); + + const jobs = getJobs(); + + if (jobs != null && jobs.length > 0) { + jobs.forEach((job) => { + job.provider.forEach((provider) => activeProvider.add(provider.id)); + job.notificationAdapter.forEach((adapter) => activeAdapter.add(adapter.id)); + }); + + const trackingObj = await enrichTrackingObject({ + adapter: Array.from(activeAdapter), + provider: Array.from(activeProvider), + }); + + await sendTrackingData('/main', trackingObj); } }; export const trackFeature = async (feature) => { - try { - const settings = await getSettings(); - if (settings.analyticsEnabled && !inDevMode()) { - const trackingObj = await enrichTrackingObject({ - feature, - }); + if (!(await shouldTrack())) return; - await fetch(`${FREDY_TRACKING_URL}/feature`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(trackingObj), - }); - } - } catch (error) { - logger.warn('Error tracking feature', error); - } + const trackingObj = await enrichTrackingObject({ + feature, + }); + + await sendTrackingData('/feature', trackingObj); }; /** @@ -72,34 +84,17 @@ export const trackFeature = async (feature) => { export async function trackDemoAccessed() { const settings = await getSettings(); if (settings.analyticsEnabled && !inDevMode() && settings.demoMode) { - try { - await fetch(`${FREDY_TRACKING_URL}/demo/accessed`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - }); - } catch (error) { - logger.warn('Error sending tracking data', error); - } + const trackingObj = await enrichTrackingObject({}); + await sendTrackingData('/demo/accessed', trackingObj); } } async function enrichTrackingObject(trackingObject) { const settings = await getSettings(); - const operatingSystem = os.platform(); - const osVersion = os.release(); - const arch = process.arch; - const language = process.env.LANG || 'en'; - const nodeVersion = process.version || 'N/A'; return { ...trackingObject, + ...staticTrackingData, isDemo: settings.demoMode, - operatingSystem, - osVersion, - arch, - nodeVersion, - language, - deviceId, - version, }; } diff --git a/package.json b/package.json index e9d2cbb..b7efad3 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fredy", - "version": "19.3.5", + "version": "19.3.6", "description": "[F]ind [R]eal [E]states [d]amn eas[y].", "scripts": { "prepare": "husky",