diff --git a/console/clickhouse.go b/console/clickhouse.go index 0a776f4a..b59411c5 100644 --- a/console/clickhouse.go +++ b/console/clickhouse.go @@ -99,7 +99,7 @@ type context struct { TimefilterEnd string Units string Interval uint64 - ToStartOfInterval func(string) string + ToStartOfInterval string } // templateQuery holds a template string and its associated input context. @@ -190,14 +190,12 @@ func (c *Component) finalizeTemplateQuery(query templateQuery) string { TimefilterEnd: timefilterEnd, Units: units, Interval: uint64(computedInterval.Seconds()), - ToStartOfInterval: func(field string) string { - return fmt.Sprintf( - `toStartOfInterval(%s + INTERVAL %d second, INTERVAL %d second) - INTERVAL %d second`, - field, - diffOffset, - uint64(computedInterval.Seconds()), - diffOffset) - }, + ToStartOfInterval: fmt.Sprintf( + `toStartOfInterval(%s + INTERVAL %d second, INTERVAL %d second) - INTERVAL %d second`, + "TimeReceived", + diffOffset, + uint64(computedInterval.Seconds()), + diffOffset), } t := template.Must(template.New("query"). diff --git a/console/clickhouse_test.go b/console/clickhouse_test.go index d1ba874d..58f406b4 100644 --- a/console/clickhouse_test.go +++ b/console/clickhouse_test.go @@ -264,7 +264,7 @@ func TestFinalizeQuery(t *testing.T) { Expected: `SELECT TimeReceived, SrcPort WHERE InIfDescription = '{{ hello }}'`, }, { Description: "use of ToStartOfInterval", - Query: `{{ call .ToStartOfInterval "TimeReceived" }}`, + Query: `{{ .ToStartOfInterval }}`, Context: inputContext{ Start: time.Date(2022, 4, 10, 15, 45, 10, 0, time.UTC), End: time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), diff --git a/console/line.go b/console/line.go index 3758698a..ad5394ab 100644 --- a/console/line.go +++ b/console/line.go @@ -113,7 +113,7 @@ func (input graphLineHandlerInput) toSQL1(axis int, options toSQL1Options) templ // Select fields := []string{ - fmt.Sprintf(`{{ call .ToStartOfInterval "TimeReceived" }}%s AS time`, offsetShift), + fmt.Sprintf(`{{ .ToStartOfInterval }}%s AS time`, offsetShift), `{{ .Units }}/{{ .Interval }} AS xps`, } selectFields := []string{} diff --git a/console/line_test.go b/console/line_test.go index 83ac74c0..3a37b47a 100644 --- a/console/line_test.go +++ b/console/line_test.go @@ -191,7 +191,7 @@ func TestGraphQuerySQL(t *testing.T) { source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -229,7 +229,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -267,7 +267,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -309,7 +309,7 @@ ORDER BY time WITH FILL rows AS (SELECT SrcAddr FROM source WHERE {{ .Timefilter }} AND (SrcAddr BETWEEN toIPv6('::ffff:1.0.0.0') AND toIPv6('::ffff:1.255.255.255')) GROUP BY SrcAddr ORDER BY {{ .Units }} DESC LIMIT 0) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((SrcAddr) IN rows, [replaceRegexpOne(IPv6NumToString(SrcAddr), '^::ffff:', '')], ['Other']) AS dimensions FROM source @@ -347,7 +347,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -385,7 +385,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -424,7 +424,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -444,7 +444,7 @@ ORDER BY time WITH FILL }, Template: `SELECT 2 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -483,7 +483,7 @@ ORDER BY time WITH FILL source AS (SELECT * FROM {{ .Table }} SETTINGS asterisk_include_alias_columns = 1) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -503,7 +503,7 @@ ORDER BY time WITH FILL }, Template: `SELECT 2 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -546,7 +546,7 @@ ORDER BY time WITH FILL rows AS (SELECT ExporterName, InIfProvider FROM source WHERE {{ .Timefilter }} GROUP BY ExporterName, InIfProvider ORDER BY {{ .Units }} DESC LIMIT 20) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((ExporterName, InIfProvider) IN rows, [ExporterName, InIfProvider], ['Other', 'Other']) AS dimensions FROM source @@ -590,7 +590,7 @@ ORDER BY time WITH FILL rows AS (SELECT ExporterName, InIfProvider FROM ( SELECT ExporterName, InIfProvider, {{ .Units }} AS sum_at_time FROM source WHERE {{ .Timefilter }} GROUP BY ExporterName, InIfProvider ) GROUP BY ExporterName, InIfProvider ORDER BY MAX(sum_at_time) DESC LIMIT 20) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((ExporterName, InIfProvider) IN rows, [ExporterName, InIfProvider], ['Other', 'Other']) AS dimensions FROM source @@ -634,7 +634,7 @@ ORDER BY time WITH FILL rows AS (SELECT ExporterName, InIfProvider FROM source WHERE {{ .Timefilter }} GROUP BY ExporterName, InIfProvider ORDER BY {{ .Units }} DESC LIMIT 20) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((ExporterName, InIfProvider) IN rows, [ExporterName, InIfProvider], ['Other', 'Other']) AS dimensions FROM source @@ -654,7 +654,7 @@ ORDER BY time WITH FILL }, Template: `SELECT 2 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((ExporterName, OutIfProvider) IN rows, [ExporterName, OutIfProvider], ['Other', 'Other']) AS dimensions FROM source @@ -698,7 +698,7 @@ ORDER BY time WITH FILL rows AS (SELECT ExporterName, InIfProvider FROM source WHERE {{ .Timefilter }} GROUP BY ExporterName, InIfProvider ORDER BY {{ .Units }} DESC LIMIT 20) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((ExporterName, InIfProvider) IN rows, [ExporterName, InIfProvider], ['Other', 'Other']) AS dimensions FROM source @@ -722,7 +722,7 @@ ORDER BY time WITH FILL }, Template: `SELECT 3 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} + INTERVAL 86400 second AS time, + {{ .ToStartOfInterval }} + INTERVAL 86400 second AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source @@ -766,7 +766,7 @@ ORDER BY time WITH FILL rows AS (SELECT SrcAddr, DstAddr FROM source WHERE {{ .Timefilter }} AND (InIfBoundary = 'external') GROUP BY SrcAddr, DstAddr ORDER BY {{ .Units }} DESC LIMIT 0) SELECT 1 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS time, + {{ .ToStartOfInterval }} AS time, {{ .Units }}/{{ .Interval }} AS xps, if((SrcAddr, DstAddr) IN rows, [replaceRegexpOne(IPv6NumToString(SrcAddr), '^::ffff:', ''), replaceRegexpOne(IPv6NumToString(DstAddr), '^::ffff:', '')], ['Other', 'Other']) AS dimensions FROM source @@ -791,7 +791,7 @@ ORDER BY time WITH FILL }, Template: `SELECT 3 AS axis, * FROM ( SELECT - {{ call .ToStartOfInterval "TimeReceived" }} + INTERVAL 86400 second AS time, + {{ .ToStartOfInterval }} + INTERVAL 86400 second AS time, {{ .Units }}/{{ .Interval }} AS xps, emptyArrayString() AS dimensions FROM source diff --git a/console/widgets.go b/console/widgets.go index 81dc8eab..8f18b411 100644 --- a/console/widgets.go +++ b/console/widgets.go @@ -236,7 +236,7 @@ func (c *Component) widgetGraphHandlerFunc(gc *gin.Context) { now := c.d.Clock.Now() template := fmt.Sprintf(` SELECT - {{ call .ToStartOfInterval "TimeReceived" }} AS Time, + {{ .ToStartOfInterval }} AS Time, SUM(Bytes*SamplingRate*8/{{ .Interval }})/1000/1000/1000 AS Gbps FROM {{ .Table }} WHERE {{ .Timefilter }}