All Projects → tenox7 → Ttyplot

tenox7 / Ttyplot

Licence: apache-2.0
a realtime plotting utility for terminal/console with data input from stdin

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Ttyplot

smag
Show Me A Graph - Command Line Graphing
Stars: ✭ 78 (-85.34%)
Mutual labels:  console, chart, cpu, pipeline, realtime, plot
Asciigraph
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.
Stars: ✭ 1,805 (+239.29%)
Mutual labels:  graph, chart, plot, command-line-tool
Asciichart
Nice-looking lightweight console ASCII line charts ╭┈╯ for NodeJS, browsers and terminal, no dependencies
Stars: ✭ 1,107 (+108.08%)
Mutual labels:  console, graph, chart, plot
You Dont Need Gui
Stop relying on GUI; CLI **ROCKS**
Stars: ✭ 4,766 (+795.86%)
Mutual labels:  command-line-tool, commandline, cli
Brotab
Control your browser's tabs from the command line
Stars: ✭ 137 (-74.25%)
Mutual labels:  command-line-tool, commandline, cli
Onhold
🔊 Play sounds while and after shell jobs complete
Stars: ✭ 146 (-72.56%)
Mutual labels:  command-line-tool, pipe, pipeline
Lc
licensechecker (lc) a command line application which scans directories and identifies what software license things are under producing reports as either SPDX, CSV, JSON, XLSX or CLI Tabular output. Dual-licensed under MIT or the UNLICENSE.
Stars: ✭ 93 (-82.52%)
Mutual labels:  command-line-tool, commandline, cli
asciichart-sharp
C# port of asciichart
Stars: ✭ 27 (-94.92%)
Mutual labels:  console, chart, plot
Gitlab Cli
Create a merge request from command line in gitlab
Stars: ✭ 224 (-57.89%)
Mutual labels:  command-line-tool, commandline, cli
jira-cli
🔥 [WIP] Feature-rich interactive Jira command line.
Stars: ✭ 809 (+52.07%)
Mutual labels:  console, cli-app, command-line-tool
Github cli
GitHub on your command line. Use your terminal, not the browser.
Stars: ✭ 263 (-50.56%)
Mutual labels:  command-line-tool, cli, console
Git Tidy
Tidy up stale git branches.
Stars: ✭ 137 (-74.25%)
Mutual labels:  command-line-tool, cli-app, cli
Tooling
Advancing Node.js as a framework for writing great tools
Stars: ✭ 98 (-81.58%)
Mutual labels:  command-line-tool, cli, console
Cobra
A Commander for modern Go CLI interactions
Stars: ✭ 24,437 (+4493.42%)
Mutual labels:  cli-app, commandline, cli
Terminal layout
The project help you to quickly build layouts in terminal,cross-platform(一个跨平台的命令行ui布局工具)
Stars: ✭ 98 (-81.58%)
Mutual labels:  command-line-tool, cli-app, cli
Dockly
Immersive terminal interface for managing docker containers and services
Stars: ✭ 3,034 (+470.3%)
Mutual labels:  command-line-tool, cli, console
Starcli
✨ Browse GitHub trending projects from your command line
Stars: ✭ 269 (-49.44%)
Mutual labels:  command-line-tool, commandline, cli
Tsukae
🧑‍💻📊 Show off your most used shell commands
Stars: ✭ 345 (-35.15%)
Mutual labels:  command-line-tool, commandline, cli
Pyinquirer
A Python module for common interactive command line user interfaces
Stars: ✭ 1,151 (+116.35%)
Mutual labels:  command-line-tool, cli-app, cli
Forge Node App
🛠📦🎉 Generate Node.js boilerplate with optional libraries & tools
Stars: ✭ 90 (-83.08%)
Mutual labels:  command-line-tool, cli-app, cli

ttyplot

a realtime plotting utility for terminal with data input from stdin / pipe

takes data from standard input / unix pipeline, most commonly some tool like ping, snmpget, netstat, ip link, ifconfig, sar, vmstat, etc. and plots in text mode on a terminal in real time, for example a 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, ip link, rrdtool, etc:

ttyplot snmp

   

get

ubuntu

snap install ttyplot

debian

curl -LO https://github.com/tenox7/ttyplot/releases/download/1.4/ttyplot_1.4-1.deb && sudo apt install ./ttyplot_1.4-1.deb

macOS

brew install ttyplot

for other platforms see releases tab

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 "%"

memory usage on macOS

vm_stat 1 | awk '{ print int($2)*4096/1024^3; fflush(); }' | ttyplot -t "MacOS Memory Usage" -u GB

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

on macOS change -u to -l

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

memory usage from rrdtool and collectd using awk

{ while true; do rrdtool lastupdate /var/lib/collectd/rrd/$(hostname)/memory/memory-used.rrd | awk 'END { print ($NF)/1024/1024 }'; sleep 1; done } | ttyplot -m $(awk '/MemTotal/ { print ($2)/1024 }' /proc/meminfo) -t "Memoru Used" -u MB

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

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

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"

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 measured 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"

network throughput from collectd with rrdtool and awk

{ while true; do rrdtool lastupdate /var/lib/collectd/rrd/$(hostname)/interface-enp1s0/if_octets.rrd | awk 'END { print ($2)/1000/1000, ($3)/1000/1000 }'; sleep 10; done } | ttyplot -2 -r -t "enp1s0 throughput" -u MB/s

   

flags

  ttyplot [-2] [-r] [-c plotchar] [-s scale] [-m max] [-t title] [-u unit]

  -2 read two values and draw two plots, the second one is in reverse video
  -r rate of a counter (divide value by measured sample interval)
  -c character to use for plot line, eg @ # % . etc
  -e character to use for plot error line when value exceeds hardmax (default: e)
  -s initial scale of the plot (can go above if data input has larger value)
  -m maximum value, if exceeded draws error line (see -e), plot scale is fixed
  -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 also this

ttyplot quits when tere is no more data

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

{ echo 1 2 3; cat; } | ttyplot

ttyplot erases screen when exiting

it's because of alternate screen in xterm-ish terminals, if you use one of these this will likely work around it:

echo 1 2 3 | TERM=vt100 ttyplot

you can also permanently fix terminfo entry (this will make a copy in $HOME/.terminfo/):

infocmp -I $TERM | sed -e 's/smcup=[^,]*,//g' -e 's/rmcup=[^,]*,//g' | tic -

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

press ctrl^j to re-set

legal stuff

License: Apache 2.0
Copyright (c) 2013-2018 Antoni Sawicki
Copyright (c) 2019-2020 Google LLC
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].