mirror of
https://github.com/AlexMacocian/ServerManagementUtils.git
synced 2026-07-15 15:19:58 +00:00
198 lines
4.3 KiB
Bash
198 lines
4.3 KiB
Bash
#!/bin/bash
|
|
|
|
# OS Detection and Path Configuration
|
|
# This script provides OS-specific paths and configurations
|
|
|
|
# Detect OS
|
|
DetectOS() {
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
echo "macos"
|
|
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
echo "linux"
|
|
else
|
|
echo "unknown"
|
|
fi
|
|
}
|
|
|
|
# Get config directory for Filebeat
|
|
GetFilebeatConfigDir() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
echo "/usr/local/etc/filebeat"
|
|
;;
|
|
linux)
|
|
echo "/etc/filebeat"
|
|
;;
|
|
*)
|
|
echo "/etc/filebeat"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get config directory for Metricbeat
|
|
GetMetricbeatConfigDir() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
echo "/usr/local/etc/metricbeat"
|
|
;;
|
|
linux)
|
|
echo "/etc/metricbeat"
|
|
;;
|
|
*)
|
|
echo "/etc/metricbeat"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get config directory for Logstash
|
|
GetLogstashConfigDir() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# Homebrew installation path
|
|
echo "/usr/local/etc/logstash"
|
|
;;
|
|
linux)
|
|
echo "/etc/logstash"
|
|
;;
|
|
*)
|
|
echo "/etc/logstash"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get logrotate/newsyslog config directory
|
|
GetLogRotateConfigDir() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# macOS uses newsyslog instead of logrotate
|
|
echo "/usr/local/etc/newsyslog.d"
|
|
;;
|
|
linux)
|
|
echo "/etc/logrotate.d"
|
|
;;
|
|
*)
|
|
echo "/etc/logrotate.d"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check if logrotate is available
|
|
IsLogRotateAvailable() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# macOS uses newsyslog
|
|
command -v newsyslog &> /dev/null
|
|
;;
|
|
linux)
|
|
command -v logrotate &> /dev/null
|
|
;;
|
|
*)
|
|
command -v logrotate &> /dev/null
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get log rotation command
|
|
GetLogRotateCommand() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
echo "newsyslog"
|
|
;;
|
|
linux)
|
|
echo "logrotate"
|
|
;;
|
|
*)
|
|
echo "logrotate"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check if thermal monitoring is supported
|
|
IsThermalMonitoringSupported() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# Check if osx-cpu-temp or powermetrics is available
|
|
# Check both PATH and common install locations
|
|
command -v osx-cpu-temp &> /dev/null || [[ -x /usr/local/bin/osx-cpu-temp ]] || [[ -x /usr/bin/powermetrics ]]
|
|
;;
|
|
linux)
|
|
# Check if thermal zones exist
|
|
[[ -e /sys/class/thermal/thermal_zone0/type ]]
|
|
;;
|
|
*)
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check if power monitoring is supported
|
|
IsPowerMonitoringSupported() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# powermetrics requires sudo and is available on all recent macOS versions
|
|
[[ -x /usr/bin/powermetrics ]]
|
|
;;
|
|
linux)
|
|
# Check if Intel RAPL is available
|
|
[[ -r /sys/class/powercap/intel-rapl:0/energy_uj ]]
|
|
;;
|
|
*)
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get OS-specific df flags for disk usage
|
|
GetDfFlags() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
# macOS df doesn't support --output flag
|
|
echo ""
|
|
;;
|
|
linux)
|
|
echo "--output=target,used,size -B1"
|
|
;;
|
|
*)
|
|
echo ""
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get service management command (systemctl vs launchctl)
|
|
GetServiceCommand() {
|
|
local os=$(DetectOS)
|
|
case "$os" in
|
|
macos)
|
|
echo "brew services"
|
|
;;
|
|
linux)
|
|
echo "systemctl"
|
|
;;
|
|
*)
|
|
echo "systemctl"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Export functions for sourcing
|
|
export -f DetectOS
|
|
export -f GetFilebeatConfigDir
|
|
export -f GetMetricbeatConfigDir
|
|
export -f GetLogstashConfigDir
|
|
export -f GetLogRotateConfigDir
|
|
export -f IsLogRotateAvailable
|
|
export -f GetLogRotateCommand
|
|
export -f IsThermalMonitoringSupported
|
|
export -f IsPowerMonitoringSupported
|
|
export -f GetDfFlags
|
|
export -f GetServiceCommand
|