From 0f1cfeb4a08f1af8cccecb554bfea3135c022025 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 01c6fada8..aca6201f4 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 41d61a51d..feb88bc9b 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: