Created
July 4, 2023 09:39
-
-
Save cannorin/36e8b3f783ed1fd8b56863c7ced8d00f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# This code is licensed under CC0. | |
# http://creativecommons.org/publicdomain/zero/1.0/deed.en | |
# Requirements: | |
# - sysstat (mpstat) | |
# - bc | |
# - curl | |
# - collectd | |
# - imagemagick | |
# - jq | |
MASTODON_URL=https://yourdomain.com | |
MASTODON_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
RRD_DIR=/var/lib/collectd/rrd/yourdomain.com | |
TEMP_DIR=/tmp/mastodon-system-bot | |
mkdir -p $TEMP_DIR | |
CPU_CORES=$(grep -c '^processor' /proc/cpuinfo) | |
CPU_IDLE_PERCENT=$(LANG=C mpstat 1 1 | grep Average | awk '{print $NF}') | |
CPU_PERCENT=$(echo "100 - $CPU_IDLE_PERCENT" | bc) | |
RAM_VALUE=$(free -m | grep Mem | awk '{print $3}')MB | |
RAM_PERCENT=$(free | grep Mem | awk '{print $3/$2 * 100.0}') | |
TEXT=$(cat << END | |
CPU: ${CPU_PERCENT}% | |
RAM: ${RAM_VALUE} (${RAM_PERCENT}%) | |
END | |
) | |
# render the system metrics to <working-dir>/monitor.png | |
function generateGraphs() { | |
rrdtool graph $TEMP_DIR/memory.png --start=-3600 --end=-0 \ | |
DEF:memory=$RRD_DIR/memory/memory-used.rrd:value:AVERAGE \ | |
LINE:memory#FF0000:Memory | |
CPU_QUERY="" | |
COLOR_STEP=$((255 / $CPU_CORES)) | |
for ((i=0; i < $CPU_CORES; i++)); do | |
CPU_QUERY="$CPU_QUERY DEF:cpu${i}usr=${RRD_DIR}/cpu-${i}/cpu-user.rrd:value:AVERAGE" | |
CPU_QUERY="$CPU_QUERY DEF:cpu${i}sys=${RRD_DIR}/cpu-${i}/cpu-system.rrd:value:AVERAGE" | |
CPU_QUERY="$CPU_QUERY CDEF:cpu${i}sum=cpu${i}usr,cpu${i}sys,+" | |
CPU_QUERY="$CPU_QUERY VDEF:cpu${i}=cpu${i}sum,AVERAGE" | |
COLOR_TMP=$(($COLOR_STEP * $i)) | |
COLOR=$(printf "%02X" $COLOR_TMP) | |
CPU_QUERY="$CPU_QUERY LINE:cpu${i}#00${COLOR}FF:CPU${i}" | |
done | |
rrdtool graph $TEMP_DIR/cpu.png --start=-3600 --end=-0 $CPU_QUERY | |
rrdtool graph $TEMP_DIR/packets.png --start=-3600 --end=-0 \ | |
DEF:rx=$RRD_DIR/interface-eth0/if_packets.rrd:rx:AVERAGE \ | |
LINE:rx#00FF00:rx_packets \ | |
DEF:tx=$RRD_DIR/interface-eth0/if_packets.rrd:tx:AVERAGE \ | |
LINE:tx#FF0000:tx_packets | |
convert $TEMP_DIR/memory.png $TEMP_DIR/cpu.png $TEMP_DIR/packets.png -append monitor.png | |
rm $TEMP_DIR/*.png | |
} | |
generateGraphs | |
ID=$(curl $MASTODON_URL/api/v2/media \ | |
-H "Authorization: Bearer $MASTODON_TOKEN" \ | |
-H "Content-Type: multipart/form-data" \ | |
-F file=@monitor.png | jq '.id') | |
curl $MASTODON_URL/api/v1/statuses \ | |
-H "Authorization: Bearer $MASTODON_TOKEN" \ | |
-F "visibility=unlisted" \ | |
-F "status=$TEXT" \ | |
-F "media_ids[]=$ID" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment