Skip to content

Commit e84ce6b

Browse files
authored
fix: cluster settings may be string (#3027)
1 parent 5c5cfa4 commit e84ce6b

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

src/store/reducers/cluster/cluster.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import type {RootState} from '../../defaultStore';
1515
import {api} from '../api';
1616
import {selectNodesMap} from '../nodesList';
1717

18-
import {parseCoresUrl, parseLoggingUrls, parseTraceField} from './parseFields';
18+
import {parseCoresUrl, parseLoggingUrls, parseSettingsField, parseTraceField} from './parseFields';
1919
import type {ClusterGroupsStats, ClusterState} from './types';
2020
import {
2121
createSelectClusterGroupsQuery,
@@ -167,6 +167,8 @@ export function useClusterBaseInfo() {
167167
traceView: parseTraceField(data.trace_view),
168168
cores: parseCoresUrl(data.cores),
169169
logging: parseLoggingUrls(data.logging),
170+
171+
settings: parseSettingsField(data.settings),
170172
};
171173
}
172174

src/store/reducers/cluster/parseFields.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type {
44
MetaBaseClusterInfo,
55
MetaClusterCoresUrl,
66
MetaClusterLogsUrls,
7+
MetaClusterSettings,
78
MetaClusterTraceView,
89
} from '../../../types/api/meta';
910

@@ -65,3 +66,22 @@ export function parseLoggingUrls(
6566

6667
return undefined;
6768
}
69+
70+
const settingsSchema = z.object({
71+
use_meta_proxy: z.boolean().optional(),
72+
});
73+
74+
export function parseSettingsField(
75+
settings: MetaBaseClusterInfo['settings'],
76+
): MetaClusterSettings | undefined {
77+
if (settings && typeof settings === 'object') {
78+
return settings;
79+
}
80+
try {
81+
return settings ? settingsSchema.parse(JSON.parse(settings)) : undefined;
82+
} catch (e) {
83+
console.error('Error parsing settings field:', e);
84+
}
85+
86+
return undefined;
87+
}

src/store/reducers/clusters/utils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
getVersionsData,
77
prepareClusterVersions,
88
} from '../../../utils/versions/clusterVersionColors';
9+
import {parseSettingsField} from '../cluster/parseFields';
910

1011
import type {PreparedCluster} from './types';
1112

@@ -24,8 +25,9 @@ export const prepareClustersData = (data: MetaClusters): PreparedCluster[] => {
2425

2526
// Apply color map to every cluster in the list
2627
return clusters.map((cluster) => {
28+
const parsedSettings = parseSettingsField(cluster.settings);
2729
// If no backend is provided, it will be automatically generated by API instance
28-
const useMetaProxy = uiFactory.useMetaProxy && cluster.settings?.use_meta_proxy !== false;
30+
const useMetaProxy = uiFactory.useMetaProxy && parsedSettings?.use_meta_proxy !== false;
2931
const preparedBackend =
3032
cluster.balancer && !useMetaProxy
3133
? prepareBackendFromBalancer(cluster.balancer)
@@ -35,6 +37,7 @@ export const prepareClustersData = (data: MetaClusters): PreparedCluster[] => {
3537
...cluster,
3638
preparedVersions: prepareClusterVersions(cluster.versions, versionsData),
3739
preparedBackend,
40+
settings: parsedSettings,
3841
};
3942
});
4043
};

src/types/api/meta.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ export interface MetaBaseClusterInfo {
4949
logging?: string | MetaClusterLogsUrls;
5050
trace_view?: string | MetaClusterTraceView;
5151
trace_check?: string | MetaClusterTraceCheck;
52-
53-
// Settings are returned only by meta versions, that decode values by itself
54-
settings?: MetaClusterSettings;
52+
settings?: string | MetaClusterSettings;
5553
}
5654

5755
export interface MetaGeneralClusterInfo extends MetaBaseClusterInfo {
@@ -99,5 +97,4 @@ export interface MetaClusterTraceCheck {
9997

10098
export interface MetaClusterSettings {
10199
use_meta_proxy?: boolean;
102-
proxy?: unknown;
103100
}

0 commit comments

Comments
 (0)