From 3bac1d2d9d3a316a49929a98c015c38b95df7550 Mon Sep 17 00:00:00 2001 From: Mara Sophie Grosch Date: Thu, 20 May 2021 04:25:36 +0200 Subject: [PATCH] Fix log sort order when multiple series are returned (#1956) Series are sorted internal by "order by", but the set of all series returned is not. Tried some ways to sort completely on database, found no way .. client side sort works at least Co-authored-by: Vishal --- pkg/fission-cli/logdb/influxdb.go | 3 +++ pkg/fission-cli/logdb/logdb.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pkg/fission-cli/logdb/influxdb.go b/pkg/fission-cli/logdb/influxdb.go index 01c6fada..aca6201f 100644 --- a/pkg/fission-cli/logdb/influxdb.go +++ b/pkg/fission-cli/logdb/influxdb.go @@ -22,6 +22,7 @@ import ( "net/http" "net/url" "path" + "sort" "strconv" "strings" "time" @@ -130,6 +131,8 @@ func (influx InfluxDB) GetLogs(filter LogFilter) ([]LogEntry, error) { } } + sort.Sort(ByTimestamp(logEntries, filter.Reverse)) + return logEntries, nil } diff --git a/pkg/fission-cli/logdb/logdb.go b/pkg/fission-cli/logdb/logdb.go index 41d61a51..feb88bc9 100644 --- a/pkg/fission-cli/logdb/logdb.go +++ b/pkg/fission-cli/logdb/logdb.go @@ -50,6 +50,25 @@ type LogEntry struct { Pod string } +type ByTimestampSort struct { + entries []LogEntry + desc bool +} + +func (a ByTimestampSort) Len() int { return len(a.entries) } +func (a ByTimestampSort) Swap(i, j int) { a.entries[i], a.entries[j] = a.entries[j], a.entries[i] } +func (a ByTimestampSort) Less(i, j int) bool { + if a.desc { + return a.entries[i].Timestamp.UnixNano() > a.entries[j].Timestamp.UnixNano() + } else { + return a.entries[i].Timestamp.UnixNano() < a.entries[j].Timestamp.UnixNano() + } +} + +func ByTimestamp(entries []LogEntry, desc bool) ByTimestampSort { + return ByTimestampSort{entries, desc} +} + func GetLogDB(dbType string, serverURL string) (LogDatabase, error) { switch dbType { case INFLUXDB: