Projet

Général

Profil

Révision b847893c

IDb847893ca19414c6951923033a5d262e07234a62
Parent 01f45be5
Enfant ed606750

Ajouté par Guillaume Blairon il y a presque 14 ans

Initial version

Voir les différences:

plugins/other/mogilefsd_activity
1
#!/usr/bin/perl -w
2
#
3
# Copyright (C) 2007 Guillaume Blairon
4
#
5
# This program is free software; you can redistribute it and/or
6
# modify it under the terms of the GNU General Public License
7
# as published by the Free Software Foundation; version 2 dated June,
8
# 1991.
9
#
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
#
19
#
20
#
21
# Script to monitor MogileFS tracker activity.
22
# Mostly an adaptation of Jimmy Olsen's squid_cache script.
23
#
24
# Usage:
25
#    ln -s /usr/share/munin/plugins/mogilefsd_activity \
26
#       /etc/munin/plugins/
27
# 
28
# Configuration variables:
29
#
30
#    host (default: '127.0.0.1')
31
#    port (default: '6001')
32
#
33
# Parameters:
34
#
35
#    config    (required)
36
#    autoconf  (optional - only used by munin-config)
37
#
38
#%# family=auto
39
#%# capabilities=autoconf
40

  
41
my $ret = undef;
42

  
43
my $DEBUG = 0;
44
my @known_states=qw(pending_queries processing_queries bored_queryworkers);
45

  
46
if (! eval "require IO::Socket;")
47
{
48
        $ret = "IO::Socket not found";
49
}
50

  
51
$mogilefsd_host = $ENV{host} || "127.0.0.1";
52
$mogilefsd_port = $ENV{port} || 6001;
53

  
54
if($ARGV[0] and $ARGV[0] eq "autoconf") {
55
    &autoconf($mogilefsd_host, $mogilefsd_port);
56
}
57

  
58
sub autoconf {
59
    my ($host, $port) = @_;
60

  
61
    if ($ret)
62
    {
63
        print "no ($ret)\n";
64
        exit 1;
65
    }
66

  
67
    my $conn = IO::Socket::INET->new(PeerAddr => $host,
68
                                        PeerPort => $port,
69
                                        Proto    => 'tcp',
70
                                        Timeout  => 5) or die($!);
71

  
72
    if (!$conn)
73
    {
74
        print "no (could not connect: $!)\n";
75
        exit 1;
76
    }
77

  
78
    my $request = "!stats\n";
79

  
80
    $conn->syswrite($request, length($request));
81

  
82
    my @lines = qw();
83
    while (my $line = $conn->getline) {
84
        if ($line =~ /^\./) {
85
            last;
86
        }
87
        push(@lines, $line);
88
    }
89
    close($conn);
90

  
91
    print "yes\n";
92
    exit 0;
93
}
94

  
95

  
96
sub query_mogilefsd {
97
    my ($host, $port) = @_;
98

  
99
    my $conn = IO::Socket::INET->new(PeerAddr => $host,
100
                                        PeerPort => $port,
101
                                        Proto    => 'tcp') or die($!);
102

  
103
    my $request = "!stats\n";
104

  
105
    $conn->syswrite("$request", length("$request"));
106

  
107
    my @lines = qw();
108
    while (my $line = $conn->getline) {
109
        if ($line =~ /^\./) {
110
            last;
111
        }
112
        push(@lines, $line);
113
    }
114
    close($conn);
115

  
116
    for(my $i = 0; $i <= $#lines; $i++) {
117
        if($lines[$i] =~ /^([^\s]*)\s(\d+)/) {
118
            $states{"$1"} = "$2";
119
        }
120
    }
121
    keys %states;
122
}
123

  
124
if($ARGV[0] and $ARGV[0] eq "config") {
125

  
126
    print "graph_title MogileFS tracker activity\n";
127
    print "graph_vlabel processes\n";
128
    print "graph_args -l 0\n";
129
    print "graph_category MogileFS\n";
130
    print "bored_queryworkers.label bored_queryworkers\n";
131
    print "bored_queryworkers.draw AREA\n";
132
    print "processing_queries.label processing_queries\n";
133
    print "processing_queries.draw STACK\n";
134
    print "pending_queries.label pending_queries\n";
135
    print "pending_queries.draw STACK\n";
136

  
137
    exit 0;
138
}   
139
    
140
print %states;
141
        
142
&query_mogilefsd($mogilefsd_host, $mogilefsd_port);
143

  
144
foreach $key (@known_states) {
145
        print "$key.value ";
146
        if (exists $states{$key}) {
147
            print $states{$key}, "\n";
148
        } else {
149
            print "0\n";
150
        }
151
}

Formats disponibles : Unified diff