ExecutionMetrics.php
- Pfad:
src/Domain/ValueObject/ExecutionMetrics.php - Namespace: Domain\ValueObject
- Zeilen: 108 | Größe: 2,679 Bytes
- Geändert: 2025-12-27 15:39:18 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 92
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 60 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 2
- constructor Domain\ValueObject\TokenCount
- use Domain\Constants
Klassen 1
-
ExecutionMetricsclass Zeile 11
Funktionen 14
-
__construct()private Zeile 13 -
create()public Zeile 20 -
zero()public Zeile 25 -
fromEstimation()public Zeile 30 -
tokens()public Zeile 38 -
costUsd()public Zeile 43 -
durationMs()public Zeile 48 -
withCost()public Zeile 53 -
withDuration()public Zeile 58 -
withTokens()public Zeile 63 -
hasCost()public Zeile 68 -
hasDuration()public Zeile 73 -
format()public Zeile 78 -
toArray()Zeile 97
Verwendet von 3
- TaskResult.php use
- TaskResult.php constructor
- TaskResultBuilder.php use
Versionen 2
-
v2
2025-12-27 15:39 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-27 15:39 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Domain\ValueObject;
// @responsibility: Immutables Value Object für Ausführungs-Metriken (Tokens + Kosten + Dauer)
use Domain\Constants;
final class ExecutionMetrics
{
private function __construct(
private TokenCount $tokens,
private ?float $costUsd,
private ?int $durationMs
) {
}
public static function create(TokenCount $tokens, ?float $costUsd = null, ?int $durationMs = null): self
{
return new self($tokens, $costUsd, $durationMs);
}
public static function zero(): self
{
return new self(TokenCount::zero(), null, null);
}
public static function fromEstimation(string $request, string $response): self
{
$inputTokens = max(1, (int) (strlen($request) / 4));
$outputTokens = max(1, (int) (strlen($response) / 4));
return new self(TokenCount::create($inputTokens, $outputTokens), null, null);
}
public function tokens(): TokenCount
{
return $this->tokens;
}
public function costUsd(): ?float
{
return $this->costUsd;
}
public function durationMs(): ?int
{
return $this->durationMs;
}
public function withCost(float $costUsd): self
{
return new self($this->tokens, $costUsd, $this->durationMs);
}
public function withDuration(int $durationMs): self
{
return new self($this->tokens, $this->costUsd, $durationMs);
}
public function withTokens(TokenCount $tokens): self
{
return new self($tokens, $this->costUsd, $this->durationMs);
}
public function hasCost(): bool
{
return $this->costUsd !== null;
}
public function hasDuration(): bool
{
return $this->durationMs !== null;
}
public function format(): string
{
$parts = [$this->tokens->format()];
if ($this->costUsd !== null) {
$parts[] = sprintf('$%.4f', $this->costUsd);
}
if ($this->durationMs !== null) {
if ($this->durationMs < Constants::MS_PER_SECOND) {
$parts[] = "{$this->durationMs}ms";
} else {
$parts[] = sprintf('%.2fs', $this->durationMs / Constants::MS_PER_SECOND);
}
}
return implode(' | ', $parts);
}
public function toArray(): array
{
return [
'tokens_input' => $this->tokens->input(),
'tokens_output' => $this->tokens->output(),
'tokens_total' => $this->tokens->total(),
'cost_usd' => $this->costUsd,
'duration_ms' => $this->durationMs,
];
}
}