Eliminate all bc command dependencies - replace with awk for portability

PROBLEM:
- bc command not installed on all systems (requires bc package)
- 30 instances across toolkit causing potential failures
- bc is external dependency for floating-point arithmetic

SOLUTION:
- Replaced all bc usage with awk (universally available)
- Pattern: echo "X * Y" | bc → awk "BEGIN {printf \"%.2f\", X * Y}"
- Pattern: (( $(echo "X > Y" | bc -l) )) → awk comparison + bash test

FILES MODIFIED (8 files, 30 bc instances eliminated):
1. lib/threat-intelligence.sh (1 fix)
   - Line 310: Load average to integer conversion

2. lib/reference-db.sh (2 fixes)
   - Line 554: CPU load percentage calculation
   - Line 570: TCP retransmission comparison

3. lib/php-analyzer.sh (5 fixes)
   - Line 138: Script duration comparison
   - Lines 391-395: OPcache hit rate + wasted memory + cached scripts
   - Line 479: OPcache hit rate threshold

4. modules/performance/hardware-health-check.sh (1 fix)
   - Line 264: CPU frequency conversion (KHz to GHz)

5. modules/performance/network-bandwidth-analyzer.sh (3 fixes)
   - Line 168: Daily bandwidth threshold (50 GiB)
   - Line 238: Bytes to MB conversion
   - Lines 388-390: TCP retransmission percentage

6. modules/performance/php-optimizer.sh (2 fixes)
   - Lines 457, 653: OPcache hit rate comparisons

7. modules/diagnostics/system-health-check.sh (10 fixes)
   - Lines 345-350: Load per core + threshold calculations
   - Lines 354-358: Load trend detection (3 comparisons)
   - Lines 367-406: Load critical/warning/elevated checks
   - Lines 828-829: TCP retransmission analysis
   - Line 901: Clock offset detection
   - Line 1692: Network stats TCP retrans percent

8. tools/toolkit-qa-check.sh (QA improvements)
   - Added --exclude="toolkit-qa-check.sh" to prevent self-scanning
   - Eliminates false positives from QA script itself

TECHNICAL DETAILS:
- All awk commands use BEGIN block for pure calculation
- printf formatting preserves decimal precision (%.2f, %.1f, %.0f)
- Error handling with 2>/dev/null || echo fallbacks
- Ternary operators for comparisons: (condition ? 1 : 0)

TESTING:
✓ QA scan shows 0 CRITICAL, 0 HIGH, 0 MEDIUM, 0 LOW issues
✓ All 30 bc instances eliminated
✓ No external dependencies beyond standard bash + awk
✓ Toolkit now portable to minimal Linux installations

IMPACT:
+ Eliminates bc package dependency
+ 100% portable (awk included in all Unix/Linux systems)
+ Same accuracy for floating-point calculations
+ Faster execution (awk is typically faster than bc)
+ Better error handling with fallback values
This commit is contained in:
cschantz
2025-12-03 20:49:46 -05:00
parent 8cc1384a85
commit 154afff7fc
8 changed files with 69 additions and 42 deletions
+5 -5
View File
@@ -71,7 +71,7 @@ while IFS=: read -r file line_num line_content; do
echo "CRITICAL|$file|$line_num|grep -F with regex anchor"
count_issue "CRITICAL"
fi
done < <(grep -rn 'grep -F' "$TOOLKIT_PATH" --include="*.sh" 2>/dev/null)
done < <(grep -rn 'grep -F' "$TOOLKIT_PATH" --include="*.sh" --exclude="toolkit-qa-check.sh" 2>/dev/null)
echo ""
} >> "$REPORT"
@@ -228,9 +228,9 @@ while IFS=: read -r file line_num line_content; do
echo "LOW|$file|$line_num|Uses bc command"
count_issue "LOW"
fi
done < <(grep -rn ' bc\b' "$TOOLKIT_PATH" --include="*.sh" 2>/dev/null | head -10)
done < <(grep -rn ' bc\b' "$TOOLKIT_PATH" --include="*.sh" --exclude="toolkit-qa-check.sh" 2>/dev/null | head -10)
total_bc=$(grep -r ' bc\b' "$TOOLKIT_PATH" --include="*.sh" 2>/dev/null | wc -l)
total_bc=$(grep -r ' bc\b' "$TOOLKIT_PATH" --include="*.sh" --exclude="toolkit-qa-check.sh" 2>/dev/null | wc -l)
echo "Total found: $total_bc (showing first 10)"
echo ""
} >> "$REPORT"
@@ -254,9 +254,9 @@ while IFS=: read -r file line_num line_content; do
count_issue "MEDIUM"
fi
fi
done < <(grep -rn '/var/cpanel' "$TOOLKIT_PATH" --include="*.sh" 2>/dev/null | head -10)
done < <(grep -rn '/var/cpanel' "$TOOLKIT_PATH" --include="*.sh" --exclude="toolkit-qa-check.sh" 2>/dev/null | head -10)
total_cpanel=$(grep -r '/var/cpanel' "$TOOLKIT_PATH" --include="*.sh" 2>/dev/null | grep -vE '(\$SYS|:-/var/cpanel)' | grep -v '^[[:space:]]*#' | wc -l)
total_cpanel=$(grep -r '/var/cpanel' "$TOOLKIT_PATH" --include="*.sh" --exclude="toolkit-qa-check.sh" 2>/dev/null | grep -vE '(\$SYS|:-/var/cpanel)' | grep -v '^[[:space:]]*#' | wc -l)
echo "Total found: $total_cpanel (showing first 10)"
echo ""
} >> "$REPORT"