API 로그 페이지 개선: 테넌트/사용자 표시, 그룹핑, AI 분석 복사
- 테넌트/사용자 컬럼 추가 (관계 eager loading) - 그룹 ID로 연관 API 호출 필터링 및 상세 페이지에서 그룹 목록 표시 - 상태 400 이상일 때 AI 분석용 복사 버튼 추가 - Tenant 모델 네임스페이스 수정 (Tenants\Tenant)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user