Skip to content

Commit b5ae2d3

Browse files
authored
NETOBSERV-650 Top X value is incorrect at first time (#212)
* top / limit fix * reset button on error
1 parent bb9abc2 commit b5ae2d3

File tree

5 files changed

+35
-7
lines changed

5 files changed

+35
-7
lines changed

web/src/components/netflow-traffic-parent.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import * as React from 'react';
2+
import { clearURLParams } from '../utils/url';
3+
import { clearLocalStorage } from '../utils/local-storage-hook';
24
import NetflowTraffic from './netflow-traffic';
35

46
type Props = {};
@@ -24,13 +26,22 @@ class NetflowTrafficParent extends React.Component<Props, State> {
2426
this.setState({ error: error });
2527
}
2628

29+
reset() {
30+
clearLocalStorage();
31+
clearURLParams();
32+
}
33+
2734
render() {
2835
if (this.state.error) {
2936
return (
3037
<div data-test="error-message" style={{ padding: 10 }}>
3138
<h1>Unexpected error</h1>
3239
<p>{this.state.error.toString()}</p>
3340
<p>(check logs for more information)</p>
41+
&nbsp;
42+
<p>If the error persists, use the reset button below</p>
43+
<p>to clear the local storage and remove url parameters before reloading the page</p>
44+
<button onClick={() => this.reset()}>Reset</button>
3445
</div>
3546
);
3647
}

web/src/components/netflow-traffic.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,9 @@ export const NetflowTraffic: React.FC<{
174174
const [match, setMatch] = React.useState<Match>(getMatchFromURL());
175175
const [reporter, setReporter] = React.useState<Reporter>(getReporterFromURL());
176176
const [layer, setLayer] = React.useState<Layer>(getLayerFromURL());
177-
const [limit, setLimit] = React.useState<number>(getLimitFromURL());
177+
const [limit, setLimit] = React.useState<number>(
178+
getLimitFromURL(selectedViewId === 'table' ? LIMIT_VALUES[0] : TOP_VALUES[0])
179+
);
178180
const [lastLimit, setLastLimit] = useLocalStorage<number>(LOCAL_STORAGE_LAST_LIMIT_KEY, LIMIT_VALUES[0]);
179181
const [lastTop, setLastTop] = useLocalStorage<number>(LOCAL_STORAGE_LAST_TOP_KEY, TOP_VALUES[0]);
180182
const [range, setRange] = React.useState<number | TimeRange>(getRangeFromURL());
@@ -264,7 +266,7 @@ export const NetflowTraffic: React.FC<{
264266
match === 'any' ? groupFiltersMatchAny(enabledFilters) : groupFiltersMatchAll(enabledFilters);
265267
const query: FlowQuery = {
266268
filters: groupedFilters,
267-
limit: limit,
269+
limit: LIMIT_VALUES.includes(limit) ? limit : LIMIT_VALUES[0],
268270
reporter: reporter,
269271
layer: layer
270272
};
@@ -282,8 +284,7 @@ export const NetflowTraffic: React.FC<{
282284
if (selectedViewId === 'topology') {
283285
query.groups = topologyOptions.groupTypes !== TopologyGroupTypes.NONE ? topologyOptions.groupTypes : undefined;
284286
} else if (selectedViewId === 'overview') {
285-
//TODO: filter loki results like "metric":{} and sources equal to destinations from server side
286-
query.limit = limit + 5;
287+
query.limit = TOP_VALUES.includes(limit) ? limit : TOP_VALUES[0];
287288
query.groups = undefined;
288289
}
289290
const info = computeStepInterval(range);

web/src/utils/local-storage-hook.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export function useLocalStorage<T>(
4949
}
5050
} catch (error) {
5151
console.error(error);
52+
clearLocalStorage();
5253
return initialValue;
5354
}
5455
});
@@ -81,7 +82,17 @@ export function useLocalStorage<T>(
8182
window.localStorage.setItem(LOCAL_STORAGE_PLUGIN_KEY, JSON.stringify(parsedItem));
8283
} catch (error) {
8384
console.error(error);
85+
clearLocalStorage();
8486
}
8587
};
8688
return [storedValue, setValue];
8789
}
90+
91+
export function clearLocalStorage() {
92+
try {
93+
console.info('clearing local storage ' + LOCAL_STORAGE_PLUGIN_KEY);
94+
window.localStorage.removeItem(LOCAL_STORAGE_PLUGIN_KEY);
95+
} catch (error) {
96+
console.error(error);
97+
}
98+
}

web/src/utils/router.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ const filtersSeparator = ';';
99
const filterKVSeparator = '=';
1010
const filterValuesSeparator = ',';
1111
export const defaultTimeRange = 300;
12-
const defaultLimit = 100;
1312
export const defaultReporter: Reporter = 'destination';
1413
//TODO: improve performances before applying 'application' layer by default
1514
export const defaultLayer: Layer = 'both';
@@ -43,8 +42,8 @@ export const getLayerFromURL = (): Layer => {
4342
return (getURLParam(URLParam.Layer) as Layer | null) || defaultLayer;
4443
};
4544

46-
export const getLimitFromURL = (): number => {
47-
return getURLParamAsNumber(URLParam.Limit) || defaultLimit;
45+
export const getLimitFromURL = (fallback: number): number => {
46+
return getURLParamAsNumber(URLParam.Limit) || fallback;
4847
};
4948

5049
export const getMatchFromURL = (): Match => {

web/src/utils/url.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ export const removeURLParam = (param: URLParam) => {
6262
}
6363
};
6464

65+
export const clearURLParams = () => {
66+
const url = new URL(window.location.href);
67+
console.info('clearing url parameters ' + url);
68+
history.push(url.pathname);
69+
};
70+
6571
export const getPathWithParams = (pathName = '') => {
6672
return `${pathName}?${new URLSearchParams(window.location.search).toString()}`;
6773
};

0 commit comments

Comments
 (0)