From 74b9523476ff27bbcac2aa60d6010249db9f92fc Mon Sep 17 00:00:00 2001 From: Joe Groocock Date: Thu, 22 Feb 2018 13:03:01 +0000 Subject: [PATCH] Use persistent CPU usage block --- .config/i3/blocks/config | 2 +- .config/i3/blocks/cpu_usage | 72 +++++++++++++------------------------ 2 files changed, 26 insertions(+), 48 deletions(-) diff --git a/.config/i3/blocks/config b/.config/i3/blocks/config index 0487ca5..5b764ee 100644 --- a/.config/i3/blocks/config +++ b/.config/i3/blocks/config @@ -62,7 +62,7 @@ signal=5 [cpu_usage] label= -interval=2 +interval=persist [separator] diff --git a/.config/i3/blocks/cpu_usage b/.config/i3/blocks/cpu_usage index c0d659a..1703296 100755 --- a/.config/i3/blocks/cpu_usage +++ b/.config/i3/blocks/cpu_usage @@ -1,53 +1,31 @@ -#!/usr/bin/perl -# -# Copyright 2014 Pierre Mavro -# Copyright 2014 Vivien Didelot -# Copyright 2014 Andreas Guldstrand -# -# Licensed under the terms of the GNU GPL v3, or any later version. +#!/bin/bash +# by Paul Colby (http://colby.id.au), no rights reserved ;) +# https://github.com/Leo-G/DevopsWiki/wiki/How-Linux-CPU-Usage-Time-and-Percentage-is-calculated -use strict; -use warnings; -use utf8; -use Getopt::Long; +PREV_TOTAL=0 +PREV_IDLE=0 -# default values -my $t_warn = 50; -my $t_crit = 80; -my $cpu_usage = -1; +while true; do + # Get the total CPU statistics, discarding the 'cpu ' prefix. + CPU=(`sed -n 's/^cpu\s//p' /proc/stat`) + IDLE=${CPU[3]} # Just the idle CPU time. -sub help { - print "Usage: cpu_usage [-w ] [-c ]\n"; - print "-w : warning threshold to become yellow\n"; - print "-c : critical threshold to become red\n"; - exit 0; -} + # Calculate the total CPU time. + TOTAL=0 + for VALUE in "${CPU[@]}"; do + let "TOTAL=$TOTAL+$VALUE" + done -GetOptions("help|h" => \&help, - "w=i" => \$t_warn, - "c=i" => \$t_crit); + # Calculate the CPU usage since we last checked. + let "DIFF_IDLE=$IDLE-$PREV_IDLE" + let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL" + let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10" + echo -e "$DIFF_USAGE%\n$DIFF_USAGE%" -# Get CPU usage -$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is -open (MPSTAT, 'mpstat 1 1 |') or die 'Cannot run mpstat'; -while () { - if (/^.*\s+(\d+\.\d+)\s+$/) { - $cpu_usage = 100 - $1; # 100% - %idle - last; - } -} -close(MPSTAT); + # Remember the total and idle CPU times for the next check. + PREV_TOTAL="$TOTAL" + PREV_IDLE="$IDLE" -#$cpu_usage eq -1 and die 'Can\'t find CPU information'; - -# Print short_text, full_text -printf "%.0f%%\n"x2, $cpu_usage; - -# Print color, if needed -if ($cpu_usage >= $t_crit) { - print "#FF0000\n"; -} elsif ($cpu_usage >= $t_warn) { - print "#FFCB00\n"; -} - -exit 0; + # Wait before checking again. + sleep 1 +done