@@ -259,28 +259,52 @@ type QueryRangeResponse struct {
259259 } `json:"data"`
260260}
261261
262- // fetchLogs is a method to fetch logs from Loki API
263- func (c * Client ) fetchLogs (ctx context.Context , query , startRFC3339 , endRFC3339 string , limit int , direction string ) ([]LogStream , error ) {
264- params := url.Values {}
265- params .Add ("query" , query )
266-
267- // Convert RFC3339 timestamps to Unix nanoseconds if provided
262+ // addTimeRangeParams adds start and end time parameters to the URL values
263+ // It handles conversion from RFC3339 to Unix nanoseconds
264+ func addTimeRangeParams (params url.Values , startRFC3339 , endRFC3339 string ) error {
268265 if startRFC3339 != "" {
269266 startTime , err := time .Parse (time .RFC3339 , startRFC3339 )
270267 if err != nil {
271- return nil , fmt .Errorf ("parsing start time: %w" , err )
268+ return fmt .Errorf ("parsing start time: %w" , err )
272269 }
273270 params .Add ("start" , fmt .Sprintf ("%d" , startTime .UnixNano ()))
274271 }
275272
276273 if endRFC3339 != "" {
277274 endTime , err := time .Parse (time .RFC3339 , endRFC3339 )
278275 if err != nil {
279- return nil , fmt .Errorf ("parsing end time: %w" , err )
276+ return fmt .Errorf ("parsing end time: %w" , err )
280277 }
281278 params .Add ("end" , fmt .Sprintf ("%d" , endTime .UnixNano ()))
282279 }
283280
281+ return nil
282+ }
283+
284+ // getDefaultTimeRange returns default start and end times if not provided
285+ // Returns start time (1 hour ago) and end time (now) in RFC3339 format
286+ func getDefaultTimeRange (startRFC3339 , endRFC3339 string ) (string , string ) {
287+ if startRFC3339 == "" {
288+ // Default to 1 hour ago if not specified
289+ startRFC3339 = time .Now ().Add (- 1 * time .Hour ).Format (time .RFC3339 )
290+ }
291+ if endRFC3339 == "" {
292+ // Default to now if not specified
293+ endRFC3339 = time .Now ().Format (time .RFC3339 )
294+ }
295+ return startRFC3339 , endRFC3339
296+ }
297+
298+ // fetchLogs is a method to fetch logs from Loki API
299+ func (c * Client ) fetchLogs (ctx context.Context , query , startRFC3339 , endRFC3339 string , limit int , direction string ) ([]LogStream , error ) {
300+ params := url.Values {}
301+ params .Add ("query" , query )
302+
303+ // Add time range parameters
304+ if err := addTimeRangeParams (params , startRFC3339 , endRFC3339 ); err != nil {
305+ return nil , err
306+ }
307+
284308 if limit > 0 {
285309 params .Add ("limit" , fmt .Sprintf ("%d" , limit ))
286310 }
@@ -342,17 +366,8 @@ func queryLokiLogs(ctx context.Context, args QueryLokiLogsParams) ([]LogEntry, e
342366 return nil , fmt .Errorf ("creating Loki client: %w" , err )
343367 }
344368
345- // Set default time range if not provided
346- startTime := args .StartRFC3339
347- endTime := args .EndRFC3339
348- if startTime == "" {
349- // Default to 1 hour ago if not specified
350- startTime = time .Now ().Add (- 1 * time .Hour ).Format (time .RFC3339 )
351- }
352- if endTime == "" {
353- // Default to now if not specified
354- endTime = time .Now ().Format (time .RFC3339 )
355- }
369+ // Get default time range if not provided
370+ startTime , endTime := getDefaultTimeRange (args .StartRFC3339 , args .EndRFC3339 )
356371
357372 // Apply limit constraints
358373 limit := enforceLogLimit (args .Limit )
@@ -408,21 +423,9 @@ func (c *Client) fetchStats(ctx context.Context, query, startRFC3339, endRFC3339
408423 params := url.Values {}
409424 params .Add ("query" , query )
410425
411- // Convert RFC3339 timestamps to Unix nanoseconds if provided
412- if startRFC3339 != "" {
413- startTime , err := time .Parse (time .RFC3339 , startRFC3339 )
414- if err != nil {
415- return nil , fmt .Errorf ("parsing start time: %w" , err )
416- }
417- params .Add ("start" , fmt .Sprintf ("%d" , startTime .UnixNano ()))
418- }
419-
420- if endRFC3339 != "" {
421- endTime , err := time .Parse (time .RFC3339 , endRFC3339 )
422- if err != nil {
423- return nil , fmt .Errorf ("parsing end time: %w" , err )
424- }
425- params .Add ("end" , fmt .Sprintf ("%d" , endTime .UnixNano ()))
426+ // Add time range parameters
427+ if err := addTimeRangeParams (params , startRFC3339 , endRFC3339 ); err != nil {
428+ return nil , err
426429 }
427430
428431 bodyBytes , err := c .makeRequest (ctx , "GET" , "/loki/api/v1/index/stats" , params )
@@ -454,17 +457,8 @@ func queryLokiStats(ctx context.Context, args QueryLokiStatsParams) (*Stats, err
454457 return nil , fmt .Errorf ("creating Loki client: %w" , err )
455458 }
456459
457- // Set default time range if not provided
458- startTime := args .StartRFC3339
459- endTime := args .EndRFC3339
460- if startTime == "" {
461- // Default to 1 hour ago if not specified
462- startTime = time .Now ().Add (- 1 * time .Hour ).Format (time .RFC3339 )
463- }
464- if endTime == "" {
465- // Default to now if not specified
466- endTime = time .Now ().Format (time .RFC3339 )
467- }
460+ // Get default time range if not provided
461+ startTime , endTime := getDefaultTimeRange (args .StartRFC3339 , args .EndRFC3339 )
468462
469463 stats , err := client .fetchStats (ctx , args .LogQL , startTime , endTime )
470464 if err != nil {
0 commit comments