Git Product home page Git Product logo

ttyplot's Introduction

ttyplot

a realtime plotting utility for terminal with data input from stdin

takes data from standard input / unix pipeline, most commonly some tool like ping, snmpget, netstat, ifconfig, sar, vmstat, etc. and plots in text mode on a terminal in real time, for example simple ping:

ttyplot ping

   

supports rate calculation for counters and up to two graphs on a single display using reverse video for second line, for example snmpget or ip link:

ttyplot snmp

   

download

see releases tab

usage examples

cpu usage from vmstat using awk to pick the right column

vmstat -n 1 | gawk '{ print 100-int($(NF-2)); fflush(); }' | ttyplot

cpu usage from sar with title and fixed scale to 100%

sar 1 | gawk '{ print 100-int($NF); fflush(); }' | ttyplot -s 100 -t "cpu usage" -u "%"

memory usage from sar, using perl to pick the right column

sar -r 1 | perl -lane 'BEGIN{$|=1} print "@F[5]"' | ttyplot -s 100 -t "memory used %" -u "%"

number of processes in running and io blocked state

vmstat -n 1 | perl -lane 'BEGIN{$|=1} print "@F[0,1]"' | ttyplot -2 -t "procs in R and D state"

load average via uptime and awk

{ while true; do uptime | gawk '{ gsub(/,/, ""); print $(NF-2) }'; sleep 1; done } | ttyplot -t "load average" -s load

ping plot with sed

ping 8.8.8.8 | sed -u 's/^.*time=//g; s/ ms//g' | ttyplot -t "ping to 8.8.8.8" -u ms

wifi signal level in -dBM (higher is worse) using iwconfig

{ while true; do iwconfig 2>/dev/null | grep "Signal level" | sed -u 's/^.*Signal level=-//g; s/dBm//g'; sleep 1; done } | ttyplot -t "wifi signal" -u "-dBm" -s 90

cpu temperature from proc

{ while true; do awk '{ printf("%.1f\n", $1/1000) }' /sys/class/thermal/thermal_zone0/temp; sleep 1; done } | ttyplot -t "cpu temp" -u C

fan speed from lm-sensors using grep, tr and cut

{ while true; do sensors | grep fan1: | tr -s " " | cut -d" " -f2; sleep 1; done } | ttyplot -t "fan speed" -u RPM

bitcoin price chart using curl and jq

{ while true; do curl -sL https://api.coindesk.com/v1/bpi/currentprice.json  | jq .bpi.USD.rate_float; sleep 600; done } | ttyplot -t "bitcoin price" -u usd

stock quote chart

{ while true; do curl -sL https://api.iextrading.com/1.0/stock/googl/price; echo; sleep 600; done } | ttyplot -t "google stock price" -u usd

prometheus load average via node_exporter

{ while true; do curl -s  http://10.4.7.180:9100/metrics | grep "^node_load1 " | cut -d" " -f2; sleep 1; done } | ttyplot

   

network/disk throughput examples

ttyplot supports two line plot for in/out or read/write

local network throughput for all interfaces combined from sar

sar  -n DEV 1 | gawk '{ if($6 ~ /rxkB/) { print iin/1000; print out/1000; iin=0; out=0; fflush(); } iin=iin+$6; out=out+$7; }' | ttyplot -2 -u "MB/s"

snmp network throughput for an interface using ttg

ttg -i 10 -u Mb 10.23.73.254 public 9 | gawk '{ print $5,$8; fflush(); }' | ttyplot -2 -u Mb/s

snmp network throughput for an interface using snmpdelta

snmpdelta -v 2c -c public -Cp 10 10.23.73.254 1.3.6.1.2.1.2.2.1.{10,16}.9 | gawk '{ print $NF/1000/1000/10; fflush(); }' | ttyplot -2 -t "interface 9 throughput" -u Mb/s

disk throughput from iostat

iostat -xmy 1 nvme0n1 | stdbuf -o0 tr -s " " | stdbuf -o0 cut -d " " -f 4,5 | ttyplot -2 -t "nvme0n1 throughput" -u MB/s

   

rate calculator for counters

ttyplot also supports "counter" style metrics, calculating "rate" by measureing time difference between samples

snmp network throughput for an interface using snmpget

{ while true; do snmpget  -v 2c -c public  10.23.73.254  1.3.6.1.2.1.2.2.1.{10,16}.9 | awk '{ print $NF/1000/1000; }'; sleep 10; done } | ttyplot -2 -r -u "MB/s"

local interface throughput using ip link and jq

{ while true; do ip -s -j link show enp0s31f6 | jq .[].stats64.rx.bytes/1024/1024,.[].stats64.tx.bytes/1024/1024; sleep 1; done } | ttyplot -r -2 -u "MB/s"

prometheus node exporter disk throughput for /dev/sda

{ while true; do curl -s http://10.11.0.173:9100/metrics | awk '/^node_disk_.+_bytes_total{device="sda"}/ { printf("%f\n", $2/1024/1024); }'; sleep 1; done } | ttyplot -r -2 -u MB/s -t "10.11.0.173 sda writes"

   

options

ttyplot [-2] [-r] [-c plotchar] [-e errchar] [-s softmax] [-m hardmax] [-t title] [-u unit]

-2 read two values and draw two plots, the second one is in reverse video

-r calculate counter rate and divide by measured sample interval

-c character to use for plot line, eg @ # % . etc

-e character to use for plot error line when value exceeds max (default: e)

-s softmax is an initial maximum value that can grow if data input has larger value

-m hardmax is a hard maximum value, if exceeded error line will be drawn (see -e)

-t title of the plot

-u unit displayed beside vertical bar

   

issues

stdio buffering

by default in unix stdio is buffered, you can work around it in various ways

ttyplot quits and erases screen when there is no more data

it's by design, you can work around by adding sleep or read, for example:

{ echo "1 2 3"; sleep 1000; } | ttyplot

when running interactively and non-numeric data is entered (eg some key) ttyplot hangs

press ctrl^j to re-set

ttyplot's People

Contributors

claunia avatar gromgit avatar johnnynator avatar sjmulder avatar tenox7 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.