diff --git a/src/lib/Hydra/Controller/Job.pm b/src/lib/Hydra/Controller/Job.pm index 1147bc76..ba51616d 100644 --- a/src/lib/Hydra/Controller/Job.pm +++ b/src/lib/Hydra/Controller/Job.pm @@ -6,7 +6,7 @@ use warnings; use base 'Hydra::Base::Controller::ListBuilds'; use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; - +use Net::Prometheus; sub job : Chained('/') PathPart('job') CaptureArgs(3) { my ($self, $c, $projectName, $jobsetName, $jobName) = @_; @@ -29,6 +29,41 @@ sub job : Chained('/') PathPart('job') CaptureArgs(3) { $c->stash->{project} = $c->stash->{job}->project; } +sub prometheus : Chained('job') PathPart('prometheus') Args(0) { + my ($self, $c) = @_; + my $job = $c->stash->{job}; + my $prometheus = Net::Prometheus->new; + + my $lastBuild = $job->builds->find( + { finished => 1 }, + { order_by => 'id DESC', rows => 1, columns => [@buildListColumns] } + ); + + $prometheus->new_counter( + name => "hydra_job_completion_time", + help => "The most recent job's completion time", + labels => [ "project", "jobset", "job", "nixname" ] + )->labels( + $c->stash->{project}->name, + $c->stash->{jobset}->name, + $c->stash->{job}->name, + $lastBuild->nixname, + )->inc($lastBuild->stoptime); + + $prometheus->new_gauge( + name => "hydra_job_failed", + help => "Record if the most recent version of this job failed (1 means failed)", + labels => [ "project", "jobset", "job", "nixname" ] + )->labels( + $c->stash->{project}->name, + $c->stash->{jobset}->name, + $c->stash->{job}->name, + $lastBuild->nixname, + )->inc($lastBuild->stoptime >= 0); + + $c->stash->{'plain'} = { data => $prometheus->render }; + $c->forward('Hydra::View::Plain'); +} sub overview : Chained('job') PathPart('') Args(0) { my ($self, $c) = @_; diff --git a/src/script/hydra-send-stats b/src/script/hydra-send-stats index 50872c1a..2b8c550b 100755 --- a/src/script/hydra-send-stats +++ b/src/script/hydra-send-stats @@ -56,12 +56,6 @@ sub sendQueueRunnerStats { gauge("hydra.queue.machines.total", scalar(grep { $_->{enabled} } (values %{$json->{machines}}))); gauge("hydra.queue.machines.in_use", scalar(grep { $_->{currentJobs} > 0 } (values %{$json->{machines}}))); - gauge("hydra.queue.notification.time_avg_ms", $json->{nrNotificationTimeAvgMs}); - gauge("hydra.queue.notification.time_ms", $json->{nrNotificationTimeMs}); - gauge("hydra.queue.notification.done", $json->{nrNotificationsDone}); - gauge("hydra.queue.notification.failed", $json->{nrNotificationsFailed}); - gauge("hydra.queue.notification.in_progress", $json->{nrNotificationsInProgress}); - gauge("hydra.queue.notification.pending", $json->{nrNotificationsPending}); } while (1) {