summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2012-04-20 22:23:41 +0200
committerPaul Buetow <paul@buetow.org>2012-04-20 22:23:41 +0200
commit46b7f1cfa7ab8da5b09ae765638f68bba20b2e02 (patch)
tree54e794fd8f41896b46a7cc9dd24df8b121874110
parentb1fd6740d411c4960c6cc3b4bcdaa7b29d6a901f (diff)
re-add0.5.2
-rw-r--r--Makefile21
-rw-r--r--debian/README7
-rw-r--r--debian/changelog150
-rw-r--r--debian/compat1
-rw-r--r--debian/control15
-rw-r--r--debian/copyright30
-rw-r--r--debian/files1
-rw-r--r--debian/loadbars.debhelper.log45
-rw-r--r--debian/loadbars.manpages1
-rw-r--r--debian/loadbars.substvars2
-rwxr-xr-xdebian/rules13
-rw-r--r--debian/source/format1
-rw-r--r--docs/bugs1
-rw-r--r--docs/loadbars.1146
-rw-r--r--docs/loadbars.pod23
-rw-r--r--docs/loadbars.txt25
-rw-r--r--docs/wishlist6
-rw-r--r--fonts/font.pngbin0 -> 14883 bytes
-rw-r--r--lib/Loadbars/Config.pm142
-rw-r--r--lib/Loadbars/Constants.pm39
-rw-r--r--lib/Loadbars/HelpDispatch.pm350
-rw-r--r--lib/Loadbars/Main.pm887
-rw-r--r--lib/Loadbars/Shared.pm52
-rw-r--r--lib/Loadbars/Utils.pm41
-rwxr-xr-xloadbars68
25 files changed, 2067 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9f6ae13
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+NAME=loadbars
+all: documentation perltidy
+perltidy:
+ find . -name \*.pm | xargs perltidy -b
+ perltidy -b $(NAME)
+ find . -name \*.bak -delete
+documentation:
+ pod2man --release="$(NAME) $$(cut -d' ' -f2 debian/changelog | head -n 1 | sed 's/(//;s/)//')" \
+ --center="User Commands" ./docs/$(NAME).pod > ./docs/$(NAME).1
+ pod2text ./docs/$(NAME).pod > ./docs/$(NAME).txt
+install:
+ test ! -d $(DESTDIR)/usr/bin && mkdir -p $(DESTDIR)/usr/bin || exit 0
+ test ! -d $(DESTDIR)/usr/share/$(NAME) && mkdir -p $(DESTDIR)/usr/share/$(NAME) || exit 0
+ cp $(NAME) $(DESTDIR)/usr/bin
+ cp -r ./lib $(DESTDIR)/usr/share/$(NAME)/lib
+ cp -r ./fonts $(DESTDIR)/usr/share/$(NAME)/fonts
+deinstall:
+ test ! -z "$(DESTDIR)" && test -f $(DESTDIR)/usr/bin/$(NAME) && rm $(DESTDIR)/usr/bin/$(NAME) || exit 0
+ test ! -z "$(DESTDIR)/usr/share/$(NAME)" && -d $(DESTDIR)/usr/share/$(NAME) && rm -r $(DESTDIR)/usr/share/$(NAME) || exit 0
+deb:
+ dpkg-buildpackage
diff --git a/debian/README b/debian/README
new file mode 100644
index 0000000..2279588
--- /dev/null
+++ b/debian/README
@@ -0,0 +1,7 @@
+The Debian Package loadbars
+----------------------------
+
+This is just a hobby project. Not sure if everything meets the debian
+policy though.
+
+ -- Paul Buetow <paul@buetow.org> Sun, 08 Apr 2012 15:23:53 +0200
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..aaa6c56
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,150 @@
+loadbars (0.5.2) stable; urgency=low
+
+ * Initial .deb
+
+ -- Paul Buetow <paul@buetow.org> Sun, 08 Apr 2012 15:23:53 +0200
+
+loadbars (0.0.0) stable; urgency=low
+
+ * ALL CHANGES FOR PREVIOUS VERSIONS (NON DEBIAN PACKAGE)
+
+ Thu Apr 19 21:41:52 CEST 2012
+ * Minor change, sleep 0.5s instead of 3s if ssh command fails
+
+ Fri Apr 6 10:17:30 CEST 2012
+ * Minor fixes such as redraw background on toggle text display which
+ should fix some weird display bugs.
+
+ Fri Mar 16 07:20:50 CET 2012
+ * Release v0.5.1.1
+ * Dropped FreeBSD support / focus is Linux
+ * On shutdown all sub-processes are gonna be terminated instantly
+ (was old bug). Needs Proc::ProcessTable module.
+ * Dont quit loadbars if ~/.loadbarsrc can not be overwritten
+
+ Sat Feb 25 20:09:02 CET 2012
+ * Release v0.5.1
+ * Add config file support (~/.loadbarsrc) and it's possible to configure
+ any option you find in --help but without leading '--'. For comments
+ just use the '#' sign. Sample config:
+ showcores=1 # Always show cores on startup
+ showtext=0 # Always don't display text on startup
+ * Add hotkey 'w' which writes current settings to the configfile
+ * Remove --title option (no need anyway)
+ * Some code cleanups
+ * Some bugfixes
+
+ Sat Feb 4 10:56:27 CET 2012
+ * Release v0.5.0
+ * Add stats for rudimentary memory and swap usage (--showmem option or m hotkey)
+ * Remove --width and --inter options
+ * Add --barwidth option, each bar is barwidth pixels now
+ * Add --maxwidth option, which represents the max total window width
+ * Auto disable text display if text does not fit into window (maxwidth) pixels
+ * Auto re-enable text display if text does fit again into window
+ * Key right increases window width by 100px and left decreases by 100px
+ * Key down increases window height by 100px and up decreases by 100px
+ * Set 'samples' default values from 1000 down to 500.
+ * Displays a text warning on stdout if computer may be too slow
+ * No sporadic crashes on shutdown anymore
+ * Some internal tweaks, no separate event thread needed anymore. This fixes
+ some sporadic bugs.
+
+ Sun Jan 21 14:16:37 CET 2012
+ * Released v0.4.0
+ * Also show stats for idle, iowait, irq, softirq, steal and guest cpu time
+ * Some parameters have been renamed (see --help)
+ * Introduced extended mode (use --extended 1 at startup or 'e' hotkey)
+ * Modified the bar colors a little bit (see --help)
+ * Some Bugfixes
+
+ Tue Dec 27 12:28:40 CET 2011
+ * Released v0.3.1
+ * --cluster option (which reads the ClusterSSH config file /etc/clusters/)
+ also supports clusters of clusters. e.g.:
+ $ cat /etc/clusters
+ clusterA server01 server02
+ clusterB clusterA server03
+ So --cluster clusterB will connect to server01 server02 and server03
+ * --hosts option supports username to be specified. E.g.:
+ # ./loadbars --hosts user1@server01,user2@server02
+ will connect to server01 using user1 and server02 with user2.
+
+ Mon Dec 26 14:46:25 CET 2011
+ * Released v0.3.0
+ * Peak CPU load is not displayed by default anymore. User 'p' command or
+ the --togglepeak 1 startup option.
+ * Peak CPU load is now also displayd in text format (marked as pk)
+ * New option --cluster which brings rudimentary ClusterSSH config file
+ support. E.g. './loadbars --cluster server' reads cluster server from
+ the /etc/clusters file.
+
+ Sat Nov 19 11:54:51 CET 2011
+ * Released v0.2.2
+ * Added a 1px horizontal line to each bar which represent the max. peak
+ of user and system cpu load of the last N samples (max. of the last 15
+ samples by default, it can be configured using --average)
+ * Default value for --average has been decreased from 30 to 15 sample
+ values
+
+ Fr 12. Aug 21:41:46 CEST 2011
+ * Released v0.2.1
+
+ Di 9. Aug 20:42:43 CEST 2011
+ * Released v0.2.0.2 (Bugfixes only; Bar width was wrong by 1px)
+
+ So 7. Aug 15:53:08 CEST 2011
+ * Added grey separator lines between each hosts during CPU toggle mode
+ * More intelligent CPU core numbering during CPU toggle mode
+ * FreeBSD server support for CPU graphs has been tested and is working using
+ linprocfs mounted on /compat/linux/proc.
+ * Changed licence to GPL 2
+ * Some more documentation
+ * Some minor bugfixes
+
+ So 7. Aug 14:06:45 CEST 2011
+ * Released v0.2.0.1 (Bugfixes only)
+
+ Sa 6. Aug 22:04:15 CEST 2011
+ * Released v0.2.0 (new major version)
+ * No interactive CLI shell anymore but instead hotkeys for the
+ SDL interface (press h and see).
+ * Bugfixes (E.g. Loadbars does not hang anymore after typing commands)
+ * Major code refactoring
+
+ Fr 5. Aug 23:52:49 CEST 2011
+ * Released v0.1.3.1
+ * Some more minor bugfixes
+
+ Fr 5. Aug 23:29:19 CEST 2011
+ * Released v0.1.3
+ * Fixed a segfault bug on SDL::Font using threads
+ * Added an advanced help option (h vs. H)
+ * Added new toggle option: Displaying bar number vs. hostname
+ * Some little code refactoring
+
+ Fr 22. Apr 13:08:08 CEST 2011
+ * Released v0.1.2.1
+
+ Mi 20. Apr 08:37:49 CEST 2011
+ * Added ./BUGS which includes a summary of all current known bugs
+
+ Fri Jan 14 23:03:47 CET 2011
+ * Released v0.1.2
+ * Added 'toggle summary' option
+ * Removed all old screenshots
+ * Added a newer one
+ * Fixed lots of bugs (including segfaults)
+ * Cosmetic code fixes
+
+ Tue Jan 11 14:01:32 CET 2011
+ * Released v0.1.1
+ * Extended help text ('h' command)
+ * Added CHANGELOG and README files
+ * Fixed a typo
+
+ Tue Jan 11 13:??:?? CET 2011
+ * Released v0.1.0
+ * With initial font support (text display of the stats)
+ * Everything else which has been implemented up to 0.1-beta8-pre6
+ -- Paul Buetow <paul@buetow.org> Sun, 08 Apr 2012 15:23:53 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+8
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..84c7583
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,15 @@
+Source: loadbars
+Section: utils
+Priority: optional
+Maintainer: Paul Buetow <paul@buetow.org>
+Build-Depends: perl, perltidy
+Standards-Version: 3.9.2
+Homepage: http://loadbars.buetow.org
+Vcs-Git: git://git.bueto.org/loadbars
+Vcs-Browser: http://web.buetow.org/git/?p=loadbars.git;a=summary
+
+Package: loadbars
+Architecture: all
+Depends: ${perl:Depends}, libsdl-perl (>= 2.2.5-1), libproc-processtable-perl (>= 0.45-1)
+Description: Real time monitoring tool
+ Loadbars is a tool to observe loads of several remote servers at once.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..b563119
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,30 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: loadbars
+Source: http://loadbars.buetow.org
+
+Files: *
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+Files: debian/*
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+License: GPL-3.0+
+ 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 package 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/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+
diff --git a/debian/files b/debian/files
new file mode 100644
index 0000000..d1d5b07
--- /dev/null
+++ b/debian/files
@@ -0,0 +1 @@
+loadbars_0.5.2_all.deb utils optional
diff --git a/debian/loadbars.debhelper.log b/debian/loadbars.debhelper.log
new file mode 100644
index 0000000..2d06fcd
--- /dev/null
+++ b/debian/loadbars.debhelper.log
@@ -0,0 +1,45 @@
+dh_auto_configure
+dh_auto_build
+dh_auto_test
+dh_prep
+dh_installdirs
+dh_auto_install
+dh_install
+dh_installdocs
+dh_installchangelogs
+dh_installexamples
+dh_installman
+dh_installcatalogs
+dh_installcron
+dh_installdebconf
+dh_installemacsen
+dh_installifupdown
+dh_installinfo
+dh_pysupport
+dh_installinit
+dh_installmenu
+dh_installmime
+dh_installmodules
+dh_installlogcheck
+dh_installlogrotate
+dh_installpam
+dh_installppp
+dh_installudev
+dh_installwm
+dh_installxfonts
+dh_bugfiles
+dh_lintian
+dh_gconf
+dh_icons
+dh_perl
+dh_usrlocal
+dh_link
+dh_compress
+dh_fixperms
+dh_strip
+dh_makeshlibs
+dh_shlibdeps
+dh_installdeb
+dh_gencontrol
+dh_md5sums
+dh_builddeb
diff --git a/debian/loadbars.manpages b/debian/loadbars.manpages
new file mode 100644
index 0000000..a3155c7
--- /dev/null
+++ b/debian/loadbars.manpages
@@ -0,0 +1 @@
+docs/loadbars.1
diff --git a/debian/loadbars.substvars b/debian/loadbars.substvars
new file mode 100644
index 0000000..bcb0957
--- /dev/null
+++ b/debian/loadbars.substvars
@@ -0,0 +1,2 @@
+perl:Depends=perl
+misc:Depends=
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..b760bee
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/docs/bugs b/docs/bugs
new file mode 100644
index 0000000..e169314
--- /dev/null
+++ b/docs/bugs
@@ -0,0 +1 @@
+No known bugs there atm
diff --git a/docs/loadbars.1 b/docs/loadbars.1
new file mode 100644
index 0000000..62ed39a
--- /dev/null
+++ b/docs/loadbars.1
@@ -0,0 +1,146 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LOADBARS 1"
+.TH LOADBARS 1 "2012-04-20" "loadbars 0.5.2" "User Commands"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+loadbars \- Small tool to observe server loads
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+For any program help check out \-\-help on command line or 'h' during program
+execution.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+Loadbars is a small script that can be used to observe \s-1CPU\s0 loads of several remote servers at once in real time. It connects with \s-1SSH\s0 (using \s-1SSH\s0 public/private key auth) to several servers at once and vizualizes all server CPUs and memory statistics right next each other (either summarized or each core separately). Loadbars is not a tool for collecting \s-1CPU\s0 loads and drawing graphs for later analysis. However, since such tools require a significant amount of time before producing results, Loadbars lets you observe the current state immediately. Loadbars does not remember or record any load information. It just shows the current \s-1CPU\s0 usages like top or vmstat does.
+.SH "LICENSE"
+.IX Header "LICENSE"
+See package description or project website.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Paul Buetow \- <http://loadbars.buetow.org>
diff --git a/docs/loadbars.pod b/docs/loadbars.pod
new file mode 100644
index 0000000..4a029bd
--- /dev/null
+++ b/docs/loadbars.pod
@@ -0,0 +1,23 @@
+=head1 NAME
+
+loadbars - Small tool to observe server loads
+
+=head1 SYNOPSIS
+
+For any program help check out --help on command line or 'h' during program
+execution.
+
+=head1 DESCRIPTION
+
+Loadbars is a small script that can be used to observe CPU loads of several remote servers at once in real time. It connects with SSH (using SSH public/private key auth) to several servers at once and vizualizes all server CPUs and memory statistics right next each other (either summarized or each core separately). Loadbars is not a tool for collecting CPU loads and drawing graphs for later analysis. However, since such tools require a significant amount of time before producing results, Loadbars lets you observe the current state immediately. Loadbars does not remember or record any load information. It just shows the current CPU usages like top or vmstat does.
+
+
+=head1 LICENSE
+
+See package description or project website.
+
+=head1 AUTHOR
+
+Paul Buetow - <http://loadbars.buetow.org>
+
+=cut
diff --git a/docs/loadbars.txt b/docs/loadbars.txt
new file mode 100644
index 0000000..4791cd5
--- /dev/null
+++ b/docs/loadbars.txt
@@ -0,0 +1,25 @@
+NAME
+ loadbars - Small tool to observe server loads
+
+SYNOPSIS
+ For any program help check out --help on command line or 'h' during
+ program execution.
+
+DESCRIPTION
+ Loadbars is a small script that can be used to observe CPU loads of
+ several remote servers at once in real time. It connects with SSH (using
+ SSH public/private key auth) to several servers at once and vizualizes
+ all server CPUs and memory statistics right next each other (either
+ summarized or each core separately). Loadbars is not a tool for
+ collecting CPU loads and drawing graphs for later analysis. However,
+ since such tools require a significant amount of time before producing
+ results, Loadbars lets you observe the current state immediately.
+ Loadbars does not remember or record any load information. It just shows
+ the current CPU usages like top or vmstat does.
+
+LICENSE
+ See package description or project website.
+
+AUTHOR
+ Paul Buetow - <http://loadbars.buetow.org>
+
diff --git a/docs/wishlist b/docs/wishlist
new file mode 100644
index 0000000..ea234ff
--- /dev/null
+++ b/docs/wishlist
@@ -0,0 +1,6 @@
+* More stats for memory
+* Stats for network
+* .deb for Debian and Ubuntu
+* Auto detect single core boxes
+* Make code modular (script is growing...)
+* Optimize code (too much cpu usage if there are too many hosts involved)
diff --git a/fonts/font.png b/fonts/font.png
new file mode 100644
index 0000000..02e9eb1
--- /dev/null
+++ b/fonts/font.png
Binary files differ
diff --git a/lib/Loadbars/Config.pm b/lib/Loadbars/Config.pm
new file mode 100644
index 0000000..57fad2f
--- /dev/null
+++ b/lib/Loadbars/Config.pm
@@ -0,0 +1,142 @@
+package Loadbars::Config;
+
+use strict;
+use warnings;
+
+use Loadbars::Utils;
+
+use Exporter;
+
+use base 'Exporter';
+
+our @EXPORT = qw ( %C %I );
+
+# Global configuration hash
+our %C : shared;
+
+# Global configuration hash for internal settings (not configurable)
+our %I : shared;
+
+# Setting defaults
+%C = (
+ average => 15,
+ barwidth => 35,
+ extended => 0,
+ factor => 1,
+ height => 230,
+ maxwidth => 1280,
+ samples => 1000,
+ showcores => 0,
+ showmem => 0,
+ showtext => 1,
+ showtexthost => 0,
+ sshopts => '',
+);
+
+%I = (
+ cpuregexp => 'cpu',
+ showtextoff => 0,
+);
+
+sub read () {
+ return unless -f Loadbars::Constants->CONFFILE;
+
+ display_info(
+ "Reading configuration from " . Loadbars::Constants->CONFFILE );
+ open my $conffile, Loadbars::Constants->CONFFILE
+ or die "$!: " . Loadbars::Constants->CONFFILE . "\n";
+
+ while (<$conffile>) {
+ chomp;
+ s/[\t\s]*?#.*//;
+
+ next unless length;
+
+ my ( $key, $val ) = split '=';
+
+ unless ( defined $val ) {
+ display_warn("Could not parse config line: $_");
+ next;
+ }
+
+ trim($key);
+ trim($val);
+
+ if ( not exists $C{$key} ) {
+ display_warn("There is no such config key: $key, ignoring");
+
+ }
+ else {
+ display_info(
+"Setting $key=$val, it might be overwritten by command line params."
+ );
+ $C{$key} = $val;
+ }
+ }
+
+ close $conffile;
+}
+
+sub write () {
+ display_warn( "Overwriting config file " . Loadbars::Constants->CONFFILE )
+ if -f Loadbars::Constants->CONFFILE;
+
+ open my $conffile, '>', Loadbars::Constants->CONFFILE or do {
+ display_warn( "$!: " . Loadbars::Constants->CONFFILE );
+
+ return undef;
+ };
+
+ for ( keys %C ) {
+ print $conffile "$_=$C{$_}\n";
+ }
+
+ close $conffile;
+}
+
+# Recursuve function
+sub get_cluster_hosts ($;$);
+
+sub get_cluster_hosts ($;$) {
+ my ( $cluster, $recursion ) = @_;
+
+ unless ( defined $recursion ) {
+ $recursion = 1;
+
+ }
+ elsif ( $recursion > Loadbars::Constants->CSSH_MAX_RECURSION ) {
+ error( "CSSH_MAX_RECURSION reached. Infinite circle loop in "
+ . Loadbars::Constants->CSSH_CONFFILE
+ . "?" );
+ }
+
+ open my $fh, Loadbars::Constants->CSSH_CONFFILE
+ or error( "$!: " . Loadbars::Constants->CSSH_CONFFILE );
+ my $hosts;
+
+ while (<$fh>) {
+ if (/^$cluster\s*(.*)/) {
+ $hosts = $1;
+ last;
+ }
+ }
+
+ close $fh;
+
+ unless ( defined $hosts ) {
+ error( "No such cluster in "
+ . Loadbars::Constants->CSSH_CONFFILE
+ . ": $cluster" )
+ unless defined $recursion;
+
+ return ($cluster);
+ }
+
+ my @hosts;
+ push @hosts, get_cluster_hosts $_, ( $recursion + 1 )
+ for ( split /\s+/, $hosts );
+
+ return @hosts;
+}
+
+1;
diff --git a/lib/Loadbars/Constants.pm b/lib/Loadbars/Constants.pm
new file mode 100644
index 0000000..af242bd
--- /dev/null
+++ b/lib/Loadbars/Constants.pm
@@ -0,0 +1,39 @@
+package Loadbars::Constants;
+
+use strict;
+use warnings;
+
+use SDL::Color;
+
+use constant {
+ VERSION => 'loadbars v0.5.2-devel',
+ COPYRIGHT => '2010-2012 (c) Paul Buetow <loadbars@mx.buetow.org>',
+ CONFFILE => $ENV{HOME} . '/.loadbarsrc',
+ CSSH_CONFFILE => '/etc/clusters',
+ CSSH_MAX_RECURSION => 10,
+ COLOR_DEPTH => 8,
+ BLACK => SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0x00 ),
+ BLUE0 => SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0xff ),
+ BLUE => SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0x88 ),
+ GREEN => SDL::Color->new( -r => 0x00, -g => 0x90, -b => 0x00 ),
+ ORANGE => SDL::Color->new( -r => 0xff, -g => 0x70, -b => 0x00 ),
+ PURPLE => SDL::Color->new( -r => 0xa0, -g => 0x20, -b => 0xf0 ),
+ RED => SDL::Color->new( -r => 0xff, -g => 0x00, -b => 0x00 ),
+ WHITE => SDL::Color->new( -r => 0xff, -g => 0xff, -b => 0xff ),
+ GREY0 => SDL::Color->new( -r => 0x11, -g => 0x11, -b => 0x11 ),
+ GREY => SDL::Color->new( -r => 0xaa, -g => 0xaa, -b => 0xaa ),
+ DARK_GREY => SDL::Color->new( -r => 0x15, -g => 0x15, -b => 0x15 ),
+ YELLOW0 => SDL::Color->new( -r => 0xff, -g => 0xa0, -b => 0x00 ),
+ YELLOW => SDL::Color->new( -r => 0xff, -g => 0xc0, -b => 0x00 ),
+ SYSTEM_BLUE0 => 30,
+ USER_ORANGE => 70,
+ USER_YELLOW0 => 50,
+ INTERVAL => 0.1,
+ INTERVAL_WARN => 1.0,
+ SUCCESS => 0,
+ E_UNKNOWN => 1,
+ E_NOHOST => 2,
+};
+
+1;
+
diff --git a/lib/Loadbars/HelpDispatch.pm b/lib/Loadbars/HelpDispatch.pm
new file mode 100644
index 0000000..dfee7f5
--- /dev/null
+++ b/lib/Loadbars/HelpDispatch.pm
@@ -0,0 +1,350 @@
+package Loadbars::HelpDispatch;
+
+use strict;
+use warnings;
+
+use Loadbars::Constants;
+use Loadbars::Shared;
+
+sub create () {
+ my $hosts = '';
+
+ my $textdesc = <<END;
+CPU stuff:
+ st = Steal in % [see man proc] (extended)
+ Color: Red
+ gt = Guest in % [see man proc] (extended)
+ Color: Red
+ sr = Soft IRQ usage in % (extended)
+ Color: White
+ ir = IRQ usage in % (extended)
+ Color: White
+ io = IOwait cpu sage in %
+ Color: Purple
+ id = Idle cpu usage in % (extended)
+ Color: Black
+ ni = Nice cpu usage in %
+ Color: Green
+ us = User cpu usage in %
+ Color: Yellow, dark yellow if to>50%, orange if to>50%
+ sy = System cpu sage in %
+ Blue, lighter blue if >30%
+ to = Total CPU usage, which is (100% - id)
+ pk = Max us+sy peak of last avg. samples (extended)
+ avg = System load average; desc. order: 1, 5 and 15 min. avg.
+ 1px horizontal line: Maximum sy+us+io of last 'avg' samples (extended)
+ Extended means: text display only if extended mode is turned on
+Memory stuff:
+ Ram: System ram usage in %
+ Color: Dark grey
+ Swp: System swap usage in %
+ Color: Grey
+Config file support:
+ Loadbars tries to read ~/.loadbarsrc and it's possible to configure any
+ option you find in --help but without leading '--'. For comments just use
+ the '#' sign. Sample config:
+ showcores=1 # Always show cores on startup
+ showtext=0 # Always don't display text on startup
+ extended=1 # Always use extended mode on startup
+ will always show all CPU cores in extended mode but no text display.
+Examples:
+ loadbars --extended 1 --showcores 1 --height 300 --hosts localhost
+ loadbars --hosts localhost,server1.example.com,server2.example.com
+ loadbars --cluster foocluster (foocluster is in /etc/clusters [ClusterSSH])
+END
+
+ # mode 1: Option is shown in the online help menu (stdout not sdl)
+ # mode 2: Option is shown in the 'usage' screen from the command line
+ # mode 4: Option is used to generate the GetOptions parameters for Getopt::Long
+ # Combinations: Like chmod(1)
+
+ my %d = (
+ average => {
+ menupos => 3,
+ help => 'Num of samples for avg. (more fluent animations)',
+ mode => 6,
+ type => 'i'
+ },
+ average_hot_up => {
+ menupos => 4,
+ cmd => 'a',
+ help => 'Increases number of samples for calculating avg. by 1',
+ mode => 1
+ },
+ average_hot_dn => {
+ menupos => 5,
+ cmd => 'y',
+ help => 'Decreases number of samples for calculating avg. by 1',
+ mode => 1
+ },
+
+ barwidth => {
+ menupos => 5,
+ help => 'Set bar width',
+ mode => 6,
+ type => 'i'
+ },
+ windowwidth_hot_up => {
+ menupos => 90,
+ help => 'Increase window width by 100px',
+ cmd => 'right',
+ mode => 1,
+ },
+ windowwidth_hot_dn => {
+ menupos => 91,
+ help => 'Decrease window width by 100px',
+ cmd => 'left',
+ mode => 1,
+ },
+ windowheight_hot_up => {
+ menupos => 92,
+ help => 'Increase window height by 100px',
+ cmd => 'down',
+ mode => 1,
+ },
+ windowheight_hot_dn => {
+ menupos => 93,
+ help => 'Decrease window height by 100px',
+ cmd => 'up',
+ mode => 1,