@@ -4,15 +4,8 @@ import config from "../config.js";
44import logger from "../logger.js" ;
55import { mongoLogId } from "mongodb-log-writer" ;
66import { ApiClient } from "../common/atlas/apiClient.js" ;
7- import fs from "fs/promises" ;
8- import path from "path" ;
97import { MACHINE_METADATA } from "./constants.js" ;
10-
11- const CACHE_FILE = path . join ( process . cwd ( ) , ".telemetry-cache.json" ) ;
12-
13- interface TelemetryError extends Error {
14- code ?: string ;
15- }
8+ import { EventCache } from "./eventCache.js" ;
169
1710type EventResult = {
1811 success : boolean ;
@@ -57,7 +50,6 @@ export class Telemetry {
5750 return false ;
5851 }
5952
60- // Check for DO_NOT_TRACK environment variable as per https://consoledonottrack.com/
6153 const doNotTrack = process . env . DO_NOT_TRACK ;
6254 if ( doNotTrack ) {
6355 const value = doNotTrack . toLowerCase ( ) ;
@@ -135,38 +127,34 @@ export class Telemetry {
135127 }
136128
137129 /**
138- * Reads cached events from disk
139- * Returns empty array if no cache exists or on read error
130+ * Reads cached events from memory
131+ * Returns empty array if no cache exists
140132 */
141133 private async readCache ( ) : Promise < BaseEvent [ ] > {
142134 try {
143- const data = await fs . readFile ( CACHE_FILE , "utf-8" ) ;
144- return JSON . parse ( data ) as BaseEvent [ ] ;
135+ return EventCache . getInstance ( ) . getEvents ( ) ;
145136 } catch ( error ) {
146- const typedError = error as TelemetryError ;
147- if ( typedError . code !== "ENOENT" ) {
148- logger . warning (
149- mongoLogId ( 1_000_000 ) ,
150- "telemetry" ,
151- `Error reading telemetry cache: ${ typedError . message } `
152- ) ;
153- }
137+ logger . warning (
138+ mongoLogId ( 1_000_000 ) ,
139+ "telemetry" ,
140+ `Error reading telemetry cache from memory: ${ error instanceof Error ? error . message : String ( error ) } `
141+ ) ;
154142 return [ ] ;
155143 }
156144 }
157145
158146 /**
159- * Caches events to disk for later sending
147+ * Caches events in memory for later sending
160148 */
161149 private async cacheEvents ( events : BaseEvent [ ] ) : Promise < void > {
162150 try {
163- await fs . writeFile ( CACHE_FILE , JSON . stringify ( events , null , 2 ) ) ;
164- logger . debug ( mongoLogId ( 1_000_000 ) , "telemetry" , `Cached ${ events . length } events for later sending` ) ;
151+ EventCache . getInstance ( ) . setEvents ( events ) ;
152+ logger . debug ( mongoLogId ( 1_000_000 ) , "telemetry" , `Cached ${ events . length } events in memory for later sending` ) ;
165153 } catch ( error ) {
166154 logger . warning (
167155 mongoLogId ( 1_000_000 ) ,
168156 "telemetry" ,
169- `Failed to cache telemetry events: ${ error instanceof Error ? error . message : String ( error ) } `
157+ `Failed to cache telemetry events in memory : ${ error instanceof Error ? error . message : String ( error ) } `
170158 ) ;
171159 }
172160 }
@@ -176,16 +164,14 @@ export class Telemetry {
176164 */
177165 private async clearCache ( ) : Promise < void > {
178166 try {
179- await fs . unlink ( CACHE_FILE ) ;
167+ EventCache . getInstance ( ) . clearEvents ( ) ;
168+ logger . debug ( mongoLogId ( 1_000_000 ) , "telemetry" , "In-memory telemetry cache cleared" ) ;
180169 } catch ( error ) {
181- const typedError = error as TelemetryError ;
182- if ( typedError . code !== "ENOENT" ) {
183- logger . warning (
184- mongoLogId ( 1_000_000 ) ,
185- "telemetry" ,
186- `Error clearing telemetry cache: ${ typedError . message } `
187- ) ;
188- }
170+ logger . warning (
171+ mongoLogId ( 1_000_000 ) ,
172+ "telemetry" ,
173+ `Error clearing in-memory telemetry cache: ${ error instanceof Error ? error . message : String ( error ) } `
174+ ) ;
189175 }
190176 }
191177}
0 commit comments