#!@@PERL@@ # -*- cperl -*- # # Copyright (C) 2010 Magnus Hagander, Redpill Linpro AB # # 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; version 2 dated June, # 1991. # # This program 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA. =head1 NAME postgres_oldest_prepared_xact_ - Plugin to monitor age of the oldest prepared transaction in PostgreSQL. =head1 CONFIGURATION Configuration is done through libpq environment variables, for example PGUSER, PGDATABASE, etc. For more information, see L. To monitor a specific database, link to postgres_oldest_prepared_xact_. To monitor all databases, link to postgres_oldest_prepared_xact_ALL. =head1 SEE ALSO L =head1 MAGIC MARKERS #%# family=auto #%# capabilities=autoconf suggest =head1 AUTHOR Magnus Hagander , Redpill Linpro AB =head1 COPYRIGHT/License. Copyright (c) 2010 Magnus Hagander, Redpill Linpro AB All rights reserved. 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; version 2 dated June, 1991. =cut use strict; use warnings; use Munin::Plugin::Pgsql; my $pg = Munin::Plugin::Pgsql->new( basename => 'postgres_oldest_prepared_xact_', title => 'PostgreSQL oldest prepared transaction', info => 'Prepared transaction age', vlabel => 'Age (seconds)', minversion => '8.1', basequery => "SELECT database, COALESCE(max(extract(epoch FROM CURRENT_TIMESTAMP-prepared)),0) FROM pg_prepared_xacts JOIN pg_database ON datname=database %%FILTER%% GROUP BY database ORDER BY 1", wildcardfilter => "WHERE datname=?", paramdatabase => 1, configquery => "SELECT datname,datname FROM pg_database %%FILTER%% ORDER BY 1", suggestquery => "SELECT 'ALL'", autoconfquery => "SELECT (setting::integer > 0),'Prepared transactions not enabled' FROM pg_settings WHERE name='max_prepared_transactions'", ); $pg->Process();