diff --git a/assets/models/LogEntry.ts b/assets/models/LogEntry.ts index dff9af37..216a455a 100644 --- a/assets/models/LogEntry.ts +++ b/assets/models/LogEntry.ts @@ -19,7 +19,7 @@ export interface LogEvent { readonly id: number; readonly l: string; readonly p: Position; - readonly s: number; + readonly s: "stdout" | "stderr" | "unknown"; } export abstract class LogEntry implements HasComponent { @@ -151,9 +151,15 @@ export function asLogEntry(event: LogEvent): LogEntry { new Date(event.ts), event.l, event.p, - event.s === 1 ? "stdout" : "stderr" + event.s === "unknown" ? "stderr" : event.s ?? "stderr" ); } else { - return new ComplexLogEntry(event.m, event.id, new Date(event.ts), event.l, event.s === 1 ? "stdout" : "stderr"); + return new ComplexLogEntry( + event.m, + event.id, + new Date(event.ts), + event.l, + event.s === "unknown" ? "stderr" : event.s ?? "stderr" + ); } } diff --git a/docker/client.go b/docker/client.go index 6e5717f5..ddcdc622 100644 --- a/docker/client.go +++ b/docker/client.go @@ -30,7 +30,8 @@ type dockerClient struct { type StdType int const ( - STDOUT StdType = 1 << iota + UNKNOWN StdType = 1 << iota + STDOUT STDERR ) const STDALL = STDOUT | STDERR @@ -38,13 +39,13 @@ const STDALL = STDOUT | STDERR func (s StdType) String() string { switch s { case STDOUT: - return "out" + return "stdout" case STDERR: - return "err" + return "stderr" case STDALL: return "all" default: - return "" + return "unknown" } } diff --git a/docker/log_iterator.go b/docker/log_iterator.go index 3769e49b..cd33e7f0 100644 --- a/docker/log_iterator.go +++ b/docker/log_iterator.go @@ -98,15 +98,16 @@ func (g *eventGenerator) consume() { switch std { case "OUT": stdType = STDOUT + message = message[3:] case "ERR": stdType = STDERR + message = message[3:] default: - log.Panicf("unknown std type [%s] with message [%s]", std, message) + log.Debugf("unknown std type [%s] with message [%s]", std, message) + stdType = UNKNOWN } - message = message[3:] - - logEvent := &LogEvent{Id: h.Sum32(), Message: message, StdType: stdType} + logEvent := &LogEvent{Id: h.Sum32(), Message: message, Stream: stdType.String()} if index := strings.IndexAny(message, " "); index != -1 { logId := message[:index] diff --git a/docker/types.go b/docker/types.go index c24220eb..cfcdfaa5 100644 --- a/docker/types.go +++ b/docker/types.go @@ -46,7 +46,7 @@ type LogEvent struct { Id uint32 `json:"id,omitempty"` Level string `json:"l,omitempty"` Position LogPosition `json:"p,omitempty"` - StdType StdType `json:"s,omitempty"` + Stream string `json:"s,omitempty"` } func (l *LogEvent) HasLevel() bool { diff --git a/web/__snapshots__/web.snapshot b/web/__snapshots__/web.snapshot index e6538c8d..e7fe64e3 100644 --- a/web/__snapshots__/web.snapshot +++ b/web/__snapshots__/web.snapshot @@ -76,8 +76,8 @@ HTTP/1.1 200 OK Connection: close Content-Type: application/ld+json; charset=UTF-8 -{"m":"INFO Testing logs...","ts":1589396137772,"id":1122614848,"l":"info","s":1} -{"m":"INFO Testing logs...","ts":1589396137772,"id":1543246723,"l":"info","s":2} +{"m":"INFO Testing logs...","ts":1589396137772,"id":1122614848,"l":"info","s":"stdout"} +{"m":"INFO Testing logs...","ts":1589396137772,"id":1543246723,"l":"info","s":"stderr"} /* snapshot: Test_handler_streamEvents_error */ HTTP/1.1 200 OK @@ -160,7 +160,7 @@ Connection: keep-alive Content-Type: text/event-stream X-Accel-Buffering: no -data: {"m":"INFO Testing logs...","ts":0,"id":852638900,"l":"info","s":1} +data: {"m":"INFO Testing logs...","ts":0,"id":852638900,"l":"info","s":"stdout"} event: container-stopped data: end of stream @@ -186,7 +186,7 @@ Connection: keep-alive Content-Type: text/event-stream X-Accel-Buffering: no -data: {"m":"INFO Testing logs...","ts":1589396137772,"id":3373215946,"l":"info","s":1} +data: {"m":"INFO Testing logs...","ts":1589396137772,"id":3373215946,"l":"info","s":"stdout"} id: 1589396137772 event: container-stopped