20219: Start / stop log polling when container is running
authorStephen Smith <stephen@curii.com>
Wed, 2 Aug 2023 01:47:53 +0000 (21:47 -0400)
committerStephen Smith <stephen@curii.com>
Wed, 2 Aug 2023 02:36:57 +0000 (22:36 -0400)
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen@curii.com>

cypress/integration/process.spec.js
src/store/processes/process.ts
src/views/process-panel/process-log-card.tsx

index 00a6631bcdcbd434fb9fd3c4eab175803fb0a660..b41a443e95a326eb2258edef3df102dc8654c7b4 100644 (file)
@@ -2,6 +2,8 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
+import { ContainerState } from 'models/container';
+
 describe('Process tests', function() {
     let activeUser;
     let adminUser;
@@ -415,6 +417,12 @@ describe('Process tests', function() {
 
     describe('Logs panel', function() {
         it('shows live process logs', function() {
+            cy.intercept({method: 'GET', url: '**/arvados/v1/containers/*'}, (req) => {
+                req.reply((res) => {
+                    res.body.state = ContainerState.RUNNING;
+                });
+            });
+
             const crName = 'test_container_request';
             createContainerRequest(
                 activeUser,
index e621949887a4307bd8477df2667d485bbbe8e2cb..526629cd024b759112df06e41782f990fb2d29ec 100644 (file)
@@ -185,6 +185,10 @@ export const getProcessStatus = ({ containerRequest, container }: Process): Proc
     }
 };
 
+export const isProcessRunning = ({ container }: Process): boolean => (
+    container?.state === ContainerState.RUNNING
+);
+
 export const isProcessRunnable = ({ containerRequest }: Process): boolean => (
     containerRequest.state === ContainerRequestState.UNCOMMITTED
 );
index bcd4b240224178ca3f96efff6d128c7ea3b14e31..4fd8f2343d88b5a8b3356c4b0f53987da3f10cb4 100644 (file)
@@ -29,7 +29,7 @@ import {
     WordWrapOffIcon,
     WordWrapOnIcon,
 } from 'components/icon/icon';
-import { Process } from 'store/processes/process';
+import { Process, isProcessRunning } from 'store/processes/process';
 import { MPVPanelProps } from 'components/multi-panel-view/multi-panel-view';
 import {
     FilterOption,
@@ -105,7 +105,7 @@ export const ProcessLogsCard = withStyles(styles)(
 
         useAsyncInterval(() => (
             pollProcessLogs(process.containerRequest.uuid)
-        ), 2000);
+        ), isProcessRunning(process) ? 2000 : null);
 
         return <Grid item className={classes.root} xs={12}>
             <Card className={classes.card}>