Skip to content

Commit bc0f58a

Browse files
committed
fix resources/names endpoint
1 parent b7fdf62 commit bc0f58a

File tree

4 files changed

+58
-47
lines changed

4 files changed

+58
-47
lines changed

config/sample-config.yaml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -758,26 +758,24 @@ frontend:
758758
name: Resource
759759
component: autocomplete
760760
category: source
761-
placeholder: 'E.g: Pod.default.my-pod'
761+
placeholder: 'E.g: Deployment.example.my-dep or Pod.default.my-pod'
762762
hint: Specify an existing resource from its kind, namespace and name.
763763
examples: |-
764764
Specify a kind, namespace and name from existing:
765765
- Select kind first from suggestions
766-
- Then Select namespace from suggestions
766+
- Then select namespace from suggestions
767767
- Finally select name from suggestions
768-
You can also directly specify a kind, namespace and name like pod.openshift.apiserver
769768
- id: dst_resource
770769
name: Resource
771770
component: autocomplete
772771
category: destination
773-
placeholder: 'E.g: Pod.default.my-pod'
772+
placeholder: 'E.g: Deployment.example.my-dep or Pod.default.my-pod'
774773
hint: Specify an existing resource from its kind, namespace and name.
775774
examples: |-
776775
Specify a kind, namespace and name from existing:
777776
- Select kind first from suggestions
778-
- Then Select namespace from suggestions
777+
- Then select namespace from suggestions
779778
- Finally select name from suggestions
780-
You can also directly specify a kind, namespace and name like pod.openshift.apiserver
781779
- id: src_address
782780
name: IP
783781
component: text

