Skip to content

Commit 0e0829b

Browse files
authored
Merge pull request OneUptime#2360 from OneUptime/k8s-impl
feat: Add Kubernetes Cluster Management and Monitoring Agent
2 parents 5e15bf1 + e8fe9a0 commit 0e0829b

107 files changed

Lines changed: 7526 additions & 379 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/launch.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66
"runtimeExecutable": "bash",
77
"runtimeArgs": ["-c", "cd MobileApp && npx expo start --port 8081"],
88
"port": 8081
9+
},
10+
{
11+
"name": "dashboard",
12+
"runtimeExecutable": "bash",
13+
"runtimeArgs": ["-c", "cd App/FeatureSet/Dashboard && npm run dev"],
14+
"port": 3002,
15+
"autoPort": false
916
}
1017
]
1118
}

.github/workflows/common-jobs.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ jobs:
1818
- name: Install Helm
1919
run: |
2020
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
21-
- name: Lint Helm Chart
21+
- name: Lint Helm Chart
2222
run: |
2323
helm lint ./HelmChart/Public/oneuptime
24+
helm lint ./HelmChart/Public/kubernetes-agent
2425
2526
js-lint:
2627
runs-on: ubuntu-latest

.github/workflows/release.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,16 @@ jobs:
134134
helm lint oneuptime
135135
helm template oneuptime --values oneuptime/values.yaml
136136
helm package --sign --key 'key@oneuptime.com' --keyring ~/.gnupg/secring.gpg oneuptime --version ${{needs.read-version.outputs.major_minor}} --app-version ${{needs.read-version.outputs.major_minor}}
137-
echo "Helm Chart Package created successfully"
137+
echo "OneUptime Helm Chart Package created successfully"
138+
helm lint kubernetes-agent
139+
helm template kubernetes-agent --values kubernetes-agent/values.yaml
140+
helm package --sign --key 'key@oneuptime.com' --keyring ~/.gnupg/secring.gpg kubernetes-agent --version ${{needs.read-version.outputs.major_minor}} --app-version ${{needs.read-version.outputs.major_minor}}
141+
echo "Kubernetes Agent Helm Chart Package created successfully"
138142
cd ..
139143
ls
140144
echo "Copying the package to helm-chart repo"
141-
rm -r ../../helm-chart/oneuptime
145+
rm -rf ../../helm-chart/oneuptime
146+
rm -rf ../../helm-chart/kubernetes-agent
142147
cp -r ./Public/* ../../helm-chart
143148
echo "Package copied successfully"
144149
cd .. && cd .. && cd helm-chart

App/FeatureSet/BaseAPI/Index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ import IncidentTemplateOwnerUserService, {
233233
import IncidentTemplateService, {
234234
Service as IncidentTemplateServiceType,
235235
} from "Common/Server/Services/IncidentTemplateService";
236+
import KubernetesClusterService, {
237+
Service as KubernetesClusterServiceType,
238+
} from "Common/Server/Services/KubernetesClusterService";
236239
import LabelService, {
237240
Service as LabelServiceType,
238241
} from "Common/Server/Services/LabelService";
@@ -552,6 +555,7 @@ import IncidentTemplate from "Common/Models/DatabaseModels/IncidentTemplate";
552555
import IncidentTemplateOwnerTeam from "Common/Models/DatabaseModels/IncidentTemplateOwnerTeam";
553556
import IncidentTemplateOwnerUser from "Common/Models/DatabaseModels/IncidentTemplateOwnerUser";
554557

558+
import KubernetesCluster from "Common/Models/DatabaseModels/KubernetesCluster";
555559
import Label from "Common/Models/DatabaseModels/Label";
556560
import MonitorCustomField from "Common/Models/DatabaseModels/MonitorCustomField";
557561
import MonitorGroupOwnerTeam from "Common/Models/DatabaseModels/MonitorGroupOwnerTeam";
@@ -1859,6 +1863,14 @@ const BaseAPIFeatureSet: FeatureSet = {
18591863
new BaseAPI<Label, LabelServiceType>(Label, LabelService).getRouter(),
18601864
);
18611865

1866+
app.use(
1867+
`/${APP_NAME.toLocaleLowerCase()}`,
1868+
new BaseAPI<KubernetesCluster, KubernetesClusterServiceType>(
1869+
KubernetesCluster,
1870+
KubernetesClusterService,
1871+
).getRouter(),
1872+
);
1873+
18621874
app.use(
18631875
`/${APP_NAME.toLocaleLowerCase()}`,
18641876
new BaseAPI<EmailVerificationToken, EmailVerificationTokenServiceType>(

App/FeatureSet/Dashboard/src/App.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,15 @@ const ServiceRoutes: React.LazyExoticComponent<
181181
};
182182
});
183183
});
184+
const KubernetesRoutes: React.LazyExoticComponent<
185+
AllRoutesModule["KubernetesRoutes"]
186+
> = lazy(() => {
187+
return import("./Routes/AllRoutes").then((m: AllRoutesModule) => {
188+
return {
189+
default: m.KubernetesRoutes,
190+
};
191+
});
192+
});
184193
const CodeRepositoryRoutes: React.LazyExoticComponent<
185194
AllRoutesModule["CodeRepositoryRoutes"]
186195
> = lazy(() => {
@@ -528,6 +537,12 @@ const App: () => JSX.Element = () => {
528537
element={<ServiceRoutes {...commonPageProps} />}
529538
/>
530539

540+
{/* Kubernetes */}
541+
<PageRoute
542+
path={RouteMap[PageMap.KUBERNETES_ROOT]?.toString() || ""}
543+
element={<KubernetesRoutes {...commonPageProps} />}
544+
/>
545+
531546
{/* Code Repository */}
532547
<PageRoute
533548
path={RouteMap[PageMap.CODE_REPOSITORY_ROOT]?.toString() || ""}

App/FeatureSet/Dashboard/src/Components/Exceptions/ExceptionsTable.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ export interface ComponentProps {
2929
query: Query<TelemetryException>;
3030
title: string;
3131
description: string;
32+
onFetchSuccess?:
33+
| ((data: Array<TelemetryException>, totalCount: number) => void)
34+
| undefined;
3235
}
3336

3437
const TelemetryExceptionTable: FunctionComponent<ComponentProps> = (
@@ -47,6 +50,7 @@ const TelemetryExceptionTable: FunctionComponent<ComponentProps> = (
4750
userPreferencesKey="telemetry-exception-table"
4851
isEditable={false}
4952
isCreateable={false}
53+
onFetchSuccess={props.onFetchSuccess}
5054
singularName="Exception"
5155
pluralName="Exceptions"
5256
name="TelemetryException"

0 commit comments

Comments
 (0)