Fix v1beta1 events printing in kubectl

printers: handle series when printing events
printers: handle singleton when printing events

Signed-off-by: Damien Grisonnet <dgrisonn@redhat.com>
This commit is contained in:
Damien Grisonnet 2020-06-26 10:12:45 +02:00
parent 5016c22845
commit ceb8c2fbf4
2 changed files with 67 additions and 5 deletions

View File

@ -1673,11 +1673,25 @@ func printEvent(obj *api.Event, options printers.GenerateOptions) ([]metav1.Tabl
if obj.FirstTimestamp.IsZero() {
firstTimestamp = translateMicroTimestampSince(obj.EventTime)
}
lastTimestamp := translateTimestampSince(obj.LastTimestamp)
if obj.LastTimestamp.IsZero() {
lastTimestamp = firstTimestamp
}
count := obj.Count
if obj.Series != nil {
lastTimestamp = translateMicroTimestampSince(obj.Series.LastObservedTime)
// When a series is created for the first time, its count is set to 1.
// However, for a series to be created, there needs to be an isomorphic
// singleton event created beforehand. This singleton event is not
// counted in the series count which is why one is added here.
count = obj.Series.Count + 1
} else if count == 0 {
// Singleton events don't have a count set in the new API.
count = 1
}
var target string
if len(obj.InvolvedObject.Name) > 0 {
target = fmt.Sprintf("%s/%s", strings.ToLower(obj.InvolvedObject.Kind), obj.InvolvedObject.Name)
@ -1694,7 +1708,7 @@ func printEvent(obj *api.Event, options printers.GenerateOptions) ([]metav1.Tabl
formatEventSource(obj.Source),
strings.TrimSpace(obj.Message),
firstTimestamp,
int64(obj.Count),
int64(count),
obj.Name,
)
} else {

View File

@ -178,11 +178,11 @@ func TestPrintEvent(t *testing.T) {
FirstTimestamp: metav1.Time{Time: time.Now().UTC().AddDate(0, 0, -3)},
Count: 1,
Type: api.EventTypeWarning,
ObjectMeta: metav1.ObjectMeta{Name: "event3"},
ObjectMeta: metav1.ObjectMeta{Name: "event4"},
},
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"}}},
expected: []metav1.TableRow{{Cells: []interface{}{"3d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(1), "event4"}}},
},
// Basic event, w/o FirstTimestamp and LastTimestamp set
{
@ -201,11 +201,59 @@ func TestPrintEvent(t *testing.T) {
EventTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -3)},
Count: 1,
Type: api.EventTypeWarning,
ObjectMeta: metav1.ObjectMeta{Name: "event3"},
ObjectMeta: metav1.ObjectMeta{Name: "event5"},
},
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"}}},
expected: []metav1.TableRow{{Cells: []interface{}{"3d", "Warning", "Event Reason", "deployment/Deployment Name", "spec.containers{foo}", "kubelet, Node1", "Message Data", "3d", int64(1), "event5"}}},
},
// Basic event serie, w/o FirstTimestamp, LastTimestamp and Count set
{
event: api.Event{
Source: api.EventSource{
Component: "kubelet",
Host: "Node1",
},
InvolvedObject: api.ObjectReference{
Kind: "Deployment",
Name: "Deployment Name",
FieldPath: "spec.containers{foo}",
},
Series: &api.EventSeries{
Count: 1,
LastObservedTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -2)},
},
Reason: "Event Reason",
Message: "Message Data",
EventTime: metav1.MicroTime{Time: time.Now().UTC().AddDate(0, 0, -3)},
Type: api.EventTypeWarning,
ObjectMeta: metav1.ObjectMeta{Name: "event6"},
},
options: printers.GenerateOptions{Wide: true},
// 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(2), "event6"}}},
},
// Singleton event, w/o FirstTimestamp, LastTimestamp and Count 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)},
Type: api.EventTypeWarning,
ObjectMeta: metav1.ObjectMeta{Name: "event7"},
},
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), "event7"}}},
},
}