mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
Introduce internal endpoint for flushing accumulated APIKey statistics from data plane to control plane database, updating both individual API keys and their parent provider groups with request counts and success/failure rates. Add admin endpoint to retrieve aggregated API key statistics summary across all provider groups, including total requests, success/failure counts, and calculated rates.
49 lines
2.3 KiB
Go
49 lines
2.3 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// ProviderGroup represents a shared upstream definition.
|
|
type ProviderGroup struct {
|
|
gorm.Model
|
|
Name string `gorm:"size:255;uniqueIndex;not null" json:"name"`
|
|
Type string `gorm:"size:50;not null" json:"type"` // openai, anthropic, gemini
|
|
BaseURL string `gorm:"size:512;not null" json:"base_url"`
|
|
GoogleProject string `gorm:"size:128" json:"google_project,omitempty"`
|
|
GoogleLocation string `gorm:"size:64" json:"google_location,omitempty"`
|
|
StaticHeaders string `gorm:"type:text" json:"static_headers,omitempty"`
|
|
HeadersProfile string `gorm:"size:64" json:"headers_profile,omitempty"`
|
|
Models string `json:"models"` // comma-separated list of supported models
|
|
Status string `gorm:"size:50;default:'active'" json:"status"`
|
|
TotalRequests int64 `gorm:"default:0" json:"total_requests"`
|
|
SuccessRequests int64 `gorm:"default:0" json:"success_requests"`
|
|
FailureRequests int64 `gorm:"default:0" json:"failure_requests"`
|
|
SuccessRate float64 `gorm:"default:0" json:"success_rate"`
|
|
FailureRate float64 `gorm:"default:0" json:"failure_rate"`
|
|
}
|
|
|
|
// APIKey represents a credential within a provider group.
|
|
type APIKey struct {
|
|
gorm.Model
|
|
GroupID uint `gorm:"not null;index" json:"group_id"`
|
|
APIKey string `gorm:"not null" json:"api_key"`
|
|
AccessToken string `gorm:"type:text" json:"access_token,omitempty"`
|
|
RefreshToken string `gorm:"type:text" json:"-"`
|
|
ExpiresAt *time.Time `json:"expires_at,omitempty"`
|
|
AccountID string `gorm:"size:255" json:"account_id,omitempty"`
|
|
ProjectID string `gorm:"size:255" json:"project_id,omitempty"`
|
|
Weight int `gorm:"default:1" json:"weight"`
|
|
Status string `gorm:"size:50;default:'active'" json:"status"`
|
|
AutoBan bool `gorm:"default:true" json:"auto_ban"`
|
|
BanReason string `gorm:"size:255" json:"ban_reason"`
|
|
BanUntil *time.Time `json:"ban_until"`
|
|
TotalRequests int64 `gorm:"default:0" json:"total_requests"`
|
|
SuccessRequests int64 `gorm:"default:0" json:"success_requests"`
|
|
FailureRequests int64 `gorm:"default:0" json:"failure_requests"`
|
|
SuccessRate float64 `gorm:"default:0" json:"success_rate"`
|
|
FailureRate float64 `gorm:"default:0" json:"failure_rate"`
|
|
}
|