Просмотр исходного кода

Replace secrets websocket by helm_releases websocket

jnfrati 4 лет назад
Родитель
Сommit
ea07193cda

+ 5 - 2
dashboard/src/main/home/cluster-dashboard/chart/Chart.tsx

@@ -110,7 +110,10 @@ const Chart: React.FunctionComponent<Props> = ({
             margin_left={"17px"}
           />
           <LastDeployed>
-            <Dot>•</Dot> Last deployed {readableDate(chart.info.last_deployed)}
+            <Dot>•</Dot> Last deployed{" "}
+            {readableDate(
+              release?.info?.last_deployed || chart.info.last_deployed
+            )}
           </LastDeployed>
         </InfoWrapper>
 
@@ -120,7 +123,7 @@ const Chart: React.FunctionComponent<Props> = ({
         </TagWrapper>
       </BottomWrapper>
 
-      <Version>v{release?.metadata?.labels?.version || chart.version}</Version>
+      <Version>v{release?.version || chart.version}</Version>
     </StyledChart>
   );
 };

+ 36 - 22
dashboard/src/main/home/cluster-dashboard/chart/ChartList.tsx

@@ -104,26 +104,45 @@ const ChartList: React.FunctionComponent<Props> = ({
     }
   };
 
-  const handleReleaseWSNotification = (object: any) => {
-    if (object.type === "helm.sh/release.v1") {
-      setReleases((oldReleases) => {
-        const currentRelease = oldReleases[object.metadata.labels.name];
-        const currentReleaseVersion = Number(
-          currentRelease?.metadata?.labels?.version
-        );
-        const newReleaseVersion = Number(object?.metadata?.labels?.version);
-        if (currentReleaseVersion > newReleaseVersion) {
+  const setupHelmReleasesWebsocket = () => {
+    const apiPath = `/api/projects/${context.currentProject.id}/k8s/helm_releases?cluster_id=${context.currentCluster.id}`;
+
+    const wsConfig = {
+      onopen: () => {
+        console.log("connected to chart live updates websocket");
+      },
+      onmessage: (evt: MessageEvent) => {
+        let event = JSON.parse(evt.data);
+        const object = event.Object;
+        setReleases((oldReleases) => {
+          const currentRelease = oldReleases[object?.name];
+          const currentReleaseVersion = Number(currentRelease?.version);
+          const newReleaseVersion = Number(object?.version);
+          if (currentReleaseVersion > newReleaseVersion) {
+            return {
+              ...oldReleases,
+            };
+          }
+
           return {
             ...oldReleases,
+            [object.name]: object,
           };
-        }
+        });
+      },
 
-        return {
-          ...oldReleases,
-          [object.metadata.labels.name]: object,
-        };
-      });
-    }
+      onclose: () => {
+        console.log("closing chart live updates websocket");
+      },
+
+      onerror: (err: ErrorEvent) => {
+        console.log(err);
+        closeWebsocket("helm_releases");
+      },
+    };
+
+    newWebsocket("helm_releases", apiPath, wsConfig);
+    openWebsocket("helm_releases");
   };
 
   const setupWebsocket = (kind: string) => {
@@ -139,11 +158,6 @@ const ChartList: React.FunctionComponent<Props> = ({
         let object = event.Object;
         object.metadata.kind = event.Kind;
 
-        if (event.Kind === "secrets") {
-          handleReleaseWSNotification(object);
-          return;
-        }
-
         setControllers((oldControllers) => ({
           ...oldControllers,
           [object.metadata.uid]: object,
@@ -176,8 +190,8 @@ const ChartList: React.FunctionComponent<Props> = ({
       "statefulset",
       "daemonset",
       "replicaset",
-      "secrets",
     ]);
+    setupHelmReleasesWebsocket();
 
     return () => {
       closeAllWebsockets();

+ 0 - 2
internal/kubernetes/agent.go

@@ -561,8 +561,6 @@ func (a *Agent) StreamControllerStatus(conn *websocket.Conn, kind string, select
 		informer = factory.Core().V1().Namespaces().Informer()
 	case "pod":
 		informer = factory.Core().V1().Pods().Informer()
-	case "secrets":
-		informer = factory.Core().V1().Secrets().Informer()
 	}
 
 	stopper := make(chan struct{})