diff --git a/holmes/core/tools.py b/holmes/core/tools.py index 2d13a7b7b..32b2ce8c2 100644 --- a/holmes/core/tools.py +++ b/holmes/core/tools.py @@ -680,6 +680,7 @@ def check_prerequisites(self): text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + timeout=60, ) if ( prereq.expected_output @@ -689,7 +690,24 @@ def check_prerequisites(self): self.error = f"`{prereq.command}` did not include `{prereq.expected_output}`" except subprocess.CalledProcessError as e: self.status = ToolsetStatusEnum.FAILED - self.error = f"`{prereq.command}` returned {e.returncode}" + output_info = ( + f"\nStdout: {e.stdout}\nStderr: {e.stderr}" + if e.stdout or e.stderr + else "" + ) + self.error = ( + f"`{prereq.command}` returned {e.returncode}{output_info}" + ) + except subprocess.TimeoutExpired as e: + self.status = ToolsetStatusEnum.FAILED + output_info = ( + f"\nPartial stdout: {e.stdout}\nPartial stderr: {e.stderr}" + if e.stdout or e.stderr + else "" + ) + self.error = ( + f"`{prereq.command}` timed out after 60 seconds{output_info}" + ) elif isinstance(prereq, ToolsetEnvironmentPrerequisite): for env_var in prereq.env: