diff --git a/bun.lockb b/bun.lockb index 266be95..d0bf040 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 41355a5..b6cb98f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@hookform/resolvers": "^3.9.0", - "@kubernetes/client-node": "^0.22.1", + "@kubernetes/client-node": "^0.22.2", "@next-auth/prisma-adapter": "^1.0.7", "@prisma/client": "^5.21.1", "@radix-ui/react-alert-dialog": "^1.1.2", diff --git a/src/app/api/app-status/route.ts b/src/app/api/app-status/route.ts index 4e05662..a48b6c5 100644 --- a/src/app/api/app-status/route.ts +++ b/src/app/api/app-status/route.ts @@ -1,7 +1,7 @@ import k3s from "@/server/adapter/kubernetes-api.adapter"; import appService from "@/server/services/app.service"; import deploymentService from "@/server/services/deployment.service"; -import { simpleRoute } from "@/server/utils/action-wrapper.utils"; +import { getAuthUserSession, simpleRoute } from "@/server/utils/action-wrapper.utils"; import { Informer, V1Pod } from "@kubernetes/client-node"; import { z } from "zod"; import * as k8s from '@kubernetes/client-node'; @@ -32,15 +32,16 @@ export async function POST(request: Request) { start(controller) { const getDeploymentStatus = async () => { - console.log(`Getting Deployment Status for app ${appId}`); const deploymentStatus = await deploymentService.getDeploymentStatus(app.projectId, app.id); controller.enqueue(encoder.encode(deploymentStatus)) }; + const kc = k3s.getKubeConfig(); informer = k8s.makeInformer( - k3s.getKubeConfig(), + kc, `/api/v1/namespaces/${namespace}/pods`, - () => k3s.core.listNamespacedPod(namespace, undefined, undefined, undefined, undefined, `app=${app.id}`) + () => k3s.core.listNamespacedPod(namespace, undefined, undefined, undefined, undefined, `app=${app.id}`), + `app=${app.id}` ); informer.on('add', () => getDeploymentStatus()); @@ -48,16 +49,22 @@ export async function POST(request: Request) { informer.on('change', () => getDeploymentStatus()); informer.on('delete', () => getDeploymentStatus()); informer.on('error', async (err: any) => { - console.error(`Error while listening for Deplyoment Changes for app ${appId}: `, err); + // todo there is a error because of the invalid Certificat Authority, so every time error + // is thrown, we need to restart the informer --> TODO + console.error(`[INFORMER ERROR] Error while listening for Deplyoment Changes for app ${appId}: `, err); + getDeploymentStatus() // Try to restart informer after 5sec await new Promise(resolve => setTimeout(resolve, 5000)); informer.start(); }); - getDeploymentStatus(); // Initial status + + informer.start(); + getDeploymentStatus(); + console.log("[START] Starting informer for app " + appId); }, cancel() { - console.log("Stream closed.") + console.log("[LEAVE] Cancelling informer for app " + appId); informer?.stop(); } }); diff --git a/src/server/services/deployment.service.ts b/src/server/services/deployment.service.ts index f90917c..90343ff 100644 --- a/src/server/services/deployment.service.ts +++ b/src/server/services/deployment.service.ts @@ -1,6 +1,6 @@ import { AppExtendedModel } from "@/model/app-extended.model"; import k3s from "../adapter/kubernetes-api.adapter"; -import { V1Deployment, V1Ingress, V1PersistentVolumeClaim, V1ReplicaSet } from "@kubernetes/client-node"; +import { V1Deployment, V1ReplicaSet } from "@kubernetes/client-node"; import buildService from "./build.service"; import { ListUtils } from "../utils/list.utils"; import { DeploymentInfoModel, DeplyomentStatus } from "@/model/deployment-info.model";