X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/libs/stats/BufferingStatsdDataFactory.php diff --git a/includes/libs/stats/BufferingStatsdDataFactory.php b/includes/libs/stats/BufferingStatsdDataFactory.php new file mode 100644 index 00000000..d75d9c0b --- /dev/null +++ b/includes/libs/stats/BufferingStatsdDataFactory.php @@ -0,0 +1,126 @@ +prefix = $prefix; + } + + /** + * 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 + * @return string + */ + private static function normalizeMetricKey( $key ) { + $key = preg_replace( '/[:.]+/', '.', $key ); + $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key ); + $key = trim( $key, '_.' ); + return str_replace( [ '._', '_.' ], '.', $key ); + } + + public function produceStatsdData( + $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT + ) { + $entity = $this->produceStatsdDataEntity(); + if ( !$this->enabled ) { + return $entity; + } + if ( $key !== null ) { + $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" ); + $entity->setKey( $key ); + } + if ( $value !== null ) { + $entity->setValue( $value ); + } + 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; + } + + /** + * @deprecated Use getData() + * @return StatsdData[] + */ + public function getBuffer() { + return $this->buffer; + } + + /** + * Check whether this data factory has any data. + * @return bool + */ + public function hasData() { + return !empty( $this->buffer ); + } + + /** + * Return data from the factory. + * @return StatsdData[] + */ + public function getData() { + return $this->buffer; + } + + /** + * Set collection enable status. + * @param bool $enabled Will collection be enabled? + * @return void + */ + public function setEnabled( $enabled ) { + $this->enabled = $enabled; + } +}