App-Netdisco

 view release on metacpan or  search on metacpan

lib/App/Netdisco/Web/Health.pm  view on Meta::CPAN

package App::Netdisco::Web::Health;

use Dancer ':syntax';
use Dancer::Plugin::DBIC;

use Try::Tiny;

if (my $path = setting('health_path')) {
  get $path => sub {
    content_type 'application/json';

    my $db_ok = try {
      schema('netdisco')->storage->dbh->ping;
      1;
    } catch { 0 };

    my @backends = try {
      schema('netdisco')->resultset('DeviceSkip')
        ->search({ device => '255.255.255.255' })->hri->all;
    } catch { () };

    my $num_backends = scalar @backends;
    my $tot_workers  = 0;
    $tot_workers += $_->{deferrals} for @backends;

    my $status = $db_ok ? 'ok' : 'degraded';
    status( $db_ok ? 200 : 503 );

    return to_json {
      status   => $status,
      db       => ($db_ok ? 'ok' : 'error'),
      backends => $num_backends,
      workers  => $tot_workers,
    };
  };
}

true;



( run in 0.583 second using v1.01-cache-2.11-cpan-39bf76dae61 )