@@ -131,24 +131,22 @@ const defaultReadWindow = 5 * time.Minute
131131const maxReadLimit = 1000
132132
133133// ReadTelemetryEvents handles GET /telemetry/events.
134- // Reads archived telemetry envelopes for the current session from durable S2
135- // storage, applies category and limit filters, and returns them in ascending
136- // sequence order. Returns an empty list when S2 storage is not configured.
134+ // Reads archived telemetry envelopes for this browser from durable S2 storage,
135+ // applies category and limit filters, and returns them in ascending sequence
136+ // order. Returns an empty list when S2 storage is not configured.
137137func (s * ApiService ) ReadTelemetryEvents (ctx context.Context , req oapi.ReadTelemetryEventsRequestObject ) (oapi.ReadTelemetryEventsResponseObject , error ) {
138138 log := logger .FromContext (ctx )
139139
140140 if ! s .s2Enabled () {
141141 return readTelemetryEventsOKResponse {}, nil
142142 }
143143
144- startSeq := s .telemetrySession .SessionStartSeq ()
145144 envs , err := events .Read (ctx , s .s2Basin , s .s2AccessToken , s .s2Stream , buildReadOptions (req .Params ), log )
146145 if err != nil {
147146 log .Error ("failed to read telemetry events from S2" , "err" , err )
148147 return oapi.ReadTelemetryEvents500JSONResponse {InternalErrorJSONResponse : oapi.InternalErrorJSONResponse {Message : "failed to read telemetry events" }}, nil
149148 }
150149
151- envs = dropPriorSessions (envs , startSeq )
152150 envs = filterByCategory (envs , req .Params .Category )
153151 envs = capLimit (envs , req .Params .Limit )
154152
@@ -174,21 +172,6 @@ func buildReadOptions(p oapi.ReadTelemetryEventsParams) events.ReadOptions {
174172 return opts
175173}
176174
177- // dropPriorSessions removes envelopes from before the current session's start.
178- // startSeq is 0 when no session has run, in which case nothing is dropped.
179- func dropPriorSessions (envs []events.Envelope , startSeq uint64 ) []events.Envelope {
180- if startSeq == 0 {
181- return envs
182- }
183- out := make ([]events.Envelope , 0 , len (envs ))
184- for _ , e := range envs {
185- if e .Seq >= startSeq {
186- out = append (out , e )
187- }
188- }
189- return out
190- }
191-
192175func filterByCategory (envs []events.Envelope , cats * []oapi.TelemetryEventCategory ) []events.Envelope {
193176 if cats == nil || len (* cats ) == 0 {
194177 return envs
@@ -206,13 +189,15 @@ func filterByCategory(envs []events.Envelope, cats *[]oapi.TelemetryEventCategor
206189 return out
207190}
208191
192+ // capLimit returns at most n envelopes, keeping the most recent when the set
193+ // exceeds the limit. Order is preserved (ascending sequence).
209194func capLimit (envs []events.Envelope , limit * int ) []events.Envelope {
210195 n := maxReadLimit
211196 if limit != nil && * limit > 0 && * limit < n {
212197 n = * limit
213198 }
214199 if len (envs ) > n {
215- return envs [: n ]
200+ return envs [len ( envs ) - n : ]
216201 }
217202 return envs
218203}
0 commit comments