Skip to content

Commit 857e65a

Browse files
committed
feat: add pushTelemetry.topologyName option/prefill in spec generator of agent
Fixes #2166 Update src/components/Agents/Add/AddAgentForm.tsx Co-authored-by: Moshe Immerman <moshe@flanksource.com> fix: fix issues
1 parent 26939d7 commit 857e65a

File tree

5 files changed

+73
-7
lines changed

5 files changed

+73
-7
lines changed

src/components/Agents/Add/AddAgentForm.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useAgentQuery } from "@flanksource-ui/api/query-hooks/useAgentsQuery";
22
import FormikSwitchField from "@flanksource-ui/components/Forms/Formik/FormikSwitchField";
33
import { AuthorizationAccessCheck } from "@flanksource-ui/components/Permissions/AuthorizationAccessCheck";
4+
import { useUser } from "@flanksource-ui/context";
45
import { tables } from "@flanksource-ui/context/UserAccessContext/permissions";
56
import FormSkeletonLoader from "@flanksource-ui/ui/SkeletonLoader/FormSkeletonLoader";
67
import clsx from "clsx";
@@ -23,6 +24,10 @@ import DeleteAgentButton from "../DeleteAgentButton";
2324

2425
export type AgentFormValues = GenerateAgent & {
2526
kubernetes?: Record<string, any>;
27+
pushTelemetry?: {
28+
enabled?: boolean;
29+
topologyName?: string;
30+
};
2631
};
2732

2833
type Props = {
@@ -40,6 +45,7 @@ export default function AgentForm({
4045
onSuccess = () => {},
4146
onUpdated = () => {}
4247
}: Props) {
48+
const { backendUrl } = useUser();
4349
const [formValues, setFormValues] = useState<AgentFormValues>();
4450

4551
const { data, isLoading: isLoadingAgent } = useAgentQuery(id!, {
@@ -103,6 +109,10 @@ export default function AgentForm({
103109
kubernetes: {
104110
interval: "30m",
105111
enabled: false
112+
},
113+
pushTelemetry: {
114+
enabled: false,
115+
topologyName: backendUrl ?? ""
106116
}
107117
}}
108118
onSubmit={handleSubmit}
@@ -169,6 +179,27 @@ export default function AgentForm({
169179
hint="How often to perform a full reconciliation of changes (in addition to real-time changes from Kubernetes events), set higher for larger clusters."
170180
/>
171181
)}
182+
183+
<FormikSwitchField
184+
options={[
185+
{ label: "Enabled", key: true },
186+
{ label: "Disabled", key: false }
187+
]}
188+
name="pushTelemetry.enabled"
189+
label={
190+
<div className="flex w-full flex-col">
191+
<span>Telemetry</span>
192+
</div>
193+
}
194+
/>
195+
{Boolean(values.pushTelemetry?.enabled) === true && (
196+
<FormikTextInput
197+
name="pushTelemetry.topologyName"
198+
label="Label"
199+
hintPosition="top"
200+
hint='A unique name describing the company and cluster in which the agent is running, e.g. "acme-prod"'
201+
/>
202+
)}
172203
</div>
173204
</div>
174205
</div>

src/components/Agents/InstalAgentInstruction/CLIInstallAgent.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { GeneratedAgent } from "@flanksource-ui/api/services/agents";
2+
import { useUser } from "@flanksource-ui/context";
23
import CodeBlock from "@flanksource-ui/ui/Code/CodeBlock";
34
import Handlebars from "handlebars";
45
import { useMemo } from "react";
@@ -15,6 +16,10 @@ helm install mc-agent flanksource/mission-control-agent -n "mission-control-agen
1516
--set upstream.username=token \\
1617
--set upstream.password={{generatedAgent.access_token}} \\
1718
--set upstream.agentName={{agentFormValues.name}} \\
19+
{{#if pushTelemetry}}
20+
--set pushTelemetry.enabled=true \\
21+
--set pushTelemetry.topologyName={{pushTelemetry.topologyName}}
22+
{{/if}}
1823
--create-namespace
1924
2025
{{#if kubeOptions}}
@@ -35,16 +40,27 @@ export default function CLIInstallAgent({
3540
generatedAgent,
3641
agentFormValues
3742
}: Props) {
38-
const kubeOptions = agentFormValues?.kubernetes;
39-
4043
const baseUrl = useAgentsBaseURL();
44+
const { backendUrl } = useUser();
4145

4246
const helmCommandTemplate = useMemo(() => {
47+
const kubeOptions = agentFormValues?.kubernetes;
48+
const pushTelemetry = agentFormValues?.pushTelemetry;
49+
4350
return template(
4451
{
4552
generatedAgent,
4653
baseUrl,
4754
agentFormValues,
55+
pushTelemetry: pushTelemetry?.enabled
56+
? {
57+
...pushTelemetry,
58+
topologyName: backendUrl
59+
? `${backendUrl}-${pushTelemetry.topologyName}`
60+
: pushTelemetry.topologyName
61+
}
62+
: undefined,
63+
backendUrl,
4864
kubeOptions: kubeOptions
4965
? {
5066
interval: kubeOptions?.interval,
@@ -54,7 +70,7 @@ export default function CLIInstallAgent({
5470
},
5571
{}
5672
);
57-
}, [agentFormValues, baseUrl, generatedAgent, kubeOptions]);
73+
}, [agentFormValues, backendUrl, baseUrl, generatedAgent]);
5874

5975
return (
6076
<div className="flex flex-1 flex-col gap-4 overflow-y-auto p-2">

src/components/Agents/InstalAgentInstruction/FluxInstallAgent.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { GeneratedAgent } from "@flanksource-ui/api/services/agents";
2+
import { useUser } from "@flanksource-ui/context";
23
import { JSONViewer } from "@flanksource-ui/ui/Code/JSONViewer";
34
import Handlebars from "handlebars";
45
import { useMemo } from "react";
@@ -40,6 +41,11 @@ spec:
4041
username: token
4142
agentName: {{agentFormValues.name}}
4243
password: {{generatedAgent.access_token}}
44+
{{#if pushTelemetry}}
45+
pushTelemetry:
46+
enabled: true
47+
topologyName: {{pushTelemetry.topologyName}}
48+
{{/if}}
4349
{{#if kubeOptions}}
4450
---
4551
apiVersion: helm.toolkit.fluxcd.io/v2beta1
@@ -72,16 +78,27 @@ export default function FluxInstallAgent({
7278
generatedAgent,
7379
agentFormValues
7480
}: Props) {
75-
const kubeOptions = agentFormValues?.kubernetes;
76-
7781
const baseUrl = useAgentsBaseURL();
82+
const { backendUrl } = useUser();
7883

7984
const yaml = useMemo(() => {
85+
const kubeOptions = agentFormValues?.kubernetes;
86+
const pushTelemetry = agentFormValues?.pushTelemetry ?? undefined;
87+
8088
return template(
8189
{
8290
generatedAgent,
8391
baseUrl,
8492
agentFormValues,
93+
pushTelemetry: pushTelemetry?.enabled
94+
? {
95+
...pushTelemetry,
96+
topologyName: backendUrl
97+
? `${backendUrl}-${pushTelemetry.topologyName}`
98+
: pushTelemetry.topologyName
99+
}
100+
: undefined,
101+
backendUrl,
85102
kubeOptions: kubeOptions
86103
? {
87104
interval: kubeOptions?.interval,
@@ -91,7 +108,7 @@ export default function FluxInstallAgent({
91108
},
92109
{}
93110
);
94-
}, [agentFormValues, baseUrl, generatedAgent, kubeOptions]);
111+
}, [agentFormValues, backendUrl, baseUrl, generatedAgent]);
95112

96113
return (
97114
<div className="flex max-h-[30rem] flex-1 flex-col gap-4 overflow-y-auto rounded-md border border-gray-200 p-2 px-4">

src/components/Authentication/Clerk/ClerkAuthContextProvider.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ export default function ClerkAuthContextProvider({
7070
<AuthContext.Provider
7171
value={{
7272
user: payload.user ?? (payload as any),
73-
backendUrl: backendURL as string
73+
backendUrl: backendURL as string,
74+
orgSlug: organization?.slug ?? undefined
7475
}}
7576
>
7677
{children}

src/context/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { User } from "../api/types/users";
44
interface IAuthContext {
55
user?: User;
66
backendUrl?: string;
7+
orgSlug?: string;
78
}
89

910
export const AuthContext = createContext<IAuthContext>({});

0 commit comments

Comments
 (0)