#!/bin/bash
# --- FUNGSI PINTAR UNTUK SUHU ---
get_cpu_temp() {
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
val=$(cat /sys/class/thermal/thermal_zone0/temp)
if [ "$val" -gt 1000 ]; then
echo $((val / 1000))
return
fi
fi
for file in /sys/class/hwmon/hwmon*/temp*_input; do
if [ -f "$file" ]; then
label_file="${file%_input}_label"
if [ -f "$label_file" ]; then
label=$(cat "$label_file")
if [[ "$label" =~ "Core" || "$label" =~ "Package" || "$label" =~ "Tctl" ]]; then
val=$(cat "$file")
echo $((val / 1000))
return
fi
fi
fi
done
# Metode 3: Fallback ke command 'sensors'
temp=$(sensors 2>/dev/null | grep -E "Package id 0|Core 0|Tctl" | head -1 | awk '{print $2}' | tr -d '+°C' | cut -d. -f1)
if [ -n "$temp" ]; then
echo "$temp"
else
echo "0"
fi
}
# --- EXECUTION ---
# 1. Ambil Suhu pakai fungsi di atas
cpu_temp=$(get_cpu_temp)
# 2. CPU Usage (Top method)
cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print 100 - $8}' | cut -d. -f1)
# 3. RAM (Read once)
# Output free: total used free ...
read -r mem_total_str mem_used_str <<< $(free -h | awk '/^Mem/ {print $2, $3}' | sed 's/i//g')
# Hitung persen pakai integer murni
read -r mem_total_int mem_used_int <<< $(free | awk '/^Mem/ {print $2, $3}')
if [ "$mem_total_int" -gt 0 ]; then
mem_perc=$(( 100 * mem_used_int / mem_total_int ))
else
mem_perc=0
fi
# 4. DISK (Read once)
read -r disk_total disk_used disk_perc <<< $(df -h / | awk 'NR==2 {print $2, $3, $5}' | tr -d '%')
# --- OUTPUT JSON FINAL ---
echo "{
\"cpu_usage\": \"$cpu_usage\",
\"cpu_temp\": \"$cpu_temp\",
\"mem_used\": \"$mem_used_str\",
\"mem_total\": \"$mem_total_str\",
\"mem_perc\": \"$mem_perc\",
\"disk_used\": \"$disk_used\",
\"disk_total\": \"$disk_total\",
\"disk_perc\": \"$disk_perc\"
}"