e1.2.0 Heartbeat feature added.
This commit is contained in:
80
cmd/heartbeat/main.go
Normal file
80
cmd/heartbeat/main.go
Normal file
@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/LixenWraith/log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create test log directory if it doesn't exist
|
||||
if err := os.MkdirAll("./logs", 0755); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Failed to create test logs directory: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Test cycle: disable -> PROC -> PROC+DISK -> PROC+DISK+SYS -> PROC+DISK -> PROC -> disable
|
||||
levels := []struct {
|
||||
level int64
|
||||
description string
|
||||
}{
|
||||
{0, "Heartbeats disabled"},
|
||||
{1, "PROC heartbeats only"},
|
||||
{2, "PROC+DISK heartbeats"},
|
||||
{3, "PROC+DISK+SYS heartbeats"},
|
||||
{2, "PROC+DISK heartbeats (reducing from 3)"},
|
||||
{1, "PROC heartbeats only (reducing from 2)"},
|
||||
{0, "Heartbeats disabled (final)"},
|
||||
}
|
||||
|
||||
// Create a single logger instance that we'll reconfigure
|
||||
logger := log.NewLogger()
|
||||
|
||||
for _, levelConfig := range levels {
|
||||
// Set up configuration overrides
|
||||
overrides := []string{
|
||||
"directory=./logs",
|
||||
"level=-4", // Debug level to see everything
|
||||
"format=txt", // Use text format for easier reading
|
||||
"heartbeat_interval_s=5", // Short interval for testing
|
||||
fmt.Sprintf("heartbeat_level=%d", levelConfig.level),
|
||||
}
|
||||
|
||||
// Initialize logger with the new configuration
|
||||
// Note: InitWithDefaults handles reconfiguration of an existing logger
|
||||
if err := logger.InitWithDefaults(overrides...); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Failed to initialize logger: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Log the current test state
|
||||
fmt.Printf("\n--- Testing heartbeat level %d: %s ---\n", levelConfig.level, levelConfig.description)
|
||||
logger.Info("Heartbeat test started", "level", levelConfig.level, "description", levelConfig.description)
|
||||
|
||||
// Generate some logs to trigger heartbeat counters
|
||||
for j := 0; j < 10; j++ {
|
||||
logger.Debug("Debug test log", "iteration", j, "level_test", levelConfig.level)
|
||||
logger.Info("Info test log", "iteration", j, "level_test", levelConfig.level)
|
||||
logger.Warn("Warning test log", "iteration", j, "level_test", levelConfig.level)
|
||||
logger.Error("Error test log", "iteration", j, "level_test", levelConfig.level)
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
|
||||
// Wait for heartbeats to generate (slightly longer than the interval)
|
||||
waitTime := 6 * time.Second
|
||||
fmt.Printf("Waiting %v for heartbeats to generate...\n", waitTime)
|
||||
time.Sleep(waitTime)
|
||||
|
||||
logger.Info("Heartbeat test completed for level", "level", levelConfig.level)
|
||||
}
|
||||
|
||||
// Final shutdown
|
||||
if err := logger.Shutdown(2 * time.Second); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Warning: Failed to shut down logger: %v\n", err)
|
||||
}
|
||||
|
||||
fmt.Println("\nHeartbeat test program completed successfully")
|
||||
fmt.Println("Check logs directory for generated log files")
|
||||
}
|
||||
@ -18,7 +18,7 @@ var tomlContent = `
|
||||
# Example simple_config.toml
|
||||
[logging]
|
||||
level = -4 # Debug
|
||||
directory = "./simple_logs"
|
||||
directory = "./logs"
|
||||
format = "txt"
|
||||
extension = "log"
|
||||
show_timestamp = true
|
||||
@ -113,5 +113,5 @@ func main() {
|
||||
|
||||
// NO time.Sleep needed here - log.Shutdown waits.
|
||||
fmt.Println("--- Example Finished ---")
|
||||
fmt.Printf("Check log files in './simple_logs' and the saved config '%s'.\n", configFile)
|
||||
fmt.Printf("Check log files in './logs' and the saved config '%s'.\n", configFile)
|
||||
}
|
||||
@ -31,7 +31,7 @@ var tomlContent = `
|
||||
[logstress]
|
||||
level = -4 # Debug
|
||||
name = "stress_test"
|
||||
directory = "./stress_logs" # Log package will create this
|
||||
directory = "./logs" # Log package will create this
|
||||
format = "txt"
|
||||
extension = "log"
|
||||
show_timestamp = true
|
||||
@ -115,8 +115,8 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("Created dummy config file: %s\n", configFile)
|
||||
logsDir := "./stress_logs" // Match config
|
||||
_ = os.RemoveAll(logsDir) // Clean previous run's LOGS directory before starting
|
||||
logsDir := "./logs" // Match config
|
||||
_ = os.RemoveAll(logsDir) // Clean previous run's LOGS directory before starting
|
||||
// defer os.Remove(configFile) // Remove to keep the saved config file
|
||||
// defer os.RemoveAll(logsDir) // Remove to keep the log directory
|
||||
|
||||
|
||||
Reference in New Issue
Block a user