'json', 'query_params' => 'json', 'response_headers' => 'json', 'response_time' => 'integer', 'response_status' => 'integer', 'created_at' => 'datetime', ]; /** * 关联应用模型 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function app() { return $this->belongsTo(OpenApiApp::class, 'app_id', 'app_id'); } /** * 获取格式化的响应时间 * * @return string */ public function getFormattedResponseTimeAttribute(): string { if ($this->response_time < 1000) { return $this->response_time . 'ms'; } return round($this->response_time / 1000, 2) . 's'; } /** * 获取状态标签 * * @return string */ public function getStatusLabelAttribute(): string { $status = $this->response_status; if ($status >= 200 && $status < 300) { return '成功'; } elseif ($status >= 400 && $status < 500) { return '客户端错误'; } elseif ($status >= 500) { return '服务器错误'; } return '未知'; } /** * 获取状态颜色 * * @return string */ public function getStatusColorAttribute(): string { $status = $this->response_status; if ($status >= 200 && $status < 300) { return 'success'; } elseif ($status >= 400 && $status < 500) { return 'warning'; } elseif ($status >= 500) { return 'danger'; } return 'secondary'; } /** * 是否成功响应 * * @return bool */ public function isSuccessful(): bool { return $this->response_status >= 200 && $this->response_status < 300; } /** * 是否客户端错误 * * @return bool */ public function isClientError(): bool { return $this->response_status >= 400 && $this->response_status < 500; } /** * 是否服务器错误 * * @return bool */ public function isServerError(): bool { return $this->response_status >= 500; } /** * 按应用ID查询 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $appId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByApp($query, string $appId) { return $query->where('app_id', $appId); } /** * 按状态码查询 * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $status * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByStatus($query, int $status) { return $query->where('response_status', $status); } /** * 按时间范围查询 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $start * @param string $end * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByDateRange($query, string $start, string $end) { return $query->whereBetween('created_at', [$start, $end]); } /** * 只查询成功的请求 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeSuccessful($query) { return $query->whereBetween('response_status', [200, 299]); } /** * 只查询错误的请求 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeErrors($query) { return $query->where('response_status', '>=', 400); } /** * 按响应时间排序 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $direction * @return \Illuminate\Database\Eloquent\Builder */ public function scopeOrderByResponseTime($query, string $direction = 'desc') { return $query->orderBy('response_time', $direction); } }