console: use avg/max for LimitType (instead of Avg/Max)

This commit is contained in:
Vincent Bernat
2024-11-23 20:57:48 +01:00
parent ba37f1765a
commit 2df8b5785b
9 changed files with 22 additions and 19 deletions

View File

@@ -70,7 +70,7 @@ type VisualizeOptionsConfiguration struct {
// Limit is the default limit to use // Limit is the default limit to use
Limit int `json:"limit" validate:"min=5"` Limit int `json:"limit" validate:"min=5"`
// LimitType is the default limitType to use // LimitType is the default limitType to use
LimitType string `json:"limitType" validate:"oneof=Avg Max"` LimitType string `json:"limitType" validate:"oneof=avg max"`
// Bidirectional tells if a graph should be bidirectional (all except sankey) // Bidirectional tells if a graph should be bidirectional (all except sankey)
Bidirectional bool `json:"bidirectional"` Bidirectional bool `json:"bidirectional"`
// PreviousPeriod tells if a graph should display the previous period (for stacked) // PreviousPeriod tells if a graph should display the previous period (for stacked)
@@ -87,7 +87,7 @@ func DefaultConfiguration() Configuration {
Filter: "InIfBoundary = external", Filter: "InIfBoundary = external",
Dimensions: []query.Column{query.NewColumn("SrcAS")}, Dimensions: []query.Column{query.NewColumn("SrcAS")},
Limit: 10, Limit: 10,
LimitType: "Avg", LimitType: "avg",
}, },
HomepageTopWidgets: []HomepageTopWidget{ HomepageTopWidgets: []HomepageTopWidget{
HomepageTopWidgetSrcAS, HomepageTopWidgetSrcAS,

View File

@@ -26,7 +26,7 @@ func TestConfigHandler(t *testing.T) {
"filter": "InIfBoundary = external", "filter": "InIfBoundary = external",
"dimensions": []string{"SrcAS"}, "dimensions": []string{"SrcAS"},
"limit": 10, "limit": 10,
"limitType": "Avg", "limitType": "avg",
"bidirectional": false, "bidirectional": false,
"previousPeriod": false, "previousPeriod": false,
}, },

View File

@@ -151,9 +151,12 @@ aspect of the graph.
"limit" parameter tells how many. The remaining values are "limit" parameter tells how many. The remaining values are
categorized as "Other". categorized as "Other".
- Associated with the `limit` parameter, the `limitType` parameter help find traffic surges according to 2 modes: - Associated with the `limit` parameter, the `limitType` parameter help find
- Avg: default mode, the query focuses on getting the highest cumulative traffics over the time selection. traffic surges according to 2 modes:
- Max: the query focuses on getting the traffic bursts over the time selection. - `avg`: default mode, the query focuses on getting the highest cumulative
traffics over the time selection.
- `max`: the query focuses on getting the traffic bursts over the time
selection.
- The filter box contains an SQL-like expression to limit the data to be - The filter box contains an SQL-like expression to limit the data to be
graphed. It features an auto-completion system that can be triggered manually graphed. It features an auto-completion system that can be triggered manually

View File

@@ -201,7 +201,7 @@ watch(
if (value) { if (value) {
limit.value = value.limit.toString(); limit.value = value.limit.toString();
limitType.value = limitType.value =
computationModeList.find((mode) => mode.name === value.limitType) || computationModeList.find((mode) => mode.type === value.limitType) ||
computationModeList[0]; computationModeList[0];
truncate4.value = value.truncate4.toString(); truncate4.value = value.truncate4.toString();
truncate6.value = value.truncate6.toString(); truncate6.value = value.truncate6.toString();
@@ -226,7 +226,7 @@ watch(
const updated = { const updated = {
selected: selected.map((d) => d.name), selected: selected.map((d) => d.name),
limit: parseInt(limit), limit: parseInt(limit),
limitType: limitType.name, limitType: limitType.type,
truncate4: parseInt(truncate4), truncate4: parseInt(truncate4),
truncate6: parseInt(truncate6), truncate6: parseInt(truncate6),
errors: hasErrors, errors: hasErrors,

View File

@@ -20,7 +20,7 @@ type graphCommonHandlerInput struct {
End time.Time `json:"end" binding:"required,gtfield=Start"` End time.Time `json:"end" binding:"required,gtfield=Start"`
Dimensions []query.Column `json:"dimensions"` // group by ... Dimensions []query.Column `json:"dimensions"` // group by ...
Limit int `json:"limit" binding:"min=1"` // limit product of dimensions Limit int `json:"limit" binding:"min=1"` // limit product of dimensions
LimitType string `json:"limitType" validate:"oneof=Avg Max"` LimitType string `json:"limitType" validate:"oneof=avg max"`
Filter query.Filter `json:"filter"` // where ... Filter query.Filter `json:"filter"` // where ...
TruncateAddrV4 int `json:"truncate-v4" binding:"min=0,max=32"` // 0 or 32 = no truncation TruncateAddrV4 int `json:"truncate-v4" binding:"min=0,max=32"` // 0 or 32 = no truncation
TruncateAddrV6 int `json:"truncate-v6" binding:"min=0,max=128"` // 0 or 128 = no truncation TruncateAddrV6 int `json:"truncate-v6" binding:"min=0,max=128"` // 0 or 128 = no truncation

View File

@@ -340,7 +340,7 @@ func (c *Component) graphLineHandlerFunc(gc *gin.Context) {
if rows[axis][jKey][0] == "Other" { if rows[axis][jKey][0] == "Other" {
return true return true
} }
if input.LimitType == "Max" { if input.LimitType == "max" {
return maxes[axis][iKey] > maxes[axis][jKey] return maxes[axis][iKey] > maxes[axis][jKey]
} }

View File

@@ -495,7 +495,7 @@ ORDER BY time WITH FILL
Start: time.Date(2022, 4, 10, 15, 45, 10, 0, time.UTC), Start: time.Date(2022, 4, 10, 15, 45, 10, 0, time.UTC),
End: time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), End: time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
Limit: 20, Limit: 20,
LimitType: "Max", LimitType: "max",
Dimensions: []query.Column{ Dimensions: []query.Column{
query.NewColumn("ExporterName"), query.NewColumn("ExporterName"),
query.NewColumn("InIfProvider"), query.NewColumn("InIfProvider"),
@@ -768,7 +768,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Avg", "limitType": "avg",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",
@@ -844,7 +844,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Avg", "limitType": "avg",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",
@@ -964,7 +964,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Avg", "limitType": "avg",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",
@@ -1158,7 +1158,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Max", "limitType": "max",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",
@@ -1234,7 +1234,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Max", "limitType": "max",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",
@@ -1354,7 +1354,7 @@ func TestGraphLineHandler(t *testing.T) {
"end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC), "end": time.Date(2022, 4, 11, 15, 45, 10, 0, time.UTC),
"points": 100, "points": 100,
"limit": 20, "limit": 20,
"limitType": "Max", "limitType": "max",
"dimensions": []string{"ExporterName", "InIfProvider"}, "dimensions": []string{"ExporterName", "InIfProvider"},
"filter": "DstCountry = 'FR' AND SrcCountry = 'US'", "filter": "DstCountry = 'FR' AND SrcCountry = 'US'",
"units": "l3bps", "units": "l3bps",

View File

@@ -46,7 +46,7 @@ func selectRowsByLimitType(input graphCommonHandlerInput, dimensions []string, w
var rowsType string var rowsType string
var source string var source string
var orderBy string var orderBy string
if input.LimitType == "Max" { if input.LimitType == "max" {
source = fmt.Sprintf("( SELECT %s AS sum_at_time FROM source WHERE %s GROUP BY %s )", source = fmt.Sprintf("( SELECT %s AS sum_at_time FROM source WHERE %s GROUP BY %s )",
strings.Join(append(dimensions, "{{ .Units }}"), ", "), strings.Join(append(dimensions, "{{ .Units }}"), ", "),
where, where,

View File

@@ -66,7 +66,7 @@ ORDER BY xps DESC
query.NewColumn("ExporterName"), query.NewColumn("ExporterName"),
}, },
Limit: 5, Limit: 5,
LimitType: "Max", LimitType: "max",
Filter: query.Filter{}, Filter: query.Filter{},
Units: "l3bps", Units: "l3bps",
}, },