summaryrefslogtreecommitdiffstats
path: root/heartbeat.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'heartbeat.cgi')
-rw-r--r--heartbeat.cgi45
1 files changed, 45 insertions, 0 deletions
diff --git a/heartbeat.cgi b/heartbeat.cgi
new file mode 100644
index 000000000..47f3d59a2
--- /dev/null
+++ b/heartbeat.cgi
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -T
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+use 5.10.1;
+use strict;
+use warnings;
+
+use lib qw(. lib local/lib/perl5);
+
+use Bugzilla;
+use Bugzilla::Constants;
+use Bugzilla::Error;
+use Bugzilla::Update;
+
+my $ok = eval {
+ # Ensure that any Throw*Error calls just use die, rather than trying to return html...
+ Bugzilla->error_mode(ERROR_MODE_DIE);
+ my $memcached = Bugzilla->memcached;
+ my $dbh = Bugzilla->dbh;
+ my $database_ok = $dbh->ping;
+ my $versions = $memcached->{memcached}->server_versions;
+ my $memcached_ok = keys %$versions;
+
+ die "database not available" unless $database_ok;
+ die "memcached server(s) not available" unless $memcached_ok;
+ die "mod_perl not configured?" unless $ENV{MOD_PERL};
+ 1;
+};
+warn "heartbeat error: $@" if !$ok && $@;
+
+my $cgi = Bugzilla->cgi;
+print $cgi->header(-type => 'text/plain', -status => $ok ? '200 OK' : '500 Internal Server Error');
+print $ok ? "Bugzilla OK\n" : "Bugzilla NOT OK\n";
+
+if ($ENV{MOD_PERL}) {
+ my $r = $cgi->r;
+ # doing this supresses the error document, but does not change the http response code.
+ $r->rflush;
+ $r->status(200);
+}