~ubuntu-branches/ubuntu/gutsy/munin/gutsy

« back to all changes in this revision

Viewing changes to node/node.d/sybase_space.in

  • Committer: Bazaar Package Importer
  • Author(s): Tore Anderson
  • Date: 2004-05-21 20:51:19 UTC
  • Revision ID: james.westby@ubuntu.com-20040521205119-oz8bllbjp9hs80ig
Tags: upstream-0+1.0.0pre5
ImportĀ upstreamĀ versionĀ 0+1.0.0pre5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!@@PERL@@ -w
 
2
#
 
3
# Plugin to monitor sybase database space usage
 
4
#
 
5
# Parameters:
 
6
#
 
7
#       config
 
8
#
 
9
# You need to add the user to all the databases you want monitored.
 
10
#
 
11
# Configuration variables:
 
12
#
 
13
#       SYBASE       - Sybase home
 
14
#       SYBASE_USER  - Username
 
15
#       SYBASE_PASS  - Password
 
16
#       SYBASE_HOST  - Host
 
17
#       
 
18
#        $Log: sybase_space.in,v $
 
19
#        Revision 1.1  2004/01/02 18:50:00  jimmyo
 
20
#        Renamed occurrances of lrrd -> munin
 
21
#       
 
22
#        Revision 1.1.1.1  2004/01/02 15:18:07  jimmyo
 
23
#        Import of LRRD CVS tree after renaming to Munin
 
24
#       
 
25
#        Revision 1.3  2003/11/10 18:41:33  jimmyo
 
26
#        Removed Data::Dumper dependency.
 
27
#       
 
28
#        Revision 1.2  2003/11/07 17:43:16  jimmyo
 
29
#        Cleanups and log entries
 
30
#       
 
31
#
 
32
#
 
33
#%# family=manual
 
34
#%# capabilities=
 
35
 
 
36
use strict;
 
37
use DBD::Sybase;
 
38
use DBI;
 
39
 
 
40
my $user = $ENV{SYBASE_USER} || "monitor";
 
41
my $pass = $ENV{SYBASE_PASS} || "monitor";
 
42
my $host = $ENV{SYBASE_HOST} || "localhost";
 
43
my $db   = $ENV{SYBASE_DB}   || "master";
 
44
 
 
45
$ENV{SYBASE} = $ENV{SYBASE}  || "/usr/local/sybase";
 
46
 
 
47
my $dbh = DBI->connect ("dbi:Sybase:$db;host=$host", $user, $pass);
 
48
 
 
49
if (!$dbh) 
 
50
{
 
51
        die "Could not run DBI::connect\n";
 
52
}
 
53
 
 
54
my $databases = &list_dbs ($dbh);
 
55
 
 
56
if (exists $ARGV[0] and $ARGV[0] =~ /^config$/)
 
57
{
 
58
        print "host_name sybase-i.fileflow.com\n";
 
59
        print "graph_title Sybase database space usage\n";
 
60
        print "graph_args -u 100 -l 0\n";
 
61
        print "graph_vlabel %\n";
 
62
 
 
63
        foreach my $db (keys %{$databases})
 
64
        {
 
65
                print "$db.label $db\n";
 
66
                print "$db.type GAUGE\n";
 
67
                print "$db.warning 85\n";
 
68
                print "$db.critical 95\n";
 
69
        }
 
70
        exit 0;
 
71
}
 
72
 
 
73
my $db_info;
 
74
 
 
75
foreach my $db (keys %{$databases})
 
76
{
 
77
        $db_info = &space_db ($dbh, $db, $db_info);
 
78
}
 
79
 
 
80
foreach my $db (keys %{$db_info})
 
81
{
 
82
        #print "$db $db_info->{$db}->{used} / $db_info->{$db}->{total} = ", $db_info->{$db}->{used}*100/$db_info->{$db}->{total}, ".\n";
 
83
        print "$db.value ", $db_info->{$db}->{used}*100/$db_info->{$db}->{total}, "\n";
 
84
}
 
85
 
 
86
1;
 
87
 
 
88
sub list_dbs
 
89
{
 
90
        my $h   = shift;
 
91
        my $dbs = undef;
 
92
 
 
93
        if (! $h->do ("use master"))
 
94
        {
 
95
                die "Error: could not \"use master\"...\n";
 
96
        }
 
97
        my $sth = $dbh->prepare ("select name from sysdatabases");
 
98
        my $rv  = $sth->execute;
 
99
        if (! $rv)
 
100
        {
 
101
                die "Error: could not run \"select name from sysdatabases\"...\n";
 
102
        }
 
103
 
 
104
        $dbs = $sth->fetchall_hashref ("name");
 
105
 
 
106
        return $dbs;
 
107
}
 
108
 
 
109
sub space_db
 
110
{
 
111
        my $h   = shift;
 
112
        my $db  = shift;
 
113
        my $dbs = shift;
 
114
 
 
115
        if (! $h->do ("use $db"))
 
116
        {
 
117
                die "Error: could not \"use $db\"...\n";
 
118
        }
 
119
        my $sth = $dbh->prepare ("sp_spaceused");
 
120
        my $rv  = $sth->execute;
 
121
 
 
122
        if (! $rv)
 
123
        {
 
124
                die "Error: could not use \"sp_spaceused\"...\n";
 
125
        }
 
126
 
 
127
        do {
 
128
                while (my $d = $sth->fetchrow_arrayref)
 
129
                {
 
130
                        #print join ('|',@{$d}), "...\n";
 
131
                        if ($d->[0] =~ /^$db$/)
 
132
                        {
 
133
                                $dbs->{$db}->{total} = &bytes ($d->[1]);
 
134
                        }
 
135
                        elsif (!$d->[0])
 
136
                        {
 
137
                                next;
 
138
                        }
 
139
                        else
 
140
                        {
 
141
                                $dbs->{$db}->{used} = &bytes ($d->[0]);
 
142
                        }
 
143
                }
 
144
        } while ($sth->{syb_more_results});
 
145
 
 
146
        return $dbs;
 
147
}
 
148
 
 
149
sub bytes
 
150
{
 
151
        my $val = shift;
 
152
 
 
153
        if ($val =~ /^\s*([\d\.]+)\s*kb\s*$/i)
 
154
        {
 
155
                $val = $1*1024;
 
156
        }
 
157
        elsif ($val =~ /^\s*([\d\.]+)\s*mb\s*$/i)
 
158
        {
 
159
                $val = $1*1024*1024;
 
160
        }
 
161
        elsif ($val =~ /^\s*([\d\.]+)\s*gb\s*$/i)
 
162
        {
 
163
                $val = $1*1024*1024*1024;
 
164
        }
 
165
        return $val;
 
166
}
 
167
 
 
168
 
 
169
# vim:syntax=perl