summaryrefslogtreecommitdiff
path: root/includes/libs/BufferingStatsdDataFactory.php
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:32:59 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:32:59 -0400
commit6dc1997577fab2c366781fd7048144935afa0012 (patch)
tree8918d28c7ab4342f0738985e37af1dfc42d0e93a /includes/libs/BufferingStatsdDataFactory.php
parent150f94f051128f367bc89f6b7e5f57eb2a69fc62 (diff)
parentfa89acd685cb09cdbe1c64cbb721ec64975bbbc1 (diff)
Merge commit 'fa89acd'
# Conflicts: # .gitignore # extensions/ArchInterWiki.sql
Diffstat (limited to 'includes/libs/BufferingStatsdDataFactory.php')
-rw-r--r--includes/libs/BufferingStatsdDataFactory.php34
1 files changed, 30 insertions, 4 deletions
diff --git a/includes/libs/BufferingStatsdDataFactory.php b/includes/libs/BufferingStatsdDataFactory.php
index ea5b09dc..100d2a4e 100644
--- a/includes/libs/BufferingStatsdDataFactory.php
+++ b/includes/libs/BufferingStatsdDataFactory.php
@@ -20,6 +20,8 @@
* @file
*/
+use Liuggio\StatsdClient\Entity\StatsdData;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
use Liuggio\StatsdClient\Factory\StatsdDataFactory;
/**
@@ -38,11 +40,28 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
$this->prefix = $prefix;
}
- public function produceStatsdData( $key, $value = 1, $metric = self::STATSD_METRIC_COUNT ) {
- $this->buffer[] = $entity = $this->produceStatsdDataEntity();
+ /**
+ * Normalize a metric key for StatsD
+ *
+ * Replace occurences of '::' with dots and any other non-alphanumeric
+ * characters with underscores. Combine runs of dots or underscores.
+ * Then trim leading or trailing dots or underscores.
+ *
+ * @param string $key
+ * @since 1.26
+ */
+ private static function normalizeMetricKey( $key ) {
+ $key = preg_replace( '/[:.]+/', '.', $key );
+ $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key );
+ $key = trim( $key, '_.' );
+ return str_replace( array( '._', '_.' ), '.', $key );
+ }
+
+ public function produceStatsdData( $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT ) {
+ $entity = $this->produceStatsdDataEntity();
if ( $key !== null ) {
- $prefixedKey = ltrim( $this->prefix . '.' . $key, '.' );
- $entity->setKey( $prefixedKey );
+ $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" );
+ $entity->setKey( $key );
}
if ( $value !== null ) {
$entity->setValue( $value );
@@ -50,9 +69,16 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
if ( $metric !== null ) {
$entity->setMetric( $metric );
}
+ // Don't bother buffering a counter update with a delta of zero.
+ if ( !( $metric === StatsdDataInterface::STATSD_METRIC_COUNT && !$value ) ) {
+ $this->buffer[] = $entity;
+ }
return $entity;
}
+ /**
+ * @return StatsdData[]
+ */
public function getBuffer() {
return $this->buffer;
}