parent
06a45c6c68
commit
334633b16f
10 changed files with 288 additions and 18 deletions
@ -0,0 +1,107 @@ |
||||
#!/bin/bash |
||||
# Copyright (C) 2012 Stefan Breunig <stefan+measure-net-speed@mathphys.fsk.uni-heidelberg.de> |
||||
# Copyright (C) 2014 kaueraal |
||||
# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br> |
||||
|
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
|
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
|
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
# Get custom IN and OUT labels if provided by command line arguments |
||||
while [[ $# -gt 1 ]]; do |
||||
key="$1" |
||||
case "$key" in |
||||
-i|--inlabel) |
||||
INLABEL="$2" |
||||
shift;; |
||||
-o|--outlabel) |
||||
OUTLABEL="$2" |
||||
shift;; |
||||
esac |
||||
shift |
||||
done |
||||
|
||||
[[ -z $INLABEL ]] && INLABEL="IN " |
||||
[[ -z $OUTLABEL ]] && OUTLABEL="OUT " |
||||
|
||||
# Use the provided interface, otherwise the device used for the default route. |
||||
if [[ -z $INTERFACE ]] && [[ -n $BLOCK_INSTANCE ]]; then |
||||
INTERFACE=$BLOCK_INSTANCE |
||||
elif [[ -z $INTERFACE ]]; then |
||||
INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }') |
||||
fi |
||||
|
||||
# Issue #36 compliant. |
||||
if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || ! [ "`cat /sys/class/net/${INTERFACE}/operstate`" = "up" ] |
||||
then |
||||
echo "$INTERFACE down" |
||||
echo "$INTERFACE down" |
||||
echo "#FF0000" |
||||
exit 0 |
||||
fi |
||||
|
||||
# path to store the old results in |
||||
path="/dev/shm/$(basename $0)-${INTERFACE}" |
||||
|
||||
# grabbing data for each adapter. |
||||
read rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes" |
||||
read tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes" |
||||
|
||||
# get time |
||||
time=$(date +%s) |
||||
|
||||
# write current data if file does not exist. Do not exit, this will cause |
||||
# problems if this file is sourced instead of executed as another process. |
||||
if ! [[ -f "${path}" ]]; then |
||||
echo "${time} ${rx} ${tx}" > "${path}" |
||||
chmod 0666 "${path}" |
||||
fi |
||||
|
||||
# read previous state and update data storage |
||||
read old < "${path}" |
||||
echo "${time} ${rx} ${tx}" > "${path}" |
||||
|
||||
# parse old data and calc time passed |
||||
old=(${old//;/ }) |
||||
time_diff=$(( $time - ${old[0]} )) |
||||
|
||||
# sanity check: has a positive amount of time passed |
||||
[[ "${time_diff}" -gt 0 ]] || exit |
||||
|
||||
# calc bytes transferred, and their rate in byte/s |
||||
rx_diff=$(( $rx - ${old[1]} )) |
||||
tx_diff=$(( $tx - ${old[2]} )) |
||||
rx_rate=$(( $rx_diff / $time_diff )) |
||||
tx_rate=$(( $tx_diff / $time_diff )) |
||||
|
||||
# shift by 10 bytes to get KiB/s. If the value is larger than |
||||
# 1024^2 = 1048576, then display MiB/s instead |
||||
|
||||
# incoming |
||||
echo -n "$INLABEL" |
||||
rx_kib=$(( $rx_rate >> 10 )) |
||||
if hash bc 2>/dev/null && [[ "$rx_rate" -gt 1048576 ]]; then |
||||
printf '%sM' "`echo "scale=1; $rx_kib / 1024" | bc`" |
||||
else |
||||
echo -n "${rx_kib}K" |
||||
fi |
||||
|
||||
echo -n " " |
||||
|
||||
# outgoing |
||||
echo -n "$OUTLABEL" |
||||
tx_kib=$(( $tx_rate >> 10 )) |
||||
if hash bc 2>/dev/null && [[ "$tx_rate" -gt 1048576 ]]; then |
||||
printf '%sM' "`echo "scale=1; $tx_kib / 1024" | bc`" |
||||
else |
||||
echo -n "${tx_kib}K" |
||||
fi |
@ -0,0 +1,60 @@ |
||||
#!/usr/bin/perl |
||||
# |
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr> |
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org> |
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com> |
||||
# |
||||
# Licensed under the terms of the GNU GPL v3, or any later version. |
||||
|
||||
use strict; |
||||
use warnings; |
||||
use utf8; |
||||
use Getopt::Long; |
||||
|
||||
# default values |
||||
my $t_warn = $ENV{T_WARN} || 50; |
||||
my $t_crit = $ENV{T_CRIT} || 80; |
||||
my $cpu_usage = -1; |
||||
my $decimals = $ENV{DECIMALS} || 2; |
||||
my $label = $ENV{label} || ""; |
||||
|
||||
sub help { |
||||
print "Usage: cpu_usage [-w <warning>] [-c <critical>] [-d <decimals>]\n"; |
||||
print "-w <percent>: warning threshold to become yellow\n"; |
||||
print "-c <percent>: critical threshold to become red\n"; |
||||
print "-d <decimals>: Use <decimals> decimals for percentage (default is $decimals) \n"; |
||||
exit 0; |
||||
} |
||||
|
||||
GetOptions("help|h" => \&help, |
||||
"w=i" => \$t_warn, |
||||
"c=i" => \$t_crit, |
||||
"d=i" => \$decimals, |
||||
); |
||||
|
||||
# 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; |
||||
while (<MPSTAT>) { |
||||
if (/^.*\s+(\d+\.\d+)[\s\x00]?$/) { |
||||
$cpu_usage = 100 - $1; # 100% - %idle |
||||
last; |
||||
} |
||||
} |
||||
close(MPSTAT); |
||||
|
||||
$cpu_usage eq -1 and die 'Can\'t find CPU information'; |
||||
|
||||
# Print short_text, full_text |
||||
printf "${label} %.${decimals}f%%\n", $cpu_usage; |
||||
printf "${label} %.${decimals}f%%\n", $cpu_usage; |
||||
|
||||
# Print color, if needed |
||||
if ($cpu_usage >= $t_crit) { |
||||
print "#FF0000\n"; |
||||
exit 33; |
||||
} elsif ($cpu_usage >= $t_warn) { |
||||
print "#FFFC00\n"; |
||||
} |
||||
|
||||
exit 0; |
@ -0,0 +1,83 @@ |
||||
#!/bin/bash |
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> |
||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com> |
||||
|
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
|
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
|
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
#------------------------------------------------------------------------ |
||||
|
||||
# The second parameter overrides the mixer selection |
||||
# For PulseAudio users, eventually use "pulse" |
||||
# For Jack/Jack2 users, use "jackplug" |
||||
# For ALSA users, you may use "default" for your primary card |
||||
# or you may use hw:# where # is the number of the card desired |
||||
if [[ -z "$MIXER" ]] ; then |
||||
MIXER="default" |
||||
if command -v pulseaudio >/dev/null 2>&1 && pulseaudio --check ; then |
||||
# pulseaudio is running, but not all installations use "pulse" |
||||
if amixer -D pulse info >/dev/null 2>&1 ; then |
||||
MIXER="pulse" |
||||
fi |
||||
fi |
||||
[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug" |
||||
MIXER="${2:-$MIXER}" |
||||
fi |
||||
|
||||
# The instance option sets the control to report and configure |
||||
# This defaults to the first control of your selected mixer |
||||
# For a list of the available, use `amixer -D $Your_Mixer scontrols` |
||||
if [[ -z "$SCONTROL" ]] ; then |
||||
SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols | |
||||
sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | |
||||
head -n1 |
||||
)}" |
||||
fi |
||||
|
||||
# The first parameter sets the step to change the volume by (and units to display) |
||||
# This may be in in % or dB (eg. 5% or 3dB) |
||||
if [[ -z "$STEP" ]] ; then |
||||
STEP="${1:-5%}" |
||||
fi |
||||
|
||||
#------------------------------------------------------------------------ |
||||
|
||||
capability() { # Return "Capture" if the device is a capture device |
||||
amixer -D $MIXER get $SCONTROL | |
||||
sed -n "s/ Capabilities:.*cvolume.*/Capture/p" |
||||
} |
||||
|
||||
volume() { |
||||
amixer -D $MIXER get $SCONTROL $(capability) |
||||
} |
||||
|
||||
format() { |
||||
perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)' |
||||
perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "' |
||||
# If dB was selected, print that instead |
||||
perl_filter+=$([[ $STEP = *dB ]] && echo "$label "'$3' || echo "$label "'$1') |
||||
perl_filter+='"; exit}' |
||||
perl -ne "$perl_filter" |
||||
#tmp=$(perl -ne "$perl_filter") |
||||
#echo "$label $tmp" |
||||
} |
||||
|
||||
#------------------------------------------------------------------------ |
||||
|
||||
case $BLOCK_BUTTON in |
||||
3) amixer -q -D $MIXER sset $SCONTROL $(capability) toggle ;; # right click, mute/unmute |
||||
4) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase |
||||
5) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease |
||||
esac |
||||
|
||||
volume | format |
Loading…
Reference in new issue