@@ -65,7 +65,6 @@ type TerseLogEntry struct {
6565type SearchResult = buildkitelogs.SearchResult
6666type FileInfo struct {
6767 buildkitelogs.ParquetFileInfo
68- CacheFile string `json:"cache_file"`
6968}
7069
7170type LogResponse struct {
@@ -82,18 +81,14 @@ type SearchOptions = buildkitelogs.SearchOptions
8281
8382// Real implementation using buildkite-logs-parquet library with injected client
8483func newParquetReader (ctx context.Context , client BuildkiteLogsClient , params JobLogsBaseParams ) (* buildkitelogs.ParquetReader , error ) {
85- // Parse cache TTL
8684 ttl := parseCacheTTL (params .CacheTTL )
8785
88- // Download and cache the logs using injected client
8986 cacheFilePath , err := client .DownloadAndCache (ctx , params .OrgSlug , params .PipelineSlug , params .BuildNumber , params .JobID , ttl , params .ForceRefresh )
9087 if err != nil {
9188 return nil , fmt .Errorf ("failed to download/cache logs: %w" , err )
9289 }
9390
94- // Create parquet reader from cached file
95- reader := buildkitelogs .NewParquetReader (cacheFilePath )
96- return reader , nil
91+ return buildkitelogs .NewParquetReader (cacheFilePath ), nil
9792}
9893
9994func parseCacheTTL (ttlStr string ) time.Duration {
@@ -210,18 +205,15 @@ func SearchLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToo
210205 attribute .Int ("limit" , params .Limit ),
211206 )
212207
213- // Validate search pattern
214208 if err := validateSearchPattern (params .Pattern ); err != nil {
215209 return mcp .NewToolResultError (err .Error ()), nil
216210 }
217211
218- // Create parquet reader
219212 reader , err := newParquetReader (ctx , client , params .JobLogsBaseParams )
220213 if err != nil {
221214 return mcp .NewToolResultError (fmt .Sprintf ("Failed to create log reader: %v" , err )), nil
222215 }
223216
224- // Build search options
225217 opts := SearchOptions {
226218 Pattern : params .Pattern ,
227219 CaseSensitive : params .CaseSensitive ,
@@ -232,7 +224,6 @@ func SearchLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToo
232224 AfterContext : params .AfterContext ,
233225 }
234226
235- // Perform search using iterator
236227 var results []SearchResult
237228 count := 0
238229 for result , err := range reader .SearchEntriesIter (opts ) {
@@ -316,25 +307,18 @@ func TailLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToolH
316307 attribute .Int ("tail" , params .Tail ),
317308 )
318309
319- // Create parquet reader
320310 reader , err := newParquetReader (ctx , client , params .JobLogsBaseParams )
321311 if err != nil {
322312 return mcp .NewToolResultError (fmt .Sprintf ("Failed to create log reader: %v" , err )), nil
323313 }
324314
325- // Get file info first to calculate tail position
326315 fileInfo , err := reader .GetFileInfo ()
327316 if err != nil {
328317 return mcp .NewToolResultError (fmt .Sprintf ("Failed to get file info: %v" , err )), nil
329318 }
330319
331- // Calculate starting position for tail
332- startRow := fileInfo .RowCount - int64 (params .Tail )
333- if startRow < 0 {
334- startRow = 0
335- }
320+ startRow := max (fileInfo .RowCount - int64 (params .Tail ), 0 )
336321
337- // Get tail entries using SeekToRow
338322 var entries []buildkitelogs.ParquetLogEntry
339323 for entry , err := range reader .SeekToRow (startRow ) {
340324 if err != nil {
@@ -401,28 +385,18 @@ func GetLogsInfo(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedTo
401385 attribute .String ("job_id" , params .JobID ),
402386 )
403387
404- // Create parquet reader
405388 reader , err := newParquetReader (ctx , client , params )
406389 if err != nil {
407390 return mcp .NewToolResultError (fmt .Sprintf ("Failed to create log reader: %v" , err )), nil
408391 }
409392
410- // Get file info
411393 libFileInfo , err := reader .GetFileInfo ()
412394 if err != nil {
413395 return mcp .NewToolResultError (fmt .Sprintf ("Failed to get file info: %v" , err )), nil
414396 }
415397
416- // Get cache file path
417- cacheFile , err := buildkitelogs .GetCacheFilePath (params .OrgSlug , params .PipelineSlug , params .BuildNumber , params .JobID )
418- if err != nil {
419- return mcp .NewToolResultError (fmt .Sprintf ("Failed to get cache file path: %v" , err )), nil
420- }
421-
422- // Create our response with additional cache file info
423398 fileInfo := & FileInfo {
424399 ParquetFileInfo : * libFileInfo ,
425- CacheFile : cacheFile ,
426400 }
427401
428402 queryTime := time .Since (startTime )
@@ -487,17 +461,14 @@ func ReadLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToolH
487461 attribute .Int ("limit" , params .Limit ),
488462 )
489463
490- // Create parquet reader
491464 reader , err := newParquetReader (ctx , client , params .JobLogsBaseParams )
492465 if err != nil {
493466 return mcp .NewToolResultError (fmt .Sprintf ("Failed to create log reader: %v" , err )), nil
494467 }
495468
496- // Read entries with seek and limit
497469 var entries []buildkitelogs.ParquetLogEntry
498470 count := 0
499471
500- // Choose iterator based on seek parameter
501472 var entryIter iter.Seq2 [buildkitelogs.ParquetLogEntry , error ]
502473 if params .Seek > 0 {
503474 entryIter = reader .SeekToRow (int64 (params .Seek ))
0 commit comments