for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace TechDeCo\ElasticApmAgent\Message;
use JsonSerializable;
use TechDeCo\ElasticApmAgent\Serialization;
use function array_merge;
final class Span implements JsonSerializable
{
/**
* @var int|null
*/
private $id;
* @var mixed[]
private $context = [];
* @var float
private $duration;
* @var string
private $name;
private $parentId;
* @var StackTraceFrame[]
private $stackTraceFrameList = [];
private $startOffset;
private $type;
public function __construct(float $duration, string $name, float $startOffset, string $type)
$this->duration = $duration;
$this->name = $name;
$this->startOffset = $startOffset;
$this->type = $type;
}
public function withId(int $id): self
$me = clone $this;
$me->id = $id;
return $me;
* @param mixed $value
public function withContext(string $name, $value): self
$me->context[$name] = $value;
public function withParent(Span $parent): self
$me->parentId = $parent->id;
public function withStackTraceFrame(StackTraceFrame ...$frame): self
$me->stackTraceFrameList = array_merge($me->stackTraceFrameList, $frame);
* @return mixed[]
public function jsonSerialize(): array
return Serialization::filterUnset([
'id' => $this->id,
'context' => $this->context,
'duration' => $this->duration,
'name' => $this->name,
'parent' => $this->parentId,
'stacktrace' => Serialization::serialize(...$this->stackTraceFrameList),
'start' => $this->startOffset,
'type' => $this->type,
]);