Skip to content
Sarj Code Standards

failed-probe-zero-threshold

Do not let a failed subprocess count probe meet its threshold through a zero fallback.

Why

A failed observation is different from an observed count of zero. Coalescing the error sentinel can make a recovery comparison succeed when its baseline is zero.

Fix

Check the probe result for None before comparing it, or make an intentional zero-baseline skip policy explicit.

Examples

Before — flagged Keep failed observation distinct from zero
app/recovery.py
import subprocess
def read_status():
try:
result = subprocess.run(
["service", "status"], capture_output=True, text=True, check=False
)
except (subprocess.TimeoutExpired, OSError):
return None
return None if result.returncode else result.stdout
def active_count():
output = read_status()
return None if output is None else output.count("active")
def recovered(baseline: int) -> bool:
if (active_count() or 0) >= baseline:
return True
return False
After — preferred Reject a missing observation explicitly
app/recovery.py
import subprocess
def read_status():
try:
result = subprocess.run(
["service", "status"], capture_output=True, text=True, check=False
)
except (subprocess.TimeoutExpired, OSError):
return None
return None if result.returncode else result.stdout
def active_count():
output = read_status()
return None if output is None else output.count("active")
def recovered(baseline: int) -> bool:
observed = active_count()
if observed is not None and observed >= baseline:
return True
return False