pkg/server/routes.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ func setupRoutes(ctx context.Context, cfg *config.Config, authChecker auth.Check
5353
api.HandleFunc("/resources/clusters", h.GetClusters(ctx))
5454
api.HandleFunc("/resources/zones", h.GetZones(ctx))
5555
api.HandleFunc("/resources/namespaces", h.GetNamespaces(ctx))
56-
api.HandleFunc("/resources/namespace/{namespace}/kind/{kind}/names", h.GetNames(ctx))
57-
api.HandleFunc("/resources/kind/{kind}/names", h.GetNames(ctx))
56+
api.HandleFunc("/resources/names", h.GetNames(ctx))
5857

5958
// Frontend files
6059
api.HandleFunc("/frontend-config", h.GetFrontendConfig())

web/src/api/routes.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ export const getNamespaces = (forcedNamespace?: string): Promise<string[]> => {
9696
};
9797

9898
export const getResources = (namespace: string, kind: string, forcedNamespace?: string): Promise<string[]> => {
99-
const params = { namespace: forcedNamespace };
100-
const url = namespace
101-
? `${ContextSingleton.getHost()}/api/resources/namespace/${namespace}/kind/${kind}/names`
102-
: `${ContextSingleton.getHost()}/api/resources/kind/${kind}/names`;
103-
return axios.get(url, { params }).then(r => {
99+
const params = {
100+
namespace: forcedNamespace || namespace,
101+
kind
102+
};
103+
return axios.get(ContextSingleton.getHost() + '/api/resources/names', { params }).then(r => {
104104
if (r.status >= 400) {
105105
throw new Error(`${r.statusText} [code=${r.status}]`);
106106
}

web/src/components/toolbar/filters-toolbar.tsx

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
5959
const { t } = useTranslation('plugin__netobserv-plugin');
6060
const [indicator, setIndicator] = React.useState<Indicator>(ValidatedOptions.default);
6161
const [message, setMessage] = React.useState<string | undefined>();
62-
const [selectedFilter, setSelectedFilter] = React.useState<FilterDefinition>(
63-
findFilter(filterDefinitions, 'src_namespace')!
62+
const [selectedFilter, setSelectedFilter] = React.useState<FilterDefinition | null>(
63+
findFilter(filterDefinitions, 'src_namespace') || filterDefinitions.length ? filterDefinitions[0] : null
6464
);
6565
const [selectedCompare, setSelectedCompare] = React.useState<FilterCompare>(FilterCompare.equal);
6666
const [showFilters, setShowFilters] = useLocalStorage<boolean>(localStorageShowFiltersKey, true);
@@ -89,6 +89,10 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
8989

9090
const addFilter = React.useCallback(
9191
(filterValue: FilterValue) => {
92+
if (selectedFilter === null) {
93+
console.error('addFilter called with', selectedFilter);
94+
return false;
95+
}
9296
const newFilters = _.cloneDeep(filters?.list) || [];
9397
const not = selectedCompare === FilterCompare.notEqual;
9498
const moreThan = selectedCompare === FilterCompare.moreThanOrEqual;
@@ -111,6 +115,10 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
111115
);
112116

113117
const getFilterControl = React.useCallback(() => {
118+
if (selectedFilter === null) {
119+
return <></>;
120+
}
121+
114122
const commonProps = {
115123
filterDefinition: selectedFilter,
116124
addFilter: addFilter,
@@ -133,6 +141,43 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
133141
}
134142
}, [selectedFilter, addFilter, setMessageWithDelay, indicator, selectedCompare]);
135143

144+
const getFilterToolbar = React.useCallback(() => {
145+
if (selectedFilter === null) {
146+
return <></>;
147+
}
148+
149+
return (
150+
<ToolbarItem className="flex-start">
151+
<Tooltip
152+
//css hide tooltip here to avoid render issue
153+
className={`filters-tooltip${_.isEmpty(message) ? '-empty' : ''}`}
154+
isVisible={!_.isEmpty(message)}
155+
content={message}
156+
trigger={_.isEmpty(message) ? 'manual' : 'click'}
157+
enableFlip={false}
158+
position={'top'}
159+
>
160+
<div>
161+
<InputGroup>
162+
<FiltersDropdown
163+
filterDefinitions={filterDefinitions}
164+
selectedFilter={selectedFilter}
165+
setSelectedFilter={setSelectedFilter}
166+
/>
167+
<CompareFilter
168+
value={selectedCompare}
169+
setValue={setSelectedCompare}
170+
component={selectedFilter.component}
171+
/>
172+
{getFilterControl()}
173+
</InputGroup>
174+
<FilterHints def={selectedFilter} />
175+
</div>
176+
</Tooltip>
177+
</ToolbarItem>
178+
);
179+
}, [filterDefinitions, getFilterControl, message, selectedCompare, selectedFilter]);
180+
136181
const isForced = !_.isEmpty(forcedFilters);
137182
const filtersOrForced = isForced ? forcedFilters : filters;
138183
const defaultFilters = quickFilters.filter(qf => qf.default).flatMap(qf => qf.filters);
@@ -156,38 +201,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
156201
<QuickFilters quickFilters={quickFilters} activeFilters={filters?.list || []} setFilters={setFiltersList} />
157202
</ToolbarItem>
158203
)}
159-
{!isForced && (
160-
<>
161-
<ToolbarItem className="flex-start">
162-
<Tooltip
163-
//css hide tooltip here to avoid render issue
164-
className={`filters-tooltip${_.isEmpty(message) ? '-empty' : ''}`}
165-
isVisible={!_.isEmpty(message)}
166-
content={message}
167-
trigger={_.isEmpty(message) ? 'manual' : 'click'}
168-
enableFlip={false}
169-
position={'top'}
170-
>
171-
<div>
172-
<InputGroup>
173-
<FiltersDropdown
174-
filterDefinitions={filterDefinitions}
175-
selectedFilter={selectedFilter}
176-
setSelectedFilter={setSelectedFilter}
177-
/>
178-
<CompareFilter
179-
value={selectedCompare}
180-
setValue={setSelectedCompare}
181-
component={selectedFilter.component}
182-
/>
183-
{getFilterControl()}
184-
</InputGroup>
185-
<FilterHints def={selectedFilter} />
186-
</div>
187-
</Tooltip>
188-
</ToolbarItem>
189-
</>
190-
)}
204+
{!isForced && getFilterToolbar()}
191205
{showHideText && (
192206
<ToolbarItem className="flex-start">
193207
<Button

0 commit comments

Comments
 (0)