jobqueue: use more sensible metric key names
authorOri Livneh <ori@wikimedia.org>
Mon, 15 Jun 2015 05:31:13 +0000 (22:31 -0700)
committerOri Livneh <ori@wikimedia.org>
Mon, 15 Jun 2015 05:38:02 +0000 (22:38 -0700)
* 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
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php

index 1cf1b4b..b4a2184 100644 (file)
@@ -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 );
        }
 
index 3dc36bd..d1e4a13 100644 (file)
@@ -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__ );
index 0f7ab19..e021d99 100644 (file)
@@ -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 );
index efc36cc..77c4238 100644 (file)
@@ -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