Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
PostgresReplayLag.pm 1.38 KiB
package Core::PostgresReplayLag;

use strict;
use warnings;

use base 'Resmon::Module';

use Time::Local;

=pod

=head1 NAME

Core::PostgresReplayLag - Monitor postgres replay lag

=head1 SYNOPSIS

 Core::PostgresReplayLag {
    pg : logdir => /data/set/foo/pgdata/82/pg_log
 }

=head1 DESCRIPTION

This module monitors how long it's been since a postgres replay log was
restored.

=head1 CONFIGURATION

=over

=item check_name

The check name is descriptive only in this check. It is not used for anything.

=item logdir

Postgres log directory

=back

=head1 METRICS

=over

=item lag

The number of seconds since the last restore.

=back

=cut

sub handler {
    my $self = shift;
    my $config = $self->{config}; # All configuration is in here

    opendir(my $dh, $config->{logdir});
    my @files = sort grep /^postgresql-[\d-]+_?\d*\.log$/, readdir($dh);
    closedir($dh);
    my $wallog = $files[-1];

    open(my $fh, "<", "$config->{logdir}/$wallog");
    my @lines = grep(/LOG:  restored log file/, <$fh>);
    close($fh);

    if ($#lines < 0) {
        return { "error" => ["Nothing restored", "s"] }
    }

    my ($year,$month,$day,$hour,$min) = (