1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
package DBD::MySQL::Server::Instance::MyISAM;
use strict;
our _æ_ ISA = qw(DBD::MySQL::Server::Instance);
my %ERRORS=( OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 );
my %ERRORCODES=( 0 => 'OK', 1 => 'WARNING', 2 => 'CRITICAL', 3 => 'UNKNOWN' );
sub new {
my $class = shift;
my %params = _æ_ _;
my $self = {
handle => $params{handle},
internals => undef,
warningrange => $params{warningrange},
criticalrange => $params{criticalrange},
};
bless $self, $class;
$self->init(%params);
return $self;
}
sub init {
my $self = shift;
my %params = _æ_ _;
$self->init_nagios();
if ($params{mode} =~ /server::instance::myisam/) {
$self->{internals} =
DBD::MySQL::Server::Instance::MyISAM::Internals->new(%params);
}
}
sub nagios {
my $self = shift;
my %params = _æ_ _;
if ($params{mode} =~ /server::instance::myisam/) {
$self->{internals}->nagios(%params);
$self->merge_nagios($self->{internals});
}
}
package DBD::MySQL::Server::Instance::MyISAM::Internals;
use strict;
our _æ_ ISA = qw(DBD::MySQL::Server::Instance::MyISAM);
our $internals; # singleton, nur ein einziges mal instantiierbar
sub new {
my $class = shift;
my %params = _æ_ _;
unless ($internals) {
$internals = {
handle => $params{handle},
keycache_hitrate => undef,
warningrange => $params{warningrange},
criticalrange => $params{criticalrange},
};
bless($internals, $class);
$internals->init(%params);
}
return($internals);
}
sub init {
my $self = shift;
my %params = _æ_ _;
my $dummy;
$self->debug("enter init");
$self->init_nagios();
if ($params{mode} =~ /server::instance::myisam::keycache::hitrate/) {
($dummy, $self->{key_reads})
= $self->{handle}->fetchrow_array(q{
SHOW /*!50000 global */ STATUS LIKE 'Key_reads'
});
($dummy, $self->{key_read_requests})
= $self->{handle}->fetchrow_array(q{
SHOW /*!50000 global */ STATUS LIKE 'Key_read_requests'
});
if (! defined $self->{key_read_requests}) {
$self->add_nagios_critical("no myisam keycache info available");
} else {
$self->valdiff(\%params, qw(key_reads key_read_requests));
$self->{keycache_hitrate} =
$self->{key_read_requests} > 0 ?
100 - (100 * $self->{key_reads} /
$self->{key_read_requests}) : 100;
$self->{keycache_hitrate_now} =
$self->{delta_key_read_requests} > 0 ?
100 - (100 * $self->{delta_key_reads} /
$self->{delta_key_read_requests}) : 100;
}
} elsif ($params{mode} =~ /server::instance::myisam::sonstnochwas/) {
}
}
sub nagios {
my $self = shift;
my %params = _æ_ _;
if (! $self->{nagios_level}) {
if ($params{mode} =~ /server::instance::myisam::keycache::hitrate/) {
my $refkey = 'keycache_hitrate'.($params{lookback} ? '_now' : '');
$self->add_nagios(
$self->check_thresholds($self->{$refkey}, "99:", "95:"),
sprintf "myisam keycache hitrate at %.2f%%", $self->{$refkey});
$self->add_perfdata(sprintf "keycache_hitrate=%.2f%%;%s;%s",
$self->{keycache_hitrate},
$self->{warningrange}, $self->{criticalrange});
$self->add_perfdata(sprintf "keycache_hitrate_now=%.2f%%;%s;%s",
$self->{keycache_hitrate_now},
$self->{warningrange}, $self->{criticalrange});
}
}
}
1;
|