Skip to content

Commit 83657cd

Browse files
Assem-HafezAssem-Uber
authored andcommitted
Replace current config with dynamic config (#798)
* get config api * fix mock * fix types for transfrom-config test * use dynamic config * fix docker env names * use context for pages * replace useQuery with page context in DomainsPageFiltersClusterName * remove extra Fragment
1 parent c8d8100 commit 83657cd

37 files changed

+379
-230
lines changed

.docker_env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
NODE_ENV=development
2-
NEXT_PUBLIC_CADENCE_CLUSTERS_NAMES=default
2+
CADENCE_CLUSTERS_NAMES=default
33
CADENCE_GRPC_PEERS="127.0.0.1:7833"
4-
NEXT_PUBLIC_CADENCE_GRPC_SERVICES_NAMES=cadence-frontend
4+
CADENCE_GRPC_SERVICES_NAMES=cadence-frontend
55
CADENCE_WEB_PORT=8088
66
CADENCE_EXTERNAL_SCRIPTS=""
77
CADENCE_ADMIN_SECURITY_TOKEN=""

src/config/auth/admin-security-token.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/config/clusters/cluster-names.config.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/config/clusters/clusters.config.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/config/dynamic/dynamic.config.ts

Lines changed: 21 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
import 'server-only';
22

33
import type {
4-
ConfigAsyncResolverDefinition,
54
ConfigEnvDefinition,
65
ConfigSyncResolverDefinition,
76
} from '../../utils/config/config.types';
87

8+
import clusters from './resolvers/clusters';
9+
import clustersPublic from './resolvers/clusters-public';
10+
import { type PublicClustersConfigs } from './resolvers/clusters-public.types';
11+
import { type ClustersConfigs } from './resolvers/clusters.types';
12+
913
const dynamicConfigs: {
1014
CADENCE_WEB_PORT: ConfigEnvDefinition;
1115
ADMIN_SECURITY_TOKEN: ConfigEnvDefinition;
12-
GRPC_PROTO_DIR_BASE_PATH: ConfigEnvDefinition;
13-
GRPC_SERVICES_NAMES: ConfigEnvDefinition<true>;
14-
DYNAMIC: ConfigAsyncResolverDefinition<undefined, number, 'serverStart'>;
15-
DYNAMIC_WITH_ARG: ConfigAsyncResolverDefinition<number, number, 'request'>;
16-
COMPUTED: ConfigSyncResolverDefinition<undefined, [string], 'request'>;
17-
COMPUTED_WITH_ARG: ConfigSyncResolverDefinition<
18-
[string],
19-
[string],
20-
'request'
16+
CLUSTERS: ConfigSyncResolverDefinition<
17+
undefined,
18+
ClustersConfigs,
19+
'serverStart'
20+
>;
21+
CLUSTERS_PUBLIC: ConfigSyncResolverDefinition<
22+
undefined,
23+
PublicClustersConfigs,
24+
'serverStart',
25+
true
2126
>;
2227
} = {
2328
CADENCE_WEB_PORT: {
@@ -29,39 +34,14 @@ const dynamicConfigs: {
2934
env: 'CADENCE_ADMIN_SECURITY_TOKEN',
3035
default: '',
3136
},
32-
GRPC_PROTO_DIR_BASE_PATH: {
33-
env: 'GRPC_PROTO_DIR_BASE_PATH',
34-
default: 'src/__generated__/idl/proto',
35-
},
36-
GRPC_SERVICES_NAMES: {
37-
env: 'NEXT_PUBLIC_CADENCE_GRPC_SERVICES_NAMES',
38-
default: 'cadence-frontend',
39-
isPublic: true,
40-
},
41-
// For testing purposes
42-
DYNAMIC: {
43-
resolver: async () => {
44-
return 1;
45-
},
37+
CLUSTERS: {
38+
resolver: clusters,
4639
evaluateOn: 'serverStart',
4740
},
48-
DYNAMIC_WITH_ARG: {
49-
resolver: async (value: number) => {
50-
return value;
51-
},
52-
evaluateOn: 'request',
53-
},
54-
COMPUTED: {
55-
resolver: () => {
56-
return ['value'];
57-
},
58-
evaluateOn: 'request',
59-
},
60-
COMPUTED_WITH_ARG: {
61-
resolver: (value: [string]) => {
62-
return value;
63-
},
64-
evaluateOn: 'request',
41+
CLUSTERS_PUBLIC: {
42+
resolver: clustersPublic,
43+
evaluateOn: 'serverStart',
44+
isPublic: true,
6545
},
6646
} as const;
6747

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import clusters from './clusters';
2+
3+
export default function clustersPublic() {
4+
const originalClusters = clusters();
5+
return originalClusters.map((cluster) => {
6+
return {
7+
clusterName: cluster.clusterName,
8+
};
9+
});
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { type ClusterConfig } from './clusters.types';
2+
3+
export type PublicClusterConfig = Pick<ClusterConfig, 'clusterName'>;
4+
5+
export type PublicClustersConfigs = Array<PublicClusterConfig>;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { type ClusterConfig } from './clusters.types';
2+
3+
const getArrayFromCommaSeparatedString = (
4+
str: string | undefined,
5+
defaultValue: string[]
6+
) => {
7+
return str?.trim()
8+
? str
9+
.split(',')
10+
.filter((c) => Boolean(c.trim()))
11+
.map((c) => c.trim())
12+
: defaultValue;
13+
};
14+
15+
export default function clusters() {
16+
const clusterNames = getArrayFromCommaSeparatedString(
17+
process.env.CADENCE_CLUSTERS_NAMES,
18+
['default']
19+
);
20+
const peers = getArrayFromCommaSeparatedString(
21+
process.env.CADENCE_GRPC_PEERS,
22+
['127.0.0.1:7933']
23+
);
24+
25+
const serviceNames = getArrayFromCommaSeparatedString(
26+
process.env.CADENCE_GRPC_SERVICES_NAMES,
27+
['cadence-frontend']
28+
);
29+
30+
return clusterNames.map((clusterName, i) => {
31+
return {
32+
clusterName: clusterName,
33+
grpc: {
34+
peer: peers[i],
35+
serviceName: serviceNames[i],
36+
metadata: {},
37+
},
38+
} satisfies ClusterConfig;
39+
});
40+
}

src/config/dynamic/resolvers/schemas/resolver-schemas.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@ import { z } from 'zod';
22

33
import { type ResolverSchemas } from '../../../../utils/config/config.types';
44

5-
// Example usage:
65
const resolverSchemas: ResolverSchemas = {
7-
COMPUTED: {
6+
CLUSTERS: {
87
args: z.undefined(),
9-
returnType: z.tuple([z.string()]),
8+
returnType: z.array(
9+
z.object({
10+
clusterName: z.string(),
11+
grpc: z.object({
12+
serviceName: z.string(),
13+
metadata: z.record(z.string(), z.string()).optional(),
14+
peer: z.string(),
15+
}),
16+
})
17+
),
1018
},
11-
COMPUTED_WITH_ARG: {
12-
args: z.tuple([z.string()]),
13-
returnType: z.tuple([z.string()]),
14-
},
15-
DYNAMIC: {
19+
CLUSTERS_PUBLIC: {
1620
args: z.undefined(),
17-
returnType: z.number(),
18-
},
19-
DYNAMIC_WITH_ARG: {
20-
args: z.number(),
21-
returnType: z.number(),
21+
returnType: z.array(
22+
z.object({
23+
clusterName: z.string(),
24+
})
25+
),
2226
},
2327
};
2428

0 commit comments

Comments
 (0)