-
Notifications
You must be signed in to change notification settings - Fork 124
/
task_logs_resolver.go
64 lines (53 loc) · 2.41 KB
/
task_logs_resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package graphql
import (
"context"
"fmt"
"github.com/evergreen-ci/evergreen/apimodels"
"github.com/evergreen-ci/evergreen/model/event"
restModel "github.com/evergreen-ci/evergreen/rest/model"
"github.com/evergreen-ci/evergreen/taskoutput"
)
// AgentLogs is the resolver for the agentLogs field.
func (r *taskLogsResolver) AgentLogs(ctx context.Context, obj *TaskLogs) ([]*apimodels.LogMessage, error) {
return getTaskLogs(ctx, obj, taskoutput.TaskLogTypeAgent)
}
// AllLogs is the resolver for the allLogs field.
func (r *taskLogsResolver) AllLogs(ctx context.Context, obj *TaskLogs) ([]*apimodels.LogMessage, error) {
return getTaskLogs(ctx, obj, taskoutput.TaskLogTypeAll)
}
// EventLogs is the resolver for the eventLogs field.
func (r *taskLogsResolver) EventLogs(ctx context.Context, obj *TaskLogs) ([]*restModel.TaskAPIEventLogEntry, error) {
const logMessageCount = 100
// loggedEvents is ordered ts descending
loggedEvents, err := event.Find(event.MostRecentTaskEvents(obj.TaskID, logMessageCount))
if err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("Unable to find EventLogs for task %s: %s", obj.TaskID, err.Error()))
}
// reverse order so it is ascending
for i := len(loggedEvents)/2 - 1; i >= 0; i-- {
opp := len(loggedEvents) - 1 - i
loggedEvents[i], loggedEvents[opp] = loggedEvents[opp], loggedEvents[i]
}
// populate eventlogs pointer arrays
apiEventLogPointers := []*restModel.TaskAPIEventLogEntry{}
for _, e := range loggedEvents {
apiEventLog := restModel.TaskAPIEventLogEntry{}
err = apiEventLog.BuildFromService(ctx, e)
if err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("Unable to build APIEventLogEntry from EventLog: %s", err.Error()))
}
apiEventLogPointers = append(apiEventLogPointers, &apiEventLog)
}
return apiEventLogPointers, nil
}
// SystemLogs is the resolver for the systemLogs field.
func (r *taskLogsResolver) SystemLogs(ctx context.Context, obj *TaskLogs) ([]*apimodels.LogMessage, error) {
return getTaskLogs(ctx, obj, taskoutput.TaskLogTypeSystem)
}
// TaskLogs is the resolver for the taskLogs field.
func (r *taskLogsResolver) TaskLogs(ctx context.Context, obj *TaskLogs) ([]*apimodels.LogMessage, error) {
return getTaskLogs(ctx, obj, taskoutput.TaskLogTypeTask)
}
// TaskLogs returns TaskLogsResolver implementation.
func (r *Resolver) TaskLogs() TaskLogsResolver { return &taskLogsResolver{r} }
type taskLogsResolver struct{ *Resolver }