MediaWiki  master
BufferingStatsdDataFactory.php
Go to the documentation of this file.
1 <?php
26 
35 class BufferingStatsdDataFactory extends StatsdDataFactory implements IBufferingStatsdDataFactory {
36  protected $buffer = [];
41  protected $enabled = true;
45  private $prefix;
46 
47  public function __construct( $prefix ) {
48  parent::__construct();
49  $this->prefix = $prefix;
50  }
51 
63  private static function normalizeMetricKey( $key ) {
64  $key = preg_replace( '/[:.]+/', '.', $key );
65  $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key );
66  $key = trim( $key, '_.' );
67  return str_replace( [ '._', '_.' ], '.', $key );
68  }
69 
70  public function produceStatsdData(
71  $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT
72  ) {
73  $entity = $this->produceStatsdDataEntity();
74  if ( !$this->enabled ) {
75  return $entity;
76  }
77  if ( $key !== null ) {
78  $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" );
79  $entity->setKey( $key );
80  }
81  if ( $value !== null ) {
82  $entity->setValue( $value );
83  }
84  if ( $metric !== null ) {
85  $entity->setMetric( $metric );
86  }
87  // Don't bother buffering a counter update with a delta of zero.
88  if ( !( $metric === StatsdDataInterface::STATSD_METRIC_COUNT && !$value ) ) {
89  $this->buffer[] = $entity;
90  }
91  return $entity;
92  }
93 
94  public function hasData() {
95  return !empty( $this->buffer );
96  }
97 
102  public function getData() {
103  return $this->buffer;
104  }
105 
106  public function clearData() {
107  $this->buffer = [];
108  }
109 
110  public function getDataCount() {
111  return count( $this->buffer );
112  }
113 
114  public function setEnabled( $enabled ) {
115  $this->enabled = $enabled;
116  }
117 }
A factory for application metric data.
hasData()
Check whether this data factory has any buffered data.
getDataCount()
Return the number of buffered statsd data entries.
produceStatsdData( $key, $value=1, $metric=StatsdDataInterface::STATSD_METRIC_COUNT)
setEnabled( $enabled)
Set collection enable status.
static normalizeMetricKey( $key)
Normalize a metric key for StatsD.
clearData()
Clear all buffered data from the factory.