Viewing file: Breadcrumb.php (7.82 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace Sentry;
use Sentry\Exception\InvalidArgumentException;
/** * This class stores all the information about a breadcrumb. * * @author Stefano Arlandini <sarlandini@alice.it> */ final class Breadcrumb { /** * This constant defines the default breadcrumb type. */ public const TYPE_DEFAULT = 'default';
/** * This constant defines the http breadcrumb type. */ public const TYPE_HTTP = 'http';
/** * This constant defines the user breadcrumb type. */ public const TYPE_USER = 'user';
/** * This constant defines the navigation breadcrumb type. */ public const TYPE_NAVIGATION = 'navigation';
/** * This constant defines the error breadcrumb type. */ public const TYPE_ERROR = 'error';
/** * This constant defines the debug level for a breadcrumb. */ public const LEVEL_DEBUG = 'debug';
/** * This constant defines the info level for a breadcrumb. */ public const LEVEL_INFO = 'info';
/** * This constant defines the warning level for a breadcrumb. */ public const LEVEL_WARNING = 'warning';
/** * This constant defines the error level for a breadcrumb. */ public const LEVEL_ERROR = 'error';
/** * This constant defines the fatal level for a breadcrumb. */ public const LEVEL_FATAL = 'fatal';
/** * This constant defines the list of values allowed to be set as severity * level of the breadcrumb. */ private const ALLOWED_LEVELS = [ self::LEVEL_DEBUG, self::LEVEL_INFO, self::LEVEL_WARNING, self::LEVEL_ERROR, self::LEVEL_FATAL, ];
/** * @var string The category of the breadcrumb */ private $category;
/** * @var string The type of breadcrumb */ private $type;
/** * @var string|null The message of the breadcrumb */ private $message;
/** * @var string The level of the breadcrumb */ private $level;
/** * @var array<string, mixed> The meta data of the breadcrumb */ private $metadata;
/** * @var float The timestamp of the breadcrumb */ private $timestamp;
/** * Constructor. * * @param string $level The error level of the breadcrumb * @param string $type The type of the breadcrumb * @param string $category The category of the breadcrumb * @param string|null $message Optional text message * @param array<string, mixed> $metadata Additional information about the breadcrumb * @param float|null $timestamp Optional timestamp of the breadcrumb */ public function __construct(string $level, string $type, string $category, ?string $message = null, array $metadata = [], ?float $timestamp = null) { if (!\in_array($level, self::ALLOWED_LEVELS, true)) { throw new InvalidArgumentException('The value of the $level argument must be one of the Breadcrumb::LEVEL_* constants.'); }
$this->type = $type; $this->level = $level; $this->category = $category; $this->message = $message; $this->metadata = $metadata; $this->timestamp = $timestamp ?? microtime(true); }
/** * Gets the breadcrumb type. */ public function getType(): string { return $this->type; }
/** * Sets the type of the breadcrumb. * * @param string $type The type * * @return static */ public function withType(string $type): self { if ($type === $this->type) { return $this; }
$new = clone $this; $new->type = $type;
return $new; }
/** * Gets the breadcrumb level. */ public function getLevel(): string { return $this->level; }
/** * Sets the error level of the breadcrumb. * * @param string $level The level * * @return static */ public function withLevel(string $level): self { if (!\in_array($level, self::ALLOWED_LEVELS, true)) { throw new InvalidArgumentException('The value of the $level argument must be one of the Breadcrumb::LEVEL_* constants.'); }
if ($level === $this->level) { return $this; }
$new = clone $this; $new->level = $level;
return $new; }
/** * Gets the breadcrumb category. */ public function getCategory(): string { return $this->category; }
/** * Sets the breadcrumb category. * * @param string $category The category * * @return static */ public function withCategory(string $category): self { if ($category === $this->category) { return $this; }
$new = clone $this; $new->category = $category;
return $new; }
/** * Gets the breadcrumb message. */ public function getMessage(): ?string { return $this->message; }
/** * Sets the breadcrumb message. * * @param string $message The message * * @return static */ public function withMessage(string $message): self { if ($message === $this->message) { return $this; }
$new = clone $this; $new->message = $message;
return $new; }
/** * Gets the breadcrumb meta data. * * @return array<string, mixed> */ public function getMetadata(): array { return $this->metadata; }
/** * Returns an instance of this class with the provided metadata, replacing * any existing values of any metadata with the same name. * * @param string $name The name of the metadata * @param mixed $value The value * * @return static */ public function withMetadata(string $name, $value): self { if (isset($this->metadata[$name]) && $value === $this->metadata[$name]) { return $this; }
$new = clone $this; $new->metadata[$name] = $value;
return $new; }
/** * Returns an instance of this class without the specified metadata * information. * * @param string $name The name of the metadata * * @return static|Breadcrumb */ public function withoutMetadata(string $name): self { if (!isset($this->metadata[$name])) { return $this; }
$new = clone $this;
unset($new->metadata[$name]);
return $new; }
/** * Gets the breadcrumb timestamp. */ public function getTimestamp(): float { return $this->timestamp; }
/** * Sets the breadcrumb timestamp. * * @param float $timestamp The timestamp * * @return static */ public function withTimestamp(float $timestamp): self { if ($timestamp === $this->timestamp) { return $this; }
$new = clone $this; $new->timestamp = $timestamp;
return $new; }
/** * Helper method to create an instance of this class from an array of data. * * @param array $data Data used to populate the breadcrumb * * @psalm-param array{ * level: string, * type?: string, * category: string, * message?: string|null, * data?: array<string, mixed>, * timestamp?: float|null * } $data */ public static function fromArray(array $data): self { return new self( $data['level'], $data['type'] ?? self::TYPE_DEFAULT, $data['category'], $data['message'] ?? null, $data['data'] ?? [], $data['timestamp'] ?? null ); } }
|