summaryrefslogtreecommitdiffstats
path: root/scripts/uptime.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/uptime.pl')
-rw-r--r--scripts/uptime.pl192
1 files changed, 192 insertions, 0 deletions
diff --git a/scripts/uptime.pl b/scripts/uptime.pl
new file mode 100644
index 0000000..114070c
--- /dev/null
+++ b/scripts/uptime.pl
@@ -0,0 +1,192 @@
+# uptime - irssi 0.7.98.CVS
+#
+# $Id: uptime.pl,v 1.6 2003/02/04 02:43:06 peder Exp $
+#
+# Copyright (C) 2002, 2003 by Peder Stray <peder@ninja.no>
+#
+
+use strict;
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+# ======[ Script Header ]===============================================
+
+use vars qw{$VERSION %IRSSI};
+($VERSION) = '$Revision: 1.6 $' =~ / (\d+\.\d+) /;
+%IRSSI = (
+ name => 'uptime',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/uptime.pl',
+ license => 'GPL',
+ description => 'Try a little harder to figure out client uptime',
+ sbitems => 'uptime',
+ );
+
+# ======[ Variables ]===================================================
+
+my($timer) = 0; # ID of current timer
+
+# ======[ Helper functions ]============================================
+
+# --------[ uptime_linux ]----------------------------------------------
+
+sub uptime_linux {
+ my($sys_uptime);
+ my($irssi_start);
+ local(*FILE);
+
+ open FILE, "< /proc/uptime";
+ $sys_uptime = (split " ", <FILE>)[0];
+ close FILE;
+
+ open FILE, "< /proc/$$/stat";
+ $irssi_start = (split " ", <FILE>)[21];
+ close FILE;
+
+ return $sys_uptime - $irssi_start/100;
+}
+
+# --------[ uptime_solaris ]--------------------------------------------
+
+sub uptime_solaris {
+ my($irssi_start);
+
+ $irssi_start = time - (stat("/proc/$$"))[9];
+
+ return $irssi_start;
+}
+
+# --------[ uptime ]----------------------------------------------------
+
+sub uptime {
+ my($sysname) = @_;
+ my($time);
+
+ if ($sysname eq 'Linux') {
+ $time = uptime_linux;
+ } elsif ($sysname eq 'SunOS') {
+ $time = uptime_solaris;
+ } else {
+ $time = time - $^T;
+ }
+
+ return $time;
+}
+
+# --------[ format_interval ]-------------------------------------------
+
+sub format_interval {
+ my($interval) = @_;
+
+ my(@interval,$str);
+ for (60, 60, 24, 365) {
+ push @interval, $interval%$_;
+ $interval = int($interval/$_);
+ }
+ $str = sprintf "%dy %dd %dh %dm %ds", $interval, @interval[3,2,1,0];
+ $str =~ s/^(0. )+//;
+
+ return $str;
+}
+
+# ======[ Commands ]====================================================
+
+# --------[ cmd_uptime ]------------------------------------------------
+
+sub cmd_uptime {
+ my($data,$server,$witem) = @_;
+ my($sysname) = Irssi::parse_special('$sysname');
+ my($uptime) = uptime($sysname);
+ my($str) = format_interval($uptime);
+
+ if ($data && $server) {
+ $server->command("MSG $data uptime: $str");
+ } elsif ($witem && ($witem->{type} eq "CHANNEL" ||
+ $witem->{type} eq "QUERY")) {
+ $witem->command("MSG ".$witem->{name}." uptime: $str");
+ } else {
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'uptime',
+ $str, $sysname);
+ }
+}
+
+# ======[ Signal Hooks ]================================================
+
+# --------[ sig_setup_changed ]-----------------------------------------
+
+sub sig_setup_changed {
+ my($interval) = Irssi::settings_get_int('uptime_refresh_interval');
+
+ Irssi::timeout_remove($timer);
+
+ if ($interval < 1) {
+ $interval = 0;
+ }
+
+ return unless $interval;
+
+ $interval *= 1000;
+ $timer = Irssi::timeout_add($interval, 'uptime_refresh' , undef);
+}
+
+# ======[ Statusbar Hooks ]=============================================
+
+# --------[ sb_uptime ]-------------------------------------------------
+
+sub sb_uptime {
+ my($item, $get_size_only) = @_;
+ my $format = "";
+ my($uptime) = uptime(Irssi::parse_special('$sysname'));
+ my($time) = format_interval($uptime);
+
+ $format = "{sb %g$time%n}";
+
+ $item->default_handler($get_size_only, $format, undef, 1);
+}
+
+# ======[ Timers ]======================================================
+
+# --------[ uptime_refresh ]--------------------------------------------
+
+sub uptime_refresh {
+ Irssi::statusbar_items_redraw('uptime');
+}
+
+# ======[ Setup ]=======================================================
+
+# --------[ Register commands ]-----------------------------------------
+
+Irssi::command_bind('uptime', 'cmd_uptime');
+
+# --------[ Register formats ]------------------------------------------
+
+Irssi::theme_register(
+[
+ 'uptime',
+ '{line_start}{hilight Uptime:} $0 ($1)',
+]);
+
+# --------[ Register settings ]-----------------------------------------
+
+Irssi::settings_add_int('upgrade', 'uptime_refresh_interval', 12);
+
+# --------[ Register signals ]------------------------------------------
+
+Irssi::signal_add('setup changed', 'sig_setup_changed');
+
+# --------[ Register statusbar items ]----------------------------------
+
+Irssi::statusbar_item_register('uptime', undef, 'sb_uptime');
+
+# --------[ Other setup ]-----------------------------------------------
+
+sig_setup_changed;
+
+# ======[ END ]=========================================================
+
+# Local Variables:
+# header-initial-hide: t
+# mode: header-minor
+# end: