147 lines
3.8 KiB
Plaintext
147 lines
3.8 KiB
Plaintext
|
|
#!/usr/bin/env nu
|
||
|
|
|
||
|
|
# Start KMS Service
|
||
|
|
# Manages the KMS service lifecycle
|
||
|
|
|
||
|
|
def main [
|
||
|
|
--background # Run in background
|
||
|
|
--check # Check if service is running
|
||
|
|
--stop # Stop the service
|
||
|
|
--restart # Restart the service
|
||
|
|
--logs # Show logs
|
||
|
|
] {
|
||
|
|
let service_name = "kms-service"
|
||
|
|
let pid_file = "./data/kms-service.pid"
|
||
|
|
let log_file = "./data/kms-service.log"
|
||
|
|
|
||
|
|
if $check {
|
||
|
|
check_service $pid_file
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if $stop {
|
||
|
|
stop_service $pid_file $service_name
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if $restart {
|
||
|
|
stop_service $pid_file $service_name
|
||
|
|
sleep 2sec
|
||
|
|
start_service $background $pid_file $log_file
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if $logs {
|
||
|
|
if ($log_file | path exists) {
|
||
|
|
tail -f $log_file
|
||
|
|
} else {
|
||
|
|
print "No logs found"
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
start_service $background $pid_file $log_file
|
||
|
|
}
|
||
|
|
|
||
|
|
def start_service [background: bool, pid_file: string, log_file: string] {
|
||
|
|
# Check if already running
|
||
|
|
if ($pid_file | path exists) {
|
||
|
|
let pid = open $pid_file | str trim | into int
|
||
|
|
if (ps | where pid == $pid | length) > 0 {
|
||
|
|
print $"✗ KMS service is already running \(PID: ($pid)\)"
|
||
|
|
return
|
||
|
|
} else {
|
||
|
|
rm $pid_file
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Ensure data directory exists
|
||
|
|
mkdir data
|
||
|
|
|
||
|
|
# Build if needed
|
||
|
|
if not ("./target/release/kms-service" | path exists) {
|
||
|
|
print "Building KMS service..."
|
||
|
|
cargo build --release
|
||
|
|
}
|
||
|
|
|
||
|
|
# Load configuration
|
||
|
|
let config_path = $env.KMS_CONFIG_PATH? | default "../../config/kms.toml"
|
||
|
|
|
||
|
|
if not ($config_path | path exists) {
|
||
|
|
print $"✗ Configuration file not found: ($config_path)"
|
||
|
|
print " Create it from the example: cp ../../config/kms.toml.example ../../config/kms.toml"
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
print "Starting KMS service..."
|
||
|
|
|
||
|
|
if $background {
|
||
|
|
# Start in background
|
||
|
|
let process = bash -c $"./target/release/kms-service > ($log_file) 2>&1 & echo $!"
|
||
|
|
let pid = $process | str trim | into int
|
||
|
|
$pid | save $pid_file
|
||
|
|
|
||
|
|
sleep 2sec
|
||
|
|
|
||
|
|
# Check if started successfully
|
||
|
|
if (ps | where pid == $pid | length) > 0 {
|
||
|
|
print $"✓ KMS service started in background \(PID: ($pid)\)"
|
||
|
|
print $" Logs: ($log_file)"
|
||
|
|
print " Check status: ./scripts/start-kms.nu --check"
|
||
|
|
} else {
|
||
|
|
print "✗ KMS service failed to start"
|
||
|
|
print " Check logs: cat ($log_file)"
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
# Run in foreground
|
||
|
|
./target/release/kms-service
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
def stop_service [pid_file: string, service_name: string] {
|
||
|
|
if not ($pid_file | path exists) {
|
||
|
|
print "✗ KMS service is not running"
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
let pid = open $pid_file | str trim | into int
|
||
|
|
print $"Stopping KMS service \(PID: ($pid)\)..."
|
||
|
|
|
||
|
|
kill $pid
|
||
|
|
|
||
|
|
sleep 1sec
|
||
|
|
|
||
|
|
if (ps | where pid == $pid | length) > 0 {
|
||
|
|
print "Force killing..."
|
||
|
|
kill -9 $pid
|
||
|
|
}
|
||
|
|
|
||
|
|
rm $pid_file
|
||
|
|
print "✓ KMS service stopped"
|
||
|
|
}
|
||
|
|
|
||
|
|
def check_service [pid_file: string] {
|
||
|
|
if not ($pid_file | path exists) {
|
||
|
|
print "✗ KMS service is not running"
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
let pid = open $pid_file | str trim | into int
|
||
|
|
|
||
|
|
if (ps | where pid == $pid | length) > 0 {
|
||
|
|
print $"✓ KMS service is running \(PID: ($pid)\)"
|
||
|
|
|
||
|
|
# Check health endpoint
|
||
|
|
try {
|
||
|
|
let health = http get "http://localhost:8081/api/v1/kms/health" | from json
|
||
|
|
print $" Status: ($health.status)"
|
||
|
|
print $" Backend: ($health.backend)"
|
||
|
|
} catch {
|
||
|
|
print " ⚠ Health check failed - service may be starting"
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
print $"✗ KMS service is not running \(stale PID file: ($pid)\)"
|
||
|
|
rm $pid_file
|
||
|
|
}
|
||
|
|
}
|