diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index 7f1816e6981..1707a46e3f1 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -655,6 +655,16 @@ func listWithMoreString(list []string, more bool, count, max int) string { return ret } +// translateMicroTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateMicroTimestampSince(timestamp metav1.MicroTime) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} + // translateTimestampSince returns the elapsed time since timestamp in // human-readable approximation. func translateTimestampSince(timestamp metav1.Time) string { @@ -1660,6 +1670,9 @@ func printEvent(obj *api.Event, options printers.GenerateOptions) ([]metav1.Tabl } firstTimestamp := translateTimestampSince(obj.FirstTimestamp) + if obj.FirstTimestamp.IsZero() { + firstTimestamp = translateMicroTimestampSince(obj.EventTime) + } lastTimestamp := translateTimestampSince(obj.LastTimestamp) if obj.LastTimestamp.IsZero() { lastTimestamp = firstTimestamp diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index 1c62da4fbbc..b1ef49869b6 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -136,6 +136,30 @@ func TestPrintEvent(t *testing.T) { // Columns: Last Seen, Type, Reason, Object, Subobject, Message, First Seen, Count, Name expected: []metav1.TableRow{{Cells: []interface{}{"2d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(6), "event2"}}}, }, + // Basic event, w/o FirstTimestamp set + { + event: api.Event{ + Source: api.EventSource{ + Component: "kubelet", + Host: "Node1", + }, + InvolvedObject: api.ObjectReference{ + Kind: "Deployment", + Name: "Deployment Name", + FieldPath: "spec.containers{foo}", + }, + Reason: "Event Reason", + Message: "Message Data", + EventTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -3)}, + LastTimestamp: metav1.Time{Time: time.Now().UTC().AddDate(0, 0, -3)}, + Count: 1, + Type: api.EventTypeWarning, + ObjectMeta: metav1.ObjectMeta{Name: "event3"}, + }, + options: printers.GenerateOptions{Wide: true}, + // Columns: Last Seen, Type, Reason, Object, Subobject, Message, First Seen, Count, Name + expected: []metav1.TableRow{{Cells: []interface{}{"3d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(1), "event3"}}}, + }, // Basic event, w/o LastTimestamp set { event: api.Event{ @@ -150,6 +174,7 @@ func TestPrintEvent(t *testing.T) { }, Reason: "Event Reason", Message: "Message Data", + EventTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -3)}, FirstTimestamp: metav1.Time{Time: time.Now().UTC().AddDate(0, 0, -3)}, Count: 1, Type: api.EventTypeWarning, @@ -159,6 +184,29 @@ func TestPrintEvent(t *testing.T) { // Columns: Last Seen, Type, Reason, Object, Subobject, Message, First Seen, Count, Name expected: []metav1.TableRow{{Cells: []interface{}{"3d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(1), "event3"}}}, }, + // Basic event, w/o FirstTimestamp and LastTimestamp set + { + event: api.Event{ + Source: api.EventSource{ + Component: "kubelet", + Host: "Node1", + }, + InvolvedObject: api.ObjectReference{ + Kind: "Deployment", + Name: "Deployment Name", + FieldPath: "spec.containers{foo}", + }, + Reason: "Event Reason", + Message: "Message Data", + EventTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -3)}, + Count: 1, + Type: api.EventTypeWarning, + ObjectMeta: metav1.ObjectMeta{Name: "event3"}, + }, + options: printers.GenerateOptions{Wide: true}, + // Columns: Last Seen, Type, Reason, Object, Subobject, Message, First Seen, Count, Name + expected: []metav1.TableRow{{Cells: []interface{}{"3d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(1), "event3"}}}, + }, } for i, test := range tests {