KiProtokollService.php
- Pfad:
src/Infrastructure/Logging/KiProtokollService.php - Namespace: Infrastructure\Logging
- Zeilen: 104 | Größe: 2,934 Bytes
- Geändert: 2025-12-29 09:09:28 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 2
- constructor Domain\Repository\KiProtokollRepositoryInterface
- use Domain\Repository\KiProtokollRepositoryInterface
Klassen 1
-
KiProtokollServiceclass Zeile 17
Funktionen 6
-
__construct()public Zeile 19 -
logRequest()public Zeile 29 -
logSuccess()public Zeile 48 -
logFailure()Zeile 66 -
updateFullPrompt()Zeile 79 -
cleanupStale()Zeile 93
Verwendet von 4
- ChatServiceProvider.php use
- InfrastructureServiceProvider.php use
- StreamingChatMessageUseCase.php constructor
- StreamingChatMessageUseCase.php use
Versionen 1
-
v1
2025-12-29 09:09 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Logging;
// @responsibility: Crash-safe wrapper for KI-Protokoll logging (SRP extraction)
use Domain\Repository\KiProtokollRepositoryInterface;
/**
* KiProtokollService provides crash-safe logging to ki_dev.protokoll.
*
* ALL methods are wrapped in try-catch to ensure the Chat continues
* even if protokoll logging fails. This is critical for production stability.
*/
final class KiProtokollService
{
public function __construct(
private KiProtokollRepositoryInterface $repository
) {
}
/**
* Log a new LLM request (status: pending).
*
* @return int|null The protokoll ID, or null if logging failed
*/
public function logRequest(
string $clientName,
string $request,
string $model,
string $requestIp
): ?int {
try {
return $this->repository->insert($clientName, $request, $model, $requestIp);
} catch (\Throwable $e) {
error_log('KiProtokoll logRequest failed: ' . $e->getMessage());
return null;
}
}
/**
* Complete a pending protokoll entry with response data.
* Silent fail - Chat continues regardless.
*/
public function logSuccess(
int $id,
string $response,
int $durationMs,
?int $tokensInput,
?int $tokensOutput
): void {
try {
$this->repository->complete($id, $response, $durationMs, $tokensInput, $tokensOutput);
} catch (\Throwable $e) {
error_log("KiProtokoll logSuccess failed for ID {$id}: " . $e->getMessage());
}
}
/**
* Mark a protokoll entry as failed.
* Silent fail - Chat continues regardless.
*/
public function logFailure(int $id, string $errorMessage): void
{
try {
$this->repository->fail($id, $errorMessage);
} catch (\Throwable $e) {
error_log("KiProtokoll logFailure failed for ID {$id}: " . $e->getMessage());
}
}
/**
* Update request with full LLM prompt (after prompt construction).
* Silent fail - Chat continues regardless.
*/
public function updateFullPrompt(int $id, string $fullPrompt): void
{
try {
$this->repository->updateRequest($id, $fullPrompt);
} catch (\Throwable $e) {
error_log("KiProtokoll updateFullPrompt failed for ID {$id}: " . $e->getMessage());
}
}
/**
* Clean up stale pending entries (cron job).
*
* @return int Number of cleaned up entries, or 0 on failure
*/
public function cleanupStale(int $minutesOld = 10): int
{
try {
return $this->repository->cleanupStale($minutesOld);
} catch (\Throwable $e) {
error_log('KiProtokoll cleanupStale failed: ' . $e->getMessage());
return 0;
}
}
}