API 로그 페이지 개선: 테넌트/사용자 표시, 그룹핑, AI 분석 복사

- 테넌트/사용자 컬럼 추가 (관계 eager loading)
- 그룹 ID로 연관 API 호출 필터링 및 상세 페이지에서 그룹 목록 표시
- 상태 400 이상일 때 AI 분석용 복사 버튼 추가
- Tenant 모델 네임스페이스 수정 (Tenants\Tenant)
This commit is contained in:
2025-12-15 16:33:58 +09:00
parent f5e2068557
commit e7beefd594
4 changed files with 230 additions and 18 deletions

View File

@@ -21,11 +21,12 @@
* @property string|null $user_agent
* @property int|null $user_id
* @property int|null $tenant_id
* @property string|null $group_id
* @property \Carbon\Carbon $created_at
*/
class ApiRequestLog extends Model
{
protected $table = 'api_request_logs';
protected $table = 'api_request_logs';
public $timestamps = false;
@@ -43,6 +44,7 @@ class ApiRequestLog extends Model
'user_agent',
'user_id',
'tenant_id',
'group_id',
];
protected $casts = [
@@ -99,4 +101,57 @@ public static function pruneOldLogs(): int
{
return static::where('created_at', '<', now()->subDay())->delete();
}
/**
* 테넌트 관계
*/
public function tenant()
{
return $this->belongsTo(\App\Models\Tenants\Tenant::class);
}
/**
* 사용자 관계
*/
public function user()
{
return $this->belongsTo(\App\Models\User::class);
}
/**
* AI 분석용 요약 텍스트 생성
*/
public function getAiAnalysisSummaryAttribute(): string
{
$responseData = json_decode($this->response_body, true);
$errorMessage = $responseData['message'] ?? $responseData['error'] ?? '';
$summary = "## API 에러 분석 요청\n\n";
$summary .= "### 요청 정보\n";
$summary .= "- **메서드**: {$this->method}\n";
$summary .= "- **URL**: {$this->url}\n";
$summary .= "- **라우트**: " . ($this->route_name ?? 'N/A') . "\n";
$summary .= "- **상태 코드**: {$this->response_status}\n";
$summary .= "- **응답 시간**: {$this->duration_ms}ms\n";
$summary .= "- **요청 시간**: {$this->created_at->format('Y-m-d H:i:s')}\n\n";
if ($this->request_body && count($this->request_body) > 0) {
$summary .= "### 요청 바디\n```json\n";
$summary .= json_encode($this->request_body, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$summary .= "\n```\n\n";
}
$summary .= "### 응답 내용\n```json\n";
if ($responseData) {
$summary .= json_encode($responseData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} else {
$summary .= $this->response_body ?? 'N/A';
}
$summary .= "\n```\n\n";
$summary .= "### 분석 요청\n";
$summary .= "위 API 에러의 원인을 분석하고 해결 방법을 제안해주세요.\n";
return $summary;
}
}