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 boolean */ 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; } }