Hello Octave,

Backticks can be fun. :-)

Since my "Desktop Environment" is basically gnu/screen and I do like to
keep an eye on the system's health, I wrote backticks that do pretty
much everything apart from making the coffee.

Since you indirectly raised the issue of contributing, you may want to
try to sell the idea of a "contrib" or "extras" directory in the screen
source tree, that might among other things include backticks for all
seasons.

Maybe s/o or other will flame you for "bloating" not the screen source
itself, but screen's source tree & packaging .. ;-)

But in our times where plugins everywhere, this might be the right
approach - and believe me, if I could readily have found samples of
backticks when I wrote mine, it would have saved me quite a bit of trial
and error.

I'm attaching some working backticks that may be of interest as well as
the relevant part of my ~/.screenrc.

For an idea of what it looks like, You can take a peek at:

http://www.geocities.com/fcky1000/fckz/diff.png

.. or some of the other screenshots in the same ../fckz directory.

Cheers,

CJ

#!/bin/sh
#-------------------------------------------------------------------------------
# ~/bin/weather :   grab current temperature from local weather station
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   1. Fiddle awk variables or add converter for Celsius only
#               :   2. Change STATION's KISP to whatever for your local station
#               :   3. Delay between updates is 20 minutes by default
#-------------------------------------------------------------------------------
station='http://weather.noaa.gov/weather/current/KISP.html'
delay=1200
cpink="\033p\033[38;5;162m"
cdflt="\033[0m\033"

temp=$(curl -s $station | grep 'F (' | head -n 1 | awk '{print $3}')

echo -e $cpink $temp $cdflt

exit 0
#!/usr/bin/gawk -f
#-------------------------------------------------------------------------------
# ~/bin/cpustat :   display cpu utilization
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   1. Works on the assumption that /proc/stat's first line  
#               :      has the total "jiffies" since boot up used by the
#               :      different types of tasks in the system. See the 
#               :      filesystems/proc.txt document in kernel source tree
#               :
#               :   2. Displays a total CPU% (user+system+nice) as well as
#               :      user CPU% system CPU% and nice CPU%
#-------------------------------------------------------------------------------
BEGIN {
  file = "/proc/stat"
  while (getline < file) {                        # read first line 
                                                  # extract jiffies:
      user=$2-user_saved;                         # . user     
      nice=$3-nice_saved;                         # . nice user
      syst=$4-syst_saved;                         # . system   
      idle=$5-idle_saved;                         # . idle     
      wait=$6-wait_saved;                         # . iowait   
      irqs=$7-irqs_saved;                         # . irq      
      sirq=$8-sirq_saved;                         # . softirq  

      cact=user+syst+nice;                        # what counts
      ctot=user+nice+syst+idle+wait+irqs+sirq;    # total activity

      tcpu=cact/ctot*100;                         # total  % cpu utilization
      ucpu=user/ctot*100;                         # user   % cpu utilization
      scpu=syst/ctot*100;                         # system % cpu utilization
      ncpu=nice/ctot*100;                         # nice   % cpu utilization

      printf "%3.1f%% %3.1f%% %3.1f%% %3.1f%%\n",tcpu,ucpu,scpu,ncpu


      user_saved=$2;                              # save the current jiffies 
      nice_saved=$3;                              # values for the next loop
      syst_saved=$4; 
      idle_saved=$5;
      wait_saved=$6;
      irqs_saved=$7;
      sirq_saved=$8;

      close(file)                                 # re-read file 

      system("sleep 3")
    }
}
#!/usr/bin/gawk -f
#-----------------------------------------------------------------------------
# ~/bin/memswap :   display percentage of ram & sawp currently in use
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   1. % ram used  = ((total ram  - used) / total ram)  * 100
#               :   2. % swap used = ((total swap - used) / total swap) * 100   
#-----------------------------------------------------------------------------
BEGIN {
  while (getline < "/proc/meminfo") {
    if ($1=="MemTotal:")    {mt = $2};      # mt = total ram on system
    if ($1=="MemFree:")     {mf = $2};      # mf = free ram
    if ($1=="Buffers:")     {mb = $2};      # mb = ram used for buffers
    if ($1=="Cached:")      {mc = $2};      # mc = ram used for cache
    if ($1=="SwapTotal:")   {st = $2};      # st = total swap
    if ($1=="SwapFree:")    {sf = $2};      # sf = free swap
  }
  exit;
}
END {
  pmu = (mt-(mf+mb+mc)) * 100 / mt;         # pmu = % of ram  used
  psu = ((st-sf) * 100 / st);               # psu = % of swap used
  printf ("%2.1f%s %2.1f%s\n"), pmu,"%", psu,"%";
}
#!/bin/sh
#-------------------------------------------------------------------------------
# ~/bin/ntstat  :   display eth0 up/down activity in kilobytes 
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   1. default delay is one second - adjust $delay variable
#               :   2. netstat gives TX/RX counts -> awk prints the delta
#               :   3. the script exits if the write fails so that the script
#               :      ends when screen terminates
#-------------------------------------------------------------------------------
interface=eth0
delay=1

get_data()
{
  netstat -ni | awk '/^'"$interface"'/{print$4,$8}'
}

init_data()
{
  netdata=$(get_data)
  prevrxcnt=$(echo $netdata | awk '{print$1}')
  prevtxcnt=$(echo $netdata | awk '{print$2}')
}

save_data()
{
  netdata=$(get_data)
  rxcnt=$(echo $netdata | awk '{print$1}')
  txcnt=$(echo $netdata | awk '{print$2}')
  diffrxcnt=$(($rxcnt - $prevrxcnt))
  difftxcnt=$(($txcnt - $prevtxcnt))
  prevrxcnt=$rxcnt
  prevtxcnt=$txcnt
}

init_data
while sleep $delay; 
do
  save_data
  echo $diffrxcnt $difftxcnt |                      # pipe data to an awk print
  awk '{printf "%4.1fk/s %4.1fk/s\n",$1*576/1024,$2*567/1024}' || exit 1  
done

exit 0
#!/bin/bash
#-------------------------------------------------------------------------------
# ~/bin/systemp :   display current system temperature as reported by acpi
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   
#-------------------------------------------------------------------------------
awk '{ printf "%sC", $2 }' /proc/acpi/thermal_zone/THRM/temperature

#!/bin/sh
#-------------------------------------------------------------------------------
# ~/bin/weather :   grab current temperature from local weather station
#
# usage         :   normally used as a GNU/screen backtick
#
# notes         :   1. Fiddle awk variables or add converter for Celsius only
#               :   2. Change STATION's KISP to whatever for your local station
#               :   3. Delay between updates is 20 minutes by default
#-------------------------------------------------------------------------------
station='http://weather.noaa.gov/weather/current/KISP.html'
delay=1200

while :
do
   curl -s $station | grep 'F (' | head -n 1 | awk '{print $3  $4}' || exit 1
   sleep $delay
done

exit 0
#===================================================================================================
# Hardstatus line - temperature, cpu, ram, swap, network, loadavg + session & 
date/time & weather
#===================================================================================================
backtick 0 60 60 /home/gavron/bin/bt-systemp    # system temperature
backtick 1 0  0  /home/gavron/bin/bt-cpustat    # cpu utilization
backtick 2 60 60 /home/gavron/bin/bt-memswap    # ram & swap utilization
backtick 3 0  0  /home/gavron/bin/bt-netstat    # eth0 up/down traffic in Kbytes
backtick 4 0  0  /home/gavron/bin/bt-weather    # local outside temperature
caption always "%{+d wk} "                      # naughty hack! - adds 
separator .. wastes one line
#hardstatus alwayslastline "%{+r wk}%H%{+b wk} | %0` | %1` | %2` | %3` %{+b 
wk}| %{+b wk}%l%{+b wk} |%{+b mk} %n %t %{+b wk}| %{+b wk}%W %=|%{+b wk} %4` | 
%D %m/%d/%y %c:%s"
hardstatus alwayslastline "%{+b kw}%H%{+b kw} | %0` | %1` | %2` | %3` | %l 
|%{-b km} %n %t %{+b kw}| %W %=| %4` | %D %m/%d/%y %c:%s"

Reply via email to