Krolyxon
Commit 0272e00

Branches

Refs →

aurora.configwaybarscriptscatloop.sh

72 lines · 1.3 KB · Bourne Again Shell (bash)

1#!/usr/bin/env bash
2set -euo pipefail
3
4CPU_USAGE=0.0
5SLEEP_AFTER=4
6
7AWAKE_FRAMES=($(eval echo {A..E}))
8SLEEP_FRAMES=($(eval echo {G..N}))
9
10COUNT=0
11
12read_cpu() {
13 awk '/^cpu /{
14 user=$2; nice=$3; sys=$4; idle=$5;
15 active = user + nice + sys;
16 total = active + idle;
17 printf "%d %d\n", active, total;
18 exit
19 }' /proc/stat
20}
21
22read prev_active prev_total < <(read_cpu)
23
24while true; do
25
26 read active total < <(read_cpu)
27
28 delta_active=$((active - prev_active))
29 delta_total=$((total - prev_total))
30
31 if [ "$delta_total" -le 0 ] || [ "$delta_active" -lt 0 ]; then
32 utilization="0.0000"
33 else
34 utilization=$(awk -v a="$delta_active" -v t="$delta_total" 'BEGIN { printf "%.4f", (a / t) }')
35 fi
36
37 CPU_USAGE=$utilization
38
39 SPEED=$(awk -v u="$CPU_USAGE" 'BEGIN { printf "%.2f", 1 / (4 + (u * 100)) }')
40 # clip minimum speed
41 if (( $(echo "$SPEED < 0.03" | bc -l) )); then
42 SPEED=0.03
43 fi
44
45 ### MAKE THE CAT SLEEP IF CPU USAGE IS LOW after SLEEP_AFTER ###
46 if (( $(echo "$CPU_USAGE < 0.02" | bc -l) )); then
47 COUNT=$((COUNT + 1))
48 else
49 COUNT=0
50 fi
51
52 ### CAT IS SLEEPING ###
53 if [ $COUNT -ge $SLEEP_AFTER ]; then
54 for s in "${SLEEP_FRAMES[@]}";do
55 echo $s
56 sleep $SPEED
57 done
58
59 ### CAT IS AWAKE ###
60 else
61 for i in "${AWAKE_FRAMES[@]}";do
62 echo $i
63 sleep $SPEED
64 done
65
66 fi
67
68 prev_active=$active
69 prev_total=$total
70done
71
72# vim: set ts=2 sw=2