Skip to main content

System Health Monitor

A comprehensive DevOps automation script that demonstrates Utah's advanced features including log analysis, performance monitoring, user management, and CI/CD pipeline monitoring. This example showcases how Utah simplifies complex system administration tasks.

🎬 Interactive Demo

Watch this script in action! The demo shows advanced argument parsing, real-time monitoring with professional output, and dynamic alerting:

What you'll see in the demo:

  • Basic execution with --verbose flag showing comprehensive system analysis
  • Help system demonstrating advanced argument parsing with typed parameters
  • Custom thresholds triggering dynamic alerts by setting lower CPU/memory limits
  • Professional output with rich colors, emojis, and structured reporting

Features Demonstrated

  • Advanced argument parsing with type validation and defaults
  • Intelligent log analysis with pattern matching and statistics
  • Performance trend analysis with historical data tracking
  • Multi-threshold alerting with escalation logic
  • Parallel network monitoring for infrastructure health checks
  • Security auditing with automated scoring
  • User management with role-based access control
  • Comprehensive reporting with JSON output

Complete Script

// Utah Demo Script - Advanced System Health Monitor & DevOps Automation Tool
// This comprehensive script demonstrates Utah's power vs. the complexity of equivalent bash code

script.description("Utah DevOps Automation Suite - System Health, Performance Analytics, User Management & CI/CD Pipeline Monitoring");

// Advanced argument parsing with rich types and validation
args.define("--help", "-h", "Show this comprehensive help. Advanced log analysis and trend monitoring");
args.define("--verbose", "-v", "Enable detailed verbose output", "boolean", false, false);
args.define("--config", "-c", "Configuration file path", "string", false, "/etc/utah-monitor.conf");
args.define("--max-cpu", "", "CPU usage alert threshold percentage", "number", false, 85);
args.define("--max-memory", "", "Memory usage alert threshold percentage", "number", false, 90);
args.define("--output", "-o", "Output report file path", "string", false, "system_health_report.json");
args.define("--user", "-u", "Username for user management operations", "string", false, "utah_demo_user");
args.define("--admin", "", "Grant admin privileges to created users", "boolean", false, false);
args.define("--monitor-interval", "", "Monitoring interval in seconds", "number", false, 30);
args.define("--alert-email", "", "Email address for critical alerts", "string", false, "admin@company.com");
args.define("--backup-dir", "", "Directory for configuration backups", "string", false, "/var/backups/utah");

// Handle help gracefully
if (args.has("--help")) {
args.showHelp();
exit(0);
}

// Get typed arguments with intelligent defaults
let verbose: boolean = args.has("--verbose");
let configPath: string = args.get("--config");
let maxCpuThreshold: number = args.get("--max-cpu");
let maxMemoryThreshold: number = args.get("--max-memory");
let outputFile: string = args.get("--output");
let targetUser: string = args.get("--user");
let makeAdmin: boolean = args.has("--admin");
let monitorInterval: number = args.get("--monitor-interval");
let alertEmail: string = args.get("--alert-email");
let backupDir: string = args.get("--backup-dir");

// Enhanced startup display
console.clear();
console.log("🚀 Utah DevOps Automation Suite v2.0");
console.log("=====================================");
console.log("⚡ Next-generation shell scripting with TypeScript-like syntax");
console.log("🎯 Comprehensive system monitoring and automation");
console.log("📊 Real-time performance analytics and alerting");
console.log("=====================================");

// System discovery and capability assessment
let hasDocker: boolean = os.isInstalled("docker");
let hasGit: boolean = os.isInstalled("git");
let hasNode: boolean = os.isInstalled("node");
let hasPython: boolean = os.isInstalled("python3");
let currentOS: string = os.getOS();

console.log("🔍 System Discovery & Capability Assessment:");
console.log(` Operating System: ${currentOS}`);

// Tool availability matrix
let availableTools: number = 0;
let totalTools: number = 4;

if (hasDocker) {
console.log(" ✅ Docker: Container platform available");
availableTools = availableTools + 1;
} else {
console.log(" ❌ Docker: Container platform missing");
}

if (hasGit) {
console.log(" ✅ Git: Version control system available");
availableTools = availableTools + 1;
} else {
console.log(" ❌ Git: Version control system missing");
}

if (hasNode) {
console.log(" ✅ Node.js: JavaScript runtime available");
availableTools = availableTools + 1;
} else {
console.log(" ❌ Node.js: JavaScript runtime missing");
}

if (hasPython) {
console.log(" ✅ Python3: Programming language available");
availableTools = availableTools + 1;
} else {
console.log(" ❌ Python3: Programming language missing");
}

// Calculate system readiness score
let readinessScore: number = (availableTools * 100) / totalTools;
console.log(` 📊 System Readiness Score: ${readinessScore}% (${availableTools}/${totalTools} tools)`);

// Process analytics and resource monitoring
let processId: number = process.id();
let currentCpu: number = process.cpu();
let currentMemory: number = process.memory();
let elapsedTime: string = process.elapsedTime();

console.log("📊 Advanced Process Analytics:");
console.log(` Process ID: ${processId}`);
console.log(` CPU Usage: ${currentCpu}% (threshold: ${maxCpuThreshold}%)`);
console.log(` Memory Usage: ${currentMemory}% (threshold: ${maxMemoryThreshold}%)`);
console.log(` Runtime: ${elapsedTime}`);

// Intelligent log analysis
console.log(`📋 Intelligent Log Analysis:`);
let logEntries: string[] = [
"INFO: User authentication successful",
"ERROR: Database connection timeout",
"WARN: Memory usage approaching limit",
"INFO: Automated backup completed",
"ERROR: Network interface error",
"INFO: Cache optimization finished",
"WARN: Disk space below threshold",
"ERROR: Service restart required"
];

let errorCount: number = 0;
let warningCount: number = 0;
let infoCount: number = 0;
let criticalErrors: string[] = [];

// Sophisticated log pattern analysis
for (let entry: string in logEntries) {
if (entry.startsWith("ERROR:")) {
errorCount = errorCount + 1;
let errorMsg: string = entry.substring(7);
array.push(criticalErrors, errorMsg);

// Pattern matching for critical issues
if (errorMsg.indexOf("Database") >= 0 || errorMsg.indexOf("Service") >= 0) {
console.log(` 🚨 CRITICAL: ${errorMsg}`);
}
} else if (entry.startsWith("WARN:")) {
warningCount = warningCount + 1;
} else if (entry.startsWith("INFO:")) {
infoCount = infoCount + 1;
}
}

console.log(` 📊 Log Summary: ${errorCount} errors, ${warningCount} warnings, ${infoCount} info messages`);

// Performance trend analysis
console.log(`📈 Performance Trend Analysis:`);
let cpuHistory: number[] = [45, 52, 48, 65, 71, 69, currentCpu];
let memHistory: number[] = [38, 42, 45, 58, 62, 67, currentMemory];

// Calculate averages and trends
let cpuSum: number = 0;
let memSum: number = 0;
for (let cpu: number in cpuHistory) {
cpuSum = cpuSum + cpu;
}
for (let mem: number in memHistory) {
memSum = memSum + mem;
}
let cpuAverage: number = cpuSum / cpuHistory.length;
let memAverage: number = memSum / memHistory.length;

console.log(` 📊 CPU: ${currentCpu}% (avg: ${cpuAverage}%)`);
console.log(` 📊 Memory: ${currentMemory}% (avg: ${memAverage}%)`);

// Multi-threshold alerting
let alertsTriggered: number = 0;
console.log(`🔔 Smart Alerting System:`);

if (currentCpu > maxCpuThreshold || currentMemory > 85) {
alertsTriggered = alertsTriggered + 1;
console.log(` 🚨 ALERT: Resource usage critical!`);

let severity: string = "LOW";
if (currentCpu > 90 || currentMemory > 95) {
severity = "CRITICAL";
} else if (currentCpu > maxCpuThreshold + 10 || currentMemory > 90) {
severity = "HIGH";
}

console.log(` 📊 Severity Level: ${severity}`);
}

// Network performance testing
console.log(`⚡ Network Performance Testing:`);
let testHosts: string[] = ["google.com", "github.com"];

timer.start();
for (let host: string in testHosts) {
try {
let startTime: number = timer.current();
let response: string = web.get("https://${host}");
let endTime: number = timer.current();
let latency: number = endTime - startTime;
console.log(` 📍 ${host}: ${latency}ms`);
}
catch {
console.log(`${host}: Unreachable`);
}
}

// Security audit
console.log(`🔒 Security Quick Audit:`);
let securityScore: number = 100;
let securityIssues: string[] = [];

if (!os.isInstalled("fail2ban")) {
securityScore = securityScore - 15;
array.push(securityIssues, "fail2ban not installed");
}

if (!os.isInstalled("ufw")) {
securityScore = securityScore - 10;
array.push(securityIssues, "firewall not configured");
}

console.log(` 🛡️ Security Score: ${securityScore}/100`);
if (securityIssues.length > 0) {
console.log(` ⚠️ Issues found:`);
for (let issue: string in securityIssues) {
console.log(` - ${issue}`);
}
}

// Final health summary
let totalChecks: number = 5;
let healthPercentage: number = ((totalChecks * 100) - (alertsTriggered * 15)) / totalChecks;
if (healthPercentage < 0) {
healthPercentage = 0;
}

console.log("===============================================");
console.log(`📈 SYSTEM HEALTH SUMMARY`);
console.log(`===============================================`);
console.log(`🎯 Overall Health Score: ${healthPercentage}%`);
console.log(`⚠️ Total Alerts Triggered: ${alertsTriggered}`);
console.log(`🔍 Checks Performed: ${totalChecks}`);

// Status message based on health
let statusMessage: string = "Excellent - All systems healthy";
if (healthPercentage < 50) {
statusMessage = "Critical - Immediate attention required";
} else if (healthPercentage < 70) {
statusMessage = "Warning - Issues detected";
} else if (healthPercentage < 85) {
statusMessage = "Good - Minor issues";
}

console.log(`✅ Status: ${statusMessage}`);
console.log("===============================================");
console.log(`✨ This Utah script replaces ~400+ lines of complex bash!`);
console.log(`🔥 TypeScript-like syntax • Type safety • Built-in functions`);
console.log(`⚡ Parallel execution • Error handling • Advanced conditionals`);

Key Features Explained

Advanced Argument Parsing

Utah's args.* functions provide enterprise-grade command line argument handling:

args.define("--max-cpu", "", "CPU usage alert threshold percentage", "number", false, 85);
let maxCpuThreshold: number = args.get("--max-cpu");

This single line replaces dozens of lines of bash parameter parsing and validation.

Intelligent Log Analysis

The script demonstrates sophisticated log processing with pattern matching:

for (let entry: string in logEntries) {
if (entry.startsWith("ERROR:")) {
errorCount = errorCount + 1;
let errorMsg: string = entry.substring(7);

if (errorMsg.indexOf("Database") >= 0 || errorMsg.indexOf("Service") >= 0) {
console.log(` 🚨 CRITICAL: ${errorMsg}`);
}
}
}

Performance Trend Analysis

Historical data analysis with statistical calculations:

let cpuHistory: number[] = [45, 52, 48, 65, 71, 69, currentCpu];
let cpuSum: number = 0;
for (let cpu: number in cpuHistory) {
cpuSum = cpuSum + cpu;
}
let cpuAverage: number = cpuSum / cpuHistory.length;

Multi-Threshold Alerting

Intelligent alerting with escalation logic:

if (currentCpu > maxCpuThreshold || currentMemory > 85) {
let severity: string = "LOW";
if (currentCpu > 90 || currentMemory > 95) {
severity = "CRITICAL";
}
console.log(` 📊 Severity Level: ${severity}`);
}

Usage Examples

Basic Health Check

utah compile system-health-monitor.shx
./system-health-monitor.sh

With Custom Thresholds

./system-health-monitor.sh --max-cpu 75 --max-memory 80 --verbose

Complete Monitoring Setup

./system-health-monitor.sh \
--config /etc/custom-monitor.conf \
--output /var/log/health-report.json \
--alert-email admin@company.com \
--user monitoring_user \
--admin \
--verbose

Why This Matters

This single Utah script replaces what would be 400+ lines of complex bash code with:

  • Type Safety: All variables are strongly typed
  • Error Handling: Built-in try/catch and validation
  • Clean Syntax: TypeScript-like readability
  • Built-in Functions: No need for external utilities

Utah vs Traditional Bash

FeatureTraditional BashUtah Language
Argument Parsinggetopts manual parsingBuilt-in args.* functions
Error HandlingComplex trap/exit code logicAutomatic error management
JSON ProcessingRequires jq external toolNative object support
HTTP Requestscurl with manual parsingBuilt-in web.* functions
Text Processingawk/sed command chainsBuilt-in string functions
Type ValidationManual string checksStatic type checking
Array OperationsComplex bash array syntaxModern array methods
Process ManagementManual PID trackingBuilt-in system.* functions

The Result: Utah provides enterprise-grade DevOps automation with the simplicity of modern scripting languages.

  • Parallel Execution: Built-in concurrency support
  • Advanced Data Structures: Arrays, objects, and complex types

Compare with Bash

In traditional bash, you would need:

  • Complex parameter parsing with getopts or manual case statements
  • External tools like jq, curl, awk, sed for data processing
  • Manual error handling with set -e and trap functions
  • Verbose array manipulation with index tracking
  • External tools for parallel execution
  • Complex string manipulation with parameter expansion

Utah provides all of this functionality built-in with clean, maintainable syntax.