tags = [ SAMPLER_TYPE_TAG_KEY => SAMPLER_TYPE_PROBABILISTIC, SAMPLER_PARAM_TAG_KEY => $rate, ]; if ($rate < 0.0 || $rate > 1.0) { throw new OutOfBoundsException('Sampling rate must be between 0.0 and 1.0.'); } $this->rate = $rate; if ($rate < 0.5) { $this->boundary = (int)($rate * PHP_INT_MAX); } else { // more precise calculation due to int and float having different precision near PHP_INT_MAX $this->boundary = PHP_INT_MAX - (int)((1 - $rate) * PHP_INT_MAX); } } /** * {@inheritdoc} * * @param string $traceId The traceId on the span. * @param string $operation The operation name set on the span. * @return array */ public function isSampled(string $traceId, string $operation = ''): array { return [($traceId < $this->boundary), $this->tags]; } /** * {@inheritdoc} * * Only implemented to satisfy the sampler interface. * * @return void */ public function close() { // nothing to do } }