From 427bdb6dbd78e469bdd15f33f9c742b0cc460e61 Mon Sep 17 00:00:00 2001 From: Ori Livneh Date: Sun, 14 Jun 2015 22:31:13 -0700 Subject: [PATCH] jobqueue: use more sensible metric key names * Since JobQueue metrics are qualified with 'jobqueue.', don't add a 'job-' prefix to each metric. * Separate the key from the job type with a dot rather than a dash. * To avoid having a Graphite node that is both a "directory" and a metric, use '.all' as a suffix for aggregates. Change-Id: I2ac604d3c042dbfb0b3a27759800f435ec22041e --- includes/jobqueue/JobQueue.php | 4 ++-- includes/jobqueue/JobQueueDB.php | 14 ++++++-------- includes/jobqueue/JobQueueRedis.php | 4 ++-- includes/jobqueue/JobRunner.php | 10 ++++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php index 1cf1b4b577..b4a2184add 100644 --- a/includes/jobqueue/JobQueue.php +++ b/includes/jobqueue/JobQueue.php @@ -365,7 +365,7 @@ abstract class JobQueue { // Flag this job as an old duplicate based on its "root" job... try { if ( $job && $this->isRootJobOldDuplicate( $job ) ) { - JobQueue::incrStats( 'job-pop-duplicate', $this->type ); + JobQueue::incrStats( 'dupe_pops', $this->type ); $job = DuplicateJob::newFromJob( $job ); // convert to a no-op } } catch ( Exception $e ) { @@ -687,7 +687,7 @@ abstract class JobQueue { if ( !$stats ) { $stats = RequestContext::getMain()->getStats(); } - $stats->updateCount( "jobqueue.{$key}", $delta ); + $stats->updateCount( "jobqueue.{$key}.all", $delta ); $stats->updateCount( "jobqueue.{$key}.{$type}", $delta ); } diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php index 3dc36bd58b..d1e4a135bd 100644 --- a/includes/jobqueue/JobQueueDB.php +++ b/includes/jobqueue/JobQueueDB.php @@ -245,10 +245,8 @@ class JobQueueDB extends JobQueue { foreach ( array_chunk( $rows, 50 ) as $rowBatch ) { $dbw->insert( 'job', $rowBatch, $method ); } - JobQueue::incrStats( 'job-insert', $this->type, count( $rows ) ); - JobQueue::incrStats( - 'job-insert-duplicate', - $this->type, + JobQueue::incrStats( 'inserts', $this->type, count( $rows ) ); + JobQueue::incrStats( 'dupe_inserts', $this->type, count( $rowSet ) + count( $rowList ) - count( $rows ) ); } catch ( DBError $e ) { @@ -293,7 +291,7 @@ class JobQueueDB extends JobQueue { if ( !$row ) { break; // nothing to do } - JobQueue::incrStats( 'job-pop', $this->type ); + JobQueue::incrStats( 'pops', $this->type ); // Get the job object from the row... $title = Title::makeTitle( $row->job_namespace, $row->job_title ); $job = Job::factory( $row->job_cmd, $title, @@ -479,7 +477,7 @@ class JobQueueDB extends JobQueue { $dbw->delete( 'job', array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ ); - JobQueue::incrStats( 'job-ack', $this->type ); + JobQueue::incrStats( 'acks', $this->type ); } catch ( DBError $e ) { $this->throwDBException( $e ); } @@ -679,7 +677,7 @@ class JobQueueDB extends JobQueue { ); $affected = $dbw->affectedRows(); $count += $affected; - JobQueue::incrStats( 'job-recycle', $this->type, $affected ); + JobQueue::incrStats( 'recycles', $this->type, $affected ); $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type ); } } @@ -706,7 +704,7 @@ class JobQueueDB extends JobQueue { $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ ); $affected = $dbw->affectedRows(); $count += $affected; - JobQueue::incrStats( 'job-abandon', $this->type, $affected ); + JobQueue::incrStats( 'abandons', $this->type, $affected ); } $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ ); diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php index 0f7ab19e47..e021d99b4d 100644 --- a/includes/jobqueue/JobQueueRedis.php +++ b/includes/jobqueue/JobQueueRedis.php @@ -223,8 +223,8 @@ class JobQueueRedis extends JobQueue { throw new RedisException( "Could not insert {$failed} {$this->type} job(s)." ); } - JobQueue::incrStats( 'job-insert', $this->type, count( $items ) ); - JobQueue::incrStats( 'job-insert-duplicate', $this->type, + JobQueue::incrStats( 'inserts', $this->type, count( $items ) ); + JobQueue::incrStats( 'dupe_inserts', $this->type, count( $items ) - $failed - $pushed ); } catch ( RedisException $e ) { $this->throwRedisException( $conn, $e ); diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php index efc36cc4c3..77c42380a1 100644 --- a/includes/jobqueue/JobRunner.php +++ b/includes/jobqueue/JobRunner.php @@ -126,7 +126,7 @@ class JobRunner implements LoggerAwareInterface { } $group = JobQueueGroup::singleton(); - + // Flush any pending DB writes for sanity wfGetLBFactory()->commitAll(); @@ -199,10 +199,12 @@ class JobRunner implements LoggerAwareInterface { $timeMsTotal += $timeMs; $profiler->scopedProfileOut( $psection ); - if ( $job->getQueuedTimestamp() ) { + $queuedTs = $job->getQueuedTimestamp(); + if ( $queuedTs ) { // Record time to run for the job type - $stats->timing( "job-pickuptime-$jType", - $popTime - $job->getQueuedTimestamp() ); + $pickupDelay = $popTime - $queuedTs; + $stats->timing( 'jobqueue.pickup_delay.all', $queuedTs ); + $stats->timing( "jobqueue.pickup_delay.$jType", $queuedTs ); } // Mark the job as done on success or when the job cannot be retried -- 2.20.1