@@ -7,18 +7,14 @@ import (
77
88 "github.com/grafana/loki/pkg/logproto"
99 "go.uber.org/zap"
10- "google.golang.org/protobuf/types/known/timestamppb"
1110
1211 "github.com/e2b-dev/infra/packages/api/internal/api"
1312 clickhouse "github.com/e2b-dev/infra/packages/clickhouse/pkg"
1413 clickhouseutils "github.com/e2b-dev/infra/packages/clickhouse/pkg/utils"
15- templatemanagergrpc "github.com/e2b-dev/infra/packages/shared/pkg/grpc/template-manager"
1614 "github.com/e2b-dev/infra/packages/shared/pkg/logger"
1715 "github.com/e2b-dev/infra/packages/shared/pkg/logs"
1816 "github.com/e2b-dev/infra/packages/shared/pkg/logs/loki"
1917 "github.com/e2b-dev/infra/packages/shared/pkg/smap"
20- "github.com/e2b-dev/infra/packages/shared/pkg/telemetry"
21- "github.com/e2b-dev/infra/packages/shared/pkg/utils"
2218)
2319
2420type LocalClusterResourceProvider struct {
@@ -144,82 +140,49 @@ func (l *LocalClusterResourceProvider) GetSandboxLogs(ctx context.Context, teamI
144140 return api.SandboxLogs {Logs : ll , LogEntries : le }, nil
145141}
146142
147- func (l * LocalClusterResourceProvider ) GetBuildLogs (ctx context.Context , nodeID * string , templateID string , buildID string , offset int32 , limit int32 , level * logs.LogLevel , cursor * time.Time , direction api.LogsDirection , source * api.LogsSource ) ([]logs.LogEntry , error ) {
143+ func (l * LocalClusterResourceProvider ) GetBuildLogs (
144+ ctx context.Context ,
145+ nodeID * string ,
146+ templateID string ,
147+ buildID string ,
148+ offset int32 ,
149+ limit int32 ,
150+ level * logs.LogLevel ,
151+ cursor * time.Time ,
152+ direction api.LogsDirection ,
153+ source * api.LogsSource ,
154+ ) ([]logs.LogEntry , error ) {
148155 start , end := logQueryWindow (cursor , direction )
149156
150- lokiDirection := defaultDirection
151- if direction == api .LogsDirectionBackward {
152- lokiDirection = logproto .BACKWARD
153- }
154-
155- // todo
156- if source == nil {
157- // try node and then default to Loki
158- } else if * source == api .LogsSourcePersistent {
159- // force to node
160- } else if * source == api .LogsSourceTemporary {
161- // force to loki
162- }
163-
164- if nodeID != nil {
157+ // Fetch logs directly from template builder instance
158+ if nodeID != nil && logCheckSourceType (source , api .LogsSourceTemporary ) {
165159 instance , found := l .instances .Get (* nodeID )
166- if found {
167- var lvlReq * templatemanagergrpc.LogLevel
168- if level != nil {
169- lvlReq = templatemanagergrpc .LogLevel (* level ).Enum ()
170- }
171-
172- res , err := instance .grpc .Template .TemplateBuildStatus (
173- ctx , & templatemanagergrpc.TemplateStatusRequest {
174- TemplateID : templateID ,
175- BuildID : buildID ,
176- Offset : & offset ,
177- Limit : utils .ToPtr (uint32 (limit )),
178- Level : lvlReq ,
179- Start : timestamppb .New (start ),
180- End : timestamppb .New (end ),
181- Direction : utils .ToPtr (logDirectionToTemplateManagerDirection (direction )),
182- },
183- )
184- if err != nil {
185- telemetry .ReportError (ctx , "error when returning logs for template build" , err )
186- logger .L ().Error (ctx , "error when returning logs for template build" , zap .Error (err ), logger .WithBuildID (buildID ))
187-
188- return nil , err
189- }
190-
191- raw := res .GetLogEntries ()
192-
193- // Add an extra newline to each log entry to ensure proper formatting in the CLI
194- entries := make ([]logs.LogEntry , len (raw ))
195- for i , entry := range raw {
196- entries [i ] = logs.LogEntry {
197- Timestamp : entry .GetTimestamp ().AsTime (),
198- Message : entry .GetMessage (),
199- Level : logs .LogLevel (entry .GetLevel ()),
200- Fields : entry .GetFields (),
201- }
202- }
203-
204- return entries , nil
160+ if ! found {
161+ return nil , fmt .Errorf ("node instance not found for id '%s'" , * nodeID )
205162 }
206- }
207163
208- logs , err := l .queryLogsProvider .QueryBuildLogs (ctx , templateID , buildID , start , end , int (limit ), offset , level , lokiDirection )
209- if err != nil {
210- return nil , fmt .Errorf ("error when fetching build logs: %w" , err )
164+ entries , err := logsFromBuilderInstance (ctx , instance , templateID , buildID , offset , limit , level , start , end , direction )
165+ if err != nil {
166+ return nil , fmt .Errorf ("error getting build logs from node: %w" , err )
167+ }
168+
169+ return entries , nil
211170 }
212171
213- return logs , nil
214- }
172+ // Fetch logs from Loki backend
173+ if logCheckSourceType (source , api .LogsSourcePersistent ) {
174+ lokiDirection := defaultDirection
175+ if direction == api .LogsDirectionBackward {
176+ lokiDirection = logproto .BACKWARD
177+ }
215178
216- func logDirectionToTemplateManagerDirection (direction api.LogsDirection ) templatemanagergrpc.LogsDirection {
217- switch direction {
218- case api .LogsDirectionForward :
219- return templatemanagergrpc .LogsDirection_Forward
220- case api .LogsDirectionBackward :
221- return templatemanagergrpc .LogsDirection_Backward
222- default :
223- return templatemanagergrpc .LogsDirection_Forward
179+ entries , err := l .queryLogsProvider .QueryBuildLogs (ctx , templateID , buildID , start , end , int (limit ), offset , level , lokiDirection )
180+ if err != nil {
181+ return nil , fmt .Errorf ("error when fetching build logs: %w" , err )
182+ }
183+
184+ return entries , nil
224185 }
186+
187+ return nil , nil
225188}
0 commit comments