cluster

package
v1.0.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2026 License: MIT Imports: 45 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultConfigPath = "cluster.yaml"
View Source
const OAuthSessionTTL = 20 * time.Minute

Variables

This section is empty.

Functions

func APIKeyHash

func APIKeyHash(apiKey string) string

APIKeyHash handles an api key hash.

func ApplyOriginalAuthFileName

func ApplyOriginalAuthFileName(auths []*coreauth.Auth, filename string)

ApplyOriginalAuthFileName stores the source OAuth file name for management display.

func AutoMigrate

func AutoMigrate(db *gorm.DB) error

AutoMigrate handles an auto migrate.

func Bootstrap

func Bootstrap(ctx context.Context, opts BootstrapOptions) error

Bootstrap imports local configuration into the cluster database.

func ClientAddr

func ClientAddr(ctx context.Context, db *gorm.DB) (string, error)

ClientAddr handles a client addr.

func ConfigRootFromSnapshot

func ConfigRootFromSnapshot(snapshot map[string]json.RawMessage) (map[string]any, error)

ConfigRootFromSnapshot derives config root from snapshot.

func DeterministicAPIKeyUUID

func DeterministicAPIKeyUUID(provider, baseURL, apiKeyHash, compatName, providerKey string) string

DeterministicAPIKeyUUID handles a deterministic api key uuid.

func DeterministicVirtualUUID

func DeterministicVirtualUUID(parentUUID, projectID string) string

DeterministicVirtualUUID handles a deterministic virtual uuid.

func EnsureOAuthPayloadUUID

func EnsureOAuthPayloadUUID(raw []byte) ([]byte, string, bool, error)

EnsureOAuthPayloadUUID validates ensure o auth payload uuid.

func ForwardRefreshToMaster

func ForwardRefreshToMaster(ctx context.Context, master *ClusterNodeRecord, authUUID string, secret string, tlsConfig *tls.Config) ([]byte, error)

ForwardRefreshToMaster converts forward refresh to master.

func IsClientClusterCommand added in v1.0.5

func IsClientClusterCommand(args []string) bool

IsClientClusterCommand reports whether a CLUSTER command is for authenticated CPA clients.

func NormalizeClusterAuth

func NormalizeClusterAuth(auth *coreauth.Auth, uuidValue string)

NormalizeClusterAuth normalizes a cluster auth.

func OAuthSessionData added in v1.0.3

func OAuthSessionData(record *OAuthSessionRecord) (map[string]any, error)

OAuthSessionData handles an o auth session data.

func Open

func Open(ctx context.Context, cfg PGSQLConfig) (*gorm.DB, error)

Open opens the resource.

func OpenSQLite added in v1.0.17

func OpenSQLite(ctx context.Context, path string) (*gorm.DB, error)

OpenSQLite opens a SQLite database.

func ParseChannelRecordID added in v1.0.20

func ParseChannelRecordID(value string) (uint, error)

ParseChannelRecordID parses a positive unsigned record ID.

func ParseModelRecordID added in v1.0.20

func ParseModelRecordID(value string) (uint, error)

ParseModelRecordID parses a positive unsigned record ID.

func RecordToAuth

func RecordToAuth(record *AuthRecord) (*coreauth.Auth, error)

RecordToAuth records a to auth.

func RuntimeConfigFromRoot

func RuntimeConfigFromRoot(root map[string]any) (*appconfig.Config, []byte, error)

RuntimeConfigFromRoot derives runtime config from root.

Types

type APIKeyEntry added in v1.0.20

type APIKeyEntry struct {
	APIKey      string
	Channels    []uint
	ModelGroups []uint
}

func APIKeyEntryFromRecord added in v1.0.20

func APIKeyEntryFromRecord(record *APIKeyRecord) (APIKeyEntry, error)

APIKeyEntryFromRecord converts an API key record to a response entry.

type APIKeyEntryUpdate added in v1.0.20

type APIKeyEntryUpdate struct {
	APIKey      string
	Channels    *[]uint
	ModelGroups *[]uint
}

type APIKeyRecord added in v1.0.5

type APIKeyRecord struct {
	ID          uint           `gorm:"column:id;primaryKey;autoIncrement;index:idx_api_key_active_order,priority:2"`
	APIKey      string         `gorm:"column:api_key;not null;uniqueIndex"`
	Channels    JSONB          `gorm:"column:channels"`
	ModelGroups JSONB          `gorm:"column:model_groups"`
	CreatedAt   time.Time      `gorm:"column:created_at"`
	UpdatedAt   time.Time      `gorm:"column:updated_at"`
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;index;index:idx_api_key_active_order,priority:1"`
}

func (APIKeyRecord) TableName added in v1.0.5

func (APIKeyRecord) TableName() string

TableName returns the database table name.

type APIKeyUpsertStats added in v1.0.17

type APIKeyUpsertStats struct {
	Created   int
	Updated   int
	Unchanged int
	Restored  int
	Removed   int
}

func (APIKeyUpsertStats) Changed added in v1.0.17

func (s APIKeyUpsertStats) Changed() bool

Changed reports whether api key rows were mutated.

type AuthIndex

type AuthIndex struct {
	UUID          string
	ID            string
	Index         string
	Provider      string
	Label         string
	Prefix        string
	Status        coreauth.Status
	Disabled      bool
	Unavailable   bool
	BaseURL       string
	ModelsHash    string
	Attributes    map[string]string
	ModelMetadata map[string]any
}

type AuthRecord

type AuthRecord struct {
	UUID             string          `gorm:"column:uuid;primaryKey"`
	AuthJSON         JSONB           `gorm:"column:auth_json;not null"`
	Version          int64           `gorm:"column:version;not null;default:1"`
	ID               string          `gorm:"column:id;index:idx_auth_active_order,priority:2"`
	Index            string          `gorm:"column:index"`
	Provider         string          `gorm:"column:provider"`
	Label            string          `gorm:"column:label"`
	Prefix           string          `gorm:"column:prefix"`
	Status           coreauth.Status `gorm:"column:status"`
	Disabled         bool            `gorm:"column:disabled"`
	Unavailable      bool            `gorm:"column:unavailable"`
	BaseURL          string          `gorm:"column:base_url"`
	APIKeyHash       string          `gorm:"column:api_key_hash"`
	CompatName       string          `gorm:"column:compat_name"`
	ProviderKey      string          `gorm:"column:provider_key"`
	ModelsHash       string          `gorm:"column:models_hash"`
	CreatedAt        time.Time       `gorm:"column:created_at"`
	UpdatedAt        time.Time       `gorm:"column:updated_at"`
	LastRefreshedAt  *time.Time      `gorm:"column:last_refreshed_at"`
	NextRefreshAfter *time.Time      `gorm:"column:next_refresh_after"`
	DeletedAt        gorm.DeletedAt  `gorm:"column:deleted_at;index;index:idx_auth_active_order,priority:1"`
}

func AuthToRecord

func AuthToRecord(auth *coreauth.Auth) (*AuthRecord, error)

AuthToRecord converts auth to record.

func (AuthRecord) TableName

func (AuthRecord) TableName() string

TableName returns the database table name.

type BootstrapOptions

type BootstrapOptions struct {
	ConfigPath string
	AuthDir    string
	Config     *appconfig.Config
	Repository *Repository
	Now        time.Time
}

type CertificateRecord added in v1.0.14

type CertificateRecord struct {
	ID                     string    `gorm:"column:id;primaryKey;index:idx_certificate_ca_order,priority:3"`
	ClusterID              string    `gorm:"column:cluster_id;index"`
	CertificatePEM         string    `gorm:"column:certificate_pem;type:text"`
	CertificateFingerprint string    `gorm:"column:certificate_fingerprint;index;index:idx_certificate_peer_lookup,priority:1"`
	PrivateKeyPEM          string    `gorm:"column:private_key_pem;type:text"`
	CSRPEM                 string    `gorm:"column:csr_pem;type:text"`
	IP                     string    `gorm:"column:ip;index:idx_certificate_server_ip,priority:2"`
	CAFingerprint          string    `gorm:"column:ca_fingerprint"`
	EnrollmentSecretHash   string    `gorm:"column:enrollment_secret_hash"`
	IsCA                   bool      `gorm:"column:is_ca;index;index:idx_certificate_ca_order,priority:1"`
	IsServer               bool      `gorm:"column:is_server;index:idx_certificate_server_ip,priority:1;index:idx_certificate_peer_lookup,priority:3"`
	IsClient               bool      `gorm:"column:is_client;index;index:idx_certificate_peer_lookup,priority:2"`
	SerialNumber           string    `gorm:"column:serial_number"`
	NotBefore              time.Time `gorm:"column:not_before"`
	NotAfter               time.Time `gorm:"column:not_after"`
	CreatedAt              time.Time `gorm:"column:created_at;index:idx_certificate_ca_order,priority:2"`
	UpdatedAt              time.Time `gorm:"column:updated_at"`
}

func (CertificateRecord) TableName added in v1.0.14

func (CertificateRecord) TableName() string

TableName returns the database table name.

type ChannelGroupDetailFilter added in v1.0.20

type ChannelGroupDetailFilter struct {
	ChannelGroupID *uint
	AuthID         string
}

type ChannelGroupDetailRecord added in v1.0.20

type ChannelGroupDetailRecord struct {
	ID             uint           `` /* 162-byte string literal not displayed */
	ChannelGroupID uint           `` /* 160-byte string literal not displayed */
	AuthID         string         `gorm:"column:auth_id;not null;index:idx_channel_group_detail_auth_active_order,priority:1"`
	CreatedAt      time.Time      `gorm:"column:created_at"`
	UpdatedAt      time.Time      `gorm:"column:updated_at"`
	DeletedAt      gorm.DeletedAt `` /* 151-byte string literal not displayed */
}

func (ChannelGroupDetailRecord) TableName added in v1.0.20

func (ChannelGroupDetailRecord) TableName() string

TableName returns the database table name.

type ChannelGroupDetailUpdate added in v1.0.20

type ChannelGroupDetailUpdate struct {
	ChannelGroupID *uint
	AuthID         *string
}

type ChannelGroupRecord added in v1.0.20

type ChannelGroupRecord struct {
	ID          uint           `` /* 138-byte string literal not displayed */
	ChannelName string         `gorm:"column:channel_name;not null"`
	Disabled    bool           `gorm:"column:disabled;not null;default:false;index:idx_channel_group_enabled_order,priority:2"`
	CreatedAt   time.Time      `gorm:"column:created_at"`
	UpdatedAt   time.Time      `gorm:"column:updated_at"`
	DeletedAt   gorm.DeletedAt `` /* 127-byte string literal not displayed */
}

func (ChannelGroupRecord) TableName added in v1.0.20

func (ChannelGroupRecord) TableName() string

TableName returns the database table name.

type ChannelGroupUpdate added in v1.0.20

type ChannelGroupUpdate struct {
	ChannelName *string
	Disabled    *bool
}

type ClusterEventRecord

type ClusterEventRecord struct {
	ID         uint      `gorm:"column:id;primaryKey;autoIncrement"`
	Scope      string    `gorm:"column:scope"`
	Op         string    `gorm:"column:op"`
	EntityUUID string    `gorm:"column:entity_uuid"`
	Version    int64     `gorm:"column:version"`
	CreatedAt  time.Time `gorm:"column:created_at"`
}

func (ClusterEventRecord) TableName

func (ClusterEventRecord) TableName() string

TableName returns the database table name.

type ClusterNodeRecord

type ClusterNodeRecord struct {
	IP          string    `` /* 282-byte string literal not displayed */
	Port        int       `` /* 284-byte string literal not displayed */
	SecretHash  string    `gorm:"column:secret_hash;index:idx_cluster_auth_lookup,priority:2;index:idx_cluster_auth_live_first,priority:2"`
	IsMaster    bool      `gorm:"column:is_master;index:idx_cluster_master_nodes,priority:1;index:idx_cluster_master_current,priority:1"`
	ClientCount int       `gorm:"column:client_count;index:idx_cluster_live_schedule,priority:1"`
	StartedAt   time.Time `` /* 279-byte string literal not displayed */
	LastSeenAt  time.Time `` /* 291-byte string literal not displayed */
}

func (ClusterNodeRecord) TableName

func (ClusterNodeRecord) TableName() string

TableName returns the database table name.

type Config

type Config struct {
	PGSQL  PGSQLConfig  `yaml:"pgsql"`
	SQLite SQLiteConfig `yaml:"sqlite"`
	Node   NodeConfig   `yaml:"node"`
}

func LoadConfigOptional

func LoadConfigOptional(path string) (*Config, bool, error)

LoadConfigOptional loads a config optional.

func (*Config) DatabaseBackend added in v1.0.17

func (c *Config) DatabaseBackend() DatabaseBackend

DatabaseBackend returns the selected database backend.

func (*Config) Validate

func (c *Config) Validate() error

Validate validates validate.

type ConfigRecord

type ConfigRecord struct {
	Key       string    `gorm:"column:key;primaryKey"`
	Value     JSONB     `gorm:"column:value;not null"`
	Version   int64     `gorm:"column:version;not null;default:1"`
	CreatedAt time.Time `gorm:"column:created_at"`
	UpdatedAt time.Time `gorm:"column:updated_at"`
}

func (ConfigRecord) TableName

func (ConfigRecord) TableName() string

TableName returns the database table name.

type Coordinator

type Coordinator struct {
	// contains filtered or unexported fields
}

func NewCoordinator

func NewCoordinator(repo *Repository, node NodeIdentity, opts CoordinatorOptions) *Coordinator

NewCoordinator creates a new coordinator.

func (*Coordinator) CurrentMaster

func (c *Coordinator) CurrentMaster(ctx context.Context) (*ClusterNodeRecord, error)

CurrentMaster returns a current master.

func (*Coordinator) IsMaster

func (c *Coordinator) IsMaster() bool

IsMaster reports whether is master.

func (*Coordinator) NodeSecret

func (c *Coordinator) NodeSecret() string

NodeSecret handles a node secret.

func (*Coordinator) SetOnMasterChanged

func (c *Coordinator) SetOnMasterChanged(callback func(bool))

SetOnMasterChanged sets an on master changed.

func (*Coordinator) Start

func (c *Coordinator) Start(ctx context.Context) error

Start starts the process.

func (*Coordinator) UpdateClientCount added in v1.0.5

func (c *Coordinator) UpdateClientCount(ctx context.Context, clientCount int) error

UpdateClientCount stores the current active CPA client count for this node.

type CoordinatorOptions

type CoordinatorOptions struct {
	HeartbeatInterval time.Duration
	HeartbeatTimeout  time.Duration
	OnMasterChanged   func(bool)
}

type CredentialConfigCounts added in v1.0.3

type CredentialConfigCounts struct {
	GeminiKeys          int
	VertexKeys          int
	CodexKeys           int
	ClaudeKeys          int
	OpenAICompatibility int
}

CredentialConfigCounts reports how many auth-backed config entries were restored.

func ApplyCredentialConfigToRoot added in v1.0.3

func ApplyCredentialConfigToRoot(root map[string]any, auths []*coreauth.Auth) CredentialConfigCounts

ApplyCredentialConfigToRoot restores auth-backed config keys into a config root.

type DatabaseBackend added in v1.0.17

type DatabaseBackend string
const (
	DatabaseBackendPostgres DatabaseBackend = "postgres"
	DatabaseBackendSQLite   DatabaseBackend = "sqlite"
)

type EventWatcher

type EventWatcher struct {
	// contains filtered or unexported fields
}

func NewEventWatcher

func NewEventWatcher(repo *Repository, pollInterval time.Duration, onEvent func(context.Context, ClusterEventRecord) error) *EventWatcher

NewEventWatcher creates a new event watcher.

func NewEventWatcherFrom

func NewEventWatcherFrom(repo *Repository, pollInterval time.Duration, lastSeenID int64, onEvent func(context.Context, ClusterEventRecord) error) *EventWatcher

NewEventWatcherFrom creates a new event watcher from.

func (*EventWatcher) Start

func (w *EventWatcher) Start(ctx context.Context) error

Start starts the process.

type ExportOptions added in v1.0.17

type ExportOptions struct {
	OutputDir   string
	Repository  *Repository
	ConfigName  string
	AuthDirName string
}

type ExportStats added in v1.0.17

type ExportStats struct {
	ConfigBytes int
	AuthFiles   int
}

func ExportLocalState added in v1.0.17

func ExportLocalState(ctx context.Context, opts ExportOptions) (ExportStats, error)

ExportLocalState exports repository config and auth files into a local directory.

type ImportOptions added in v1.0.17

type ImportOptions struct {
	ConfigPath string
	AuthDir    string
	Repository *Repository
	Now        time.Time
}

type ImportStats added in v1.0.17

type ImportStats struct {
	Created     int
	Updated     int
	Unchanged   int
	Restored    int
	Overwritten int
	Skipped     int
}

func ImportLocalState added in v1.0.17

func ImportLocalState(ctx context.Context, opts ImportOptions) (ImportStats, error)

ImportLocalState imports config.yaml and auth-dir credentials into the repository.

type JSONB

type JSONB []byte

func (JSONB) GormDBDataType added in v1.0.17

func (JSONB) GormDBDataType(db *gorm.DB, _ *schema.Field) string

GormDBDataType returns the dialect-specific database type.

func (JSONB) GormDataType added in v1.0.17

func (JSONB) GormDataType() string

GormDataType returns the logical GORM data type.

func (JSONB) MarshalJSON

func (j JSONB) MarshalJSON() ([]byte, error)

MarshalJSON encodes a json.

func (*JSONB) Scan

func (j *JSONB) Scan(value any) error

Scan loads the value from database storage.

func (*JSONB) UnmarshalJSON

func (j *JSONB) UnmarshalJSON(data []byte) error

UnmarshalJSON decodes a json.

func (JSONB) Value

func (j JSONB) Value() (driver.Value, error)

Value converts the value for database storage.

type ModelGroupDetailFilter added in v1.0.20

type ModelGroupDetailFilter struct {
	ModelGroupID *uint
	ModelID      string
}

type ModelGroupDetailRecord added in v1.0.20

type ModelGroupDetailRecord struct {
	ID           uint           `` /* 212-byte string literal not displayed */
	ModelGroupID uint           `` /* 208-byte string literal not displayed */
	ModelID      string         `gorm:"column:model_id;not null;index:idx_model_group_detail_model_active_order,priority:1"`
	CreatedAt    time.Time      `gorm:"column:created_at"`
	UpdatedAt    time.Time      `gorm:"column:updated_at"`
	DeletedAt    gorm.DeletedAt `` /* 201-byte string literal not displayed */
}

func (ModelGroupDetailRecord) TableName added in v1.0.20

func (ModelGroupDetailRecord) TableName() string

TableName returns the database table name.

type ModelGroupDetailUpdate added in v1.0.20

type ModelGroupDetailUpdate struct {
	ModelGroupID *uint
	ModelID      *string
}

type ModelGroupRecord added in v1.0.20

type ModelGroupRecord struct {
	ID        uint           `` /* 134-byte string literal not displayed */
	GroupName string         `gorm:"column:group_name;not null"`
	Disabled  bool           `gorm:"column:disabled;not null;default:false;index:idx_model_group_enabled_order,priority:2"`
	CreatedAt time.Time      `gorm:"column:created_at"`
	UpdatedAt time.Time      `gorm:"column:updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;index;index:idx_model_group_active_order,priority:1;index:idx_model_group_enabled_order,priority:1"`
}

func (ModelGroupRecord) TableName added in v1.0.20

func (ModelGroupRecord) TableName() string

TableName returns the database table name.

type ModelGroupUpdate added in v1.0.20

type ModelGroupUpdate struct {
	GroupName *string
	Disabled  *bool
}

type NodeConfig

type NodeConfig struct {
	ExternalIP        string        `yaml:"external-ip"`
	ExternalPort      int           `yaml:"external-port"`
	Port              int           `yaml:"port"`
	HeartbeatInterval time.Duration `yaml:"heartbeat-interval"`
	HeartbeatTimeout  time.Duration `yaml:"heartbeat-timeout"`
	EventPollInterval time.Duration `yaml:"event-poll-interval"`
}

type NodeIdentity

type NodeIdentity struct {
	IP        string
	Port      int
	Secret    string
	StartedAt time.Time
}

type OAuthSessionRecord added in v1.0.3

type OAuthSessionRecord struct {
	State       string     `gorm:"column:state;primaryKey"`
	Provider    string     `gorm:"column:provider;index"`
	Status      string     `gorm:"column:status"`
	Error       string     `gorm:"column:error"`
	Data        JSONB      `gorm:"column:data"`
	CreatedAt   time.Time  `gorm:"column:created_at"`
	UpdatedAt   time.Time  `gorm:"column:updated_at"`
	ExpiresAt   time.Time  `gorm:"column:expires_at;index"`
	CompletedAt *time.Time `gorm:"column:completed_at"`
}

func NewOAuthSessionRecord added in v1.0.3

func NewOAuthSessionRecord(provider, state string, data map[string]any, now time.Time) (*OAuthSessionRecord, error)

NewOAuthSessionRecord creates a new o auth session record.

func (OAuthSessionRecord) TableName added in v1.0.3

func (OAuthSessionRecord) TableName() string

TableName returns the database table name.

type PGSQLConfig

type PGSQLConfig struct {
	Host     string `yaml:"host"`
	Port     int    `yaml:"port"`
	User     string `yaml:"user"`
	Password string `yaml:"password"`
	Passowrd string `yaml:"passowrd"`
	Database string `yaml:"database"`
	SSLMode  string `yaml:"sslmode"`
}

func (PGSQLConfig) Configured added in v1.0.17

func (c PGSQLConfig) Configured() bool

Configured reports whether PostgreSQL has cluster database settings.

func (PGSQLConfig) DSN

func (c PGSQLConfig) DSN() (string, error)

DSN returns the PostgreSQL connection string.

func (PGSQLConfig) Validate

func (c PGSQLConfig) Validate() error

Validate validates validate.

type RESPHandler

type RESPHandler struct {
	// contains filtered or unexported fields
}

func NewRESPHandler

func NewRESPHandler(coordinator *Coordinator, refresh *RefreshController, repo *Repository) *RESPHandler

NewRESPHandler creates a new resp handler.

func (*RESPHandler) Handle

func (h *RESPHandler) Handle(ctx context.Context, args []string, remoteIP string) ([]byte, error)

Handle handles handle.

func (*RESPHandler) RequestClientCertificate added in v1.0.14

func (h *RESPHandler) RequestClientCertificate(ctx context.Context, certificateID string, enrollmentSecret string, csrPEM []byte) ([]byte, error)

RequestClientCertificate signs a pending client certificate request.

func (*RESPHandler) UpdateClientCount added in v1.0.5

func (h *RESPHandler) UpdateClientCount(ctx context.Context, clientCount int) error

UpdateClientCount stores the current active CPA client count for this node.

type RefreshController

type RefreshController struct {
	// contains filtered or unexported fields
}

func NewRefreshController

func NewRefreshController(coordinator *Coordinator, runtime *home.Runtime, repo *Repository, forwardTLSConfig *tls.Config) *RefreshController

NewRefreshController creates a new refresh controller.

func (*RefreshController) CanAutoRefresh

func (c *RefreshController) CanAutoRefresh() bool

CanAutoRefresh reports whether can auto refresh.

func (*RefreshController) OnMasterChanged

func (c *RefreshController) OnMasterChanged(isMaster bool)

OnMasterChanged handles an on master changed.

func (*RefreshController) RefreshNow

func (c *RefreshController) RefreshNow(ctx context.Context, authIndex string) ([]byte, error)

RefreshNow refreshes refresh now.

type Repository

type Repository struct {
	// contains filtered or unexported fields
}

func NewRepository

func NewRepository(db *gorm.DB) *Repository

NewRepository creates a new repository.

func (*Repository) AllowedAuthIDsForAPIKey added in v1.0.20

func (r *Repository) AllowedAuthIDsForAPIKey(ctx context.Context, apiKey string) ([]string, error)

AllowedAuthIDsForAPIKey returns auth IDs allowed by the API key channel bindings.

func (*Repository) AllowedDispatchIDsForAPIKey added in v1.0.20

func (r *Repository) AllowedDispatchIDsForAPIKey(ctx context.Context, apiKey string) ([]string, []string, error)

AllowedDispatchIDsForAPIKey returns auth and model IDs allowed by API-key bindings.

func (*Repository) AllowedModelIDsForAPIKey added in v1.0.20

func (r *Repository) AllowedModelIDsForAPIKey(ctx context.Context, apiKey string) ([]string, error)

AllowedModelIDsForAPIKey returns model IDs allowed by the API key model group bindings.

func (*Repository) AppendEvent

func (r *Repository) AppendEvent(ctx context.Context, scope, op, entity string, version int64) error

AppendEvent appends an event.

func (*Repository) AppendUsage

func (r *Repository) AppendUsage(ctx context.Context, payload string) (*UsageRecord, error)

AppendUsage appends an usage.

func (*Repository) CompleteOAuthSession added in v1.0.3

func (r *Repository) CompleteOAuthSession(ctx context.Context, state string) error

CompleteOAuthSession handles a complete o auth session.

func (*Repository) CreateChannelGroup added in v1.0.20

func (r *Repository) CreateChannelGroup(ctx context.Context, channelName string, disabled bool) (*ChannelGroupRecord, error)

CreateChannelGroup creates a channel group.

func (*Repository) CreateChannelGroupDetail added in v1.0.20

func (r *Repository) CreateChannelGroupDetail(ctx context.Context, channelGroupID uint, authID string) (*ChannelGroupDetailRecord, error)

CreateChannelGroupDetail creates a channel group detail.

func (*Repository) CreateHomeJWT added in v1.0.14

func (r *Repository) CreateHomeJWT(ctx context.Context, certificateID string, ip string, port int, enrollmentSecret string) (string, error)

CreateHomeJWT creates a signed Home JWT with the client certificate id and target node.

func (*Repository) CreateModelGroup added in v1.0.20

func (r *Repository) CreateModelGroup(ctx context.Context, groupName string, disabled bool) (*ModelGroupRecord, error)

CreateModelGroup creates a model group.

func (*Repository) CreateModelGroupDetail added in v1.0.20

func (r *Repository) CreateModelGroupDetail(ctx context.Context, modelGroupID uint, modelID string) (*ModelGroupDetailRecord, error)

CreateModelGroupDetail creates a model group detail.

func (*Repository) CreatePendingClientCertificate added in v1.0.14

func (r *Repository) CreatePendingClientCertificate(ctx context.Context) (string, string, error)

CreatePendingClientCertificate creates an empty client certificate slot.

func (*Repository) CurrentMasterNode added in v1.0.14

func (r *Repository) CurrentMasterNode(ctx context.Context) (*ClusterNodeRecord, error)

CurrentMasterNode returns the current master node if one is recorded.

func (*Repository) DeleteChannelGroup added in v1.0.20

func (r *Repository) DeleteChannelGroup(ctx context.Context, id uint) error

DeleteChannelGroup deletes a channel group and its details.

func (*Repository) DeleteChannelGroupDetail added in v1.0.20

func (r *Repository) DeleteChannelGroupDetail(ctx context.Context, id uint) error

DeleteChannelGroupDetail deletes a channel group detail.

func (*Repository) DeleteModelGroup added in v1.0.20

func (r *Repository) DeleteModelGroup(ctx context.Context, id uint) error

DeleteModelGroup deletes a model group and its details.

func (*Repository) DeleteModelGroupDetail added in v1.0.20

func (r *Repository) DeleteModelGroupDetail(ctx context.Context, id uint) error

DeleteModelGroupDetail deletes a model group detail.

func (*Repository) EnsureClusterCertificates added in v1.0.14

func (r *Repository) EnsureClusterCertificates(ctx context.Context, ip string) (*tls.Config, error)

EnsureClusterCertificates makes sure the cluster CA and this node server certificate exist.

func (*Repository) GetAuth

func (r *Repository) GetAuth(ctx context.Context, uuid string) (*coreauth.Auth, *AuthRecord, error)

GetAuth returns an auth.

func (*Repository) GetChannelGroup added in v1.0.20

func (r *Repository) GetChannelGroup(ctx context.Context, id uint) (*ChannelGroupRecord, error)

GetChannelGroup returns a channel group by ID.

func (*Repository) GetChannelGroupDetail added in v1.0.20

func (r *Repository) GetChannelGroupDetail(ctx context.Context, id uint) (*ChannelGroupDetailRecord, error)

GetChannelGroupDetail returns a channel group detail by ID.

func (*Repository) GetModelGroup added in v1.0.20

func (r *Repository) GetModelGroup(ctx context.Context, id uint) (*ModelGroupRecord, error)

GetModelGroup returns a model group by ID.

func (*Repository) GetModelGroupDetail added in v1.0.20

func (r *Repository) GetModelGroupDetail(ctx context.Context, id uint) (*ModelGroupDetailRecord, error)

GetModelGroupDetail returns a model group detail by ID.

func (*Repository) GetOAuthSession added in v1.0.3

func (r *Repository) GetOAuthSession(ctx context.Context, state string) (*OAuthSessionRecord, error)

GetOAuthSession returns an o auth session.

func (*Repository) ListAPIKeyEntries added in v1.0.20

func (r *Repository) ListAPIKeyEntries(ctx context.Context) ([]APIKeyEntry, error)

ListAPIKeyEntries returns API key rows with group bindings.

func (*Repository) ListAuthIndex

func (r *Repository) ListAuthIndex(ctx context.Context) ([]AuthIndex, error)

ListAuthIndex returns an auth index.

func (*Repository) ListAuths

func (r *Repository) ListAuths(ctx context.Context) ([]*coreauth.Auth, error)

ListAuths returns an auths.

func (*Repository) ListChannelGroupDetails added in v1.0.20

func (r *Repository) ListChannelGroupDetails(ctx context.Context, filter ChannelGroupDetailFilter) ([]ChannelGroupDetailRecord, error)

ListChannelGroupDetails returns channel group details.

func (*Repository) ListChannelGroups added in v1.0.20

func (r *Repository) ListChannelGroups(ctx context.Context) ([]ChannelGroupRecord, error)

ListChannelGroups returns channel groups.

func (*Repository) ListLiveClusterNodes added in v1.0.5

func (r *Repository) ListLiveClusterNodes(ctx context.Context, cutoff time.Time) ([]ClusterNodeRecord, error)

ListLiveClusterNodes returns live cluster nodes.

func (*Repository) ListModelGroupDetails added in v1.0.20

func (r *Repository) ListModelGroupDetails(ctx context.Context, filter ModelGroupDetailFilter) ([]ModelGroupDetailRecord, error)

ListModelGroupDetails returns model group details.

func (*Repository) ListModelGroups added in v1.0.20

func (r *Repository) ListModelGroups(ctx context.Context) ([]ModelGroupRecord, error)

ListModelGroups returns model groups.

func (*Repository) LiveClusterNodeByIPAndSecret

func (r *Repository) LiveClusterNodeByIPAndSecret(ctx context.Context, ip string, secret string, cutoff time.Time) (*ClusterNodeRecord, error)

LiveClusterNodeByIPAndSecret handles a live cluster node by ip and secret.

func (*Repository) LoadConfigAsRuntimeConfig

func (r *Repository) LoadConfigAsRuntimeConfig(ctx context.Context) (*appconfig.Config, []byte, error)

LoadConfigAsRuntimeConfig loads a config as runtime config.

func (*Repository) LoadConfigSnapshot

func (r *Repository) LoadConfigSnapshot(ctx context.Context) (map[string]json.RawMessage, error)

LoadConfigSnapshot loads a config snapshot.

func (*Repository) MaxEventID

func (r *Repository) MaxEventID(ctx context.Context) (int64, error)

MaxEventID handles a max event id.

func (*Repository) MergeOAuthSessionData added in v1.0.3

func (r *Repository) MergeOAuthSessionData(ctx context.Context, state string, values map[string]any) error

MergeOAuthSessionData merges an o auth session data.

func (*Repository) ReplaceAPIKeyEntries added in v1.0.20

func (r *Repository) ReplaceAPIKeyEntries(ctx context.Context, entries []APIKeyEntryUpdate) (APIKeyUpsertStats, error)

ReplaceAPIKeyEntries replaces active API key rows and updates explicit channel bindings.

func (*Repository) ReplaceConfigSnapshot

func (r *Repository) ReplaceConfigSnapshot(ctx context.Context, values map[string]any) error

ReplaceConfigSnapshot handles a replace config snapshot.

func (*Repository) SetOAuthSessionError added in v1.0.3

func (r *Repository) SetOAuthSessionError(ctx context.Context, state string, message string) error

SetOAuthSessionError sets an o auth session error.

func (*Repository) SignClientCertificateRequest added in v1.0.14

func (r *Repository) SignClientCertificateRequest(ctx context.Context, certificateID string, enrollmentSecret string, csrPEM []byte) ([]byte, []byte, error)

SignClientCertificateRequest signs a client CSR exactly once and returns the client certificate plus CA.

func (*Repository) SignClientCertificateRequestJSON added in v1.0.14

func (r *Repository) SignClientCertificateRequestJSON(ctx context.Context, certificateID string, enrollmentSecret string, csrPEM []byte) ([]byte, error)

SignClientCertificateRequestJSON signs a CSR and returns the RESP JSON payload.

func (*Repository) SoftDeleteAuth

func (r *Repository) SoftDeleteAuth(ctx context.Context, uuid string) error

SoftDeleteAuth handles a soft delete auth.

func (*Repository) UpdateAPIKeyBindings added in v1.0.20

func (r *Repository) UpdateAPIKeyBindings(ctx context.Context, apiKey string, channels *[]uint, modelGroups *[]uint) (*APIKeyRecord, error)

UpdateAPIKeyBindings updates group bindings for one API key.

func (*Repository) UpdateAPIKeyChannels added in v1.0.20

func (r *Repository) UpdateAPIKeyChannels(ctx context.Context, apiKey string, channels []uint) (*APIKeyRecord, error)

UpdateAPIKeyChannels updates channel bindings for one API key.

func (*Repository) UpdateChannelGroup added in v1.0.20

func (r *Repository) UpdateChannelGroup(ctx context.Context, id uint, update ChannelGroupUpdate) (*ChannelGroupRecord, error)

UpdateChannelGroup updates a channel group.

func (*Repository) UpdateChannelGroupDetail added in v1.0.20

func (r *Repository) UpdateChannelGroupDetail(ctx context.Context, id uint, update ChannelGroupDetailUpdate) (*ChannelGroupDetailRecord, error)

UpdateChannelGroupDetail updates a channel group detail.

func (*Repository) UpdateModelGroup added in v1.0.20

func (r *Repository) UpdateModelGroup(ctx context.Context, id uint, update ModelGroupUpdate) (*ModelGroupRecord, error)

UpdateModelGroup updates a model group.

func (*Repository) UpdateModelGroupDetail added in v1.0.20

func (r *Repository) UpdateModelGroupDetail(ctx context.Context, id uint, update ModelGroupDetailUpdate) (*ModelGroupDetailRecord, error)

UpdateModelGroupDetail updates a model group detail.

func (*Repository) UpsertAPIKeys added in v1.0.17

func (r *Repository) UpsertAPIKeys(ctx context.Context, keys []string) (APIKeyUpsertStats, error)

UpsertAPIKeys inserts or restores API keys without deleting keys missing from the input.

func (*Repository) UpsertAuth

func (r *Repository) UpsertAuth(ctx context.Context, auth *coreauth.Auth, op string) (*AuthRecord, error)

UpsertAuth inserts or updates an auth.

func (*Repository) UpsertAuthWithResult added in v1.0.17

func (r *Repository) UpsertAuthWithResult(ctx context.Context, auth *coreauth.Auth, op string) (*AuthRecord, UpsertResult, error)

UpsertAuthWithResult inserts or updates an auth and reports the mutation result.

func (*Repository) UpsertConfigValue

func (r *Repository) UpsertConfigValue(ctx context.Context, key string, value any) error

UpsertConfigValue inserts or updates a config value.

func (*Repository) UpsertConfigValueWithResult added in v1.0.17

func (r *Repository) UpsertConfigValueWithResult(ctx context.Context, key string, value any) (UpsertResult, error)

UpsertConfigValueWithResult inserts or updates a config value and reports the mutation result.

func (*Repository) UpsertOAuthSession added in v1.0.3

func (r *Repository) UpsertOAuthSession(ctx context.Context, record *OAuthSessionRecord) error

UpsertOAuthSession inserts or updates an o auth session.

func (*Repository) WithAuthRefreshLock

func (r *Repository) WithAuthRefreshLock(ctx context.Context, uuid string, fn func(tx *Repository, auth *coreauth.Auth) (*coreauth.Auth, error)) (*coreauth.Auth, error)

WithAuthRefreshLock applies the auth refresh lock option.

type RuntimeAdapter

type RuntimeAdapter struct {
	// contains filtered or unexported fields
}

func NewRuntimeAdapter

func NewRuntimeAdapter(repo *Repository) *RuntimeAdapter

NewRuntimeAdapter creates a new runtime adapter.

func (*RuntimeAdapter) AllowedAuthIDsForAPIKey added in v1.0.20

func (a *RuntimeAdapter) AllowedAuthIDsForAPIKey(ctx context.Context, apiKey string) ([]string, error)

AllowedAuthIDsForAPIKey returns auth IDs allowed by API-key channel bindings.

func (*RuntimeAdapter) AllowedDispatchIDsForAPIKey added in v1.0.20

func (a *RuntimeAdapter) AllowedDispatchIDsForAPIKey(ctx context.Context, apiKey string) ([]string, []string, error)

AllowedDispatchIDsForAPIKey returns auth and model IDs allowed by API-key bindings.

func (*RuntimeAdapter) AllowedModelIDsForAPIKey added in v1.0.20

func (a *RuntimeAdapter) AllowedModelIDsForAPIKey(ctx context.Context, apiKey string) ([]string, error)

AllowedModelIDsForAPIKey returns model IDs allowed by API-key model group bindings.

func (*RuntimeAdapter) ApplyEvent

func (a *RuntimeAdapter) ApplyEvent(ctx context.Context, event ClusterEventRecord) error

ApplyEvent updates apply event.

func (*RuntimeAdapter) Delete

func (a *RuntimeAdapter) Delete(ctx context.Context, id string) error

Delete handles delete.

func (*RuntimeAdapter) Enabled

func (a *RuntimeAdapter) Enabled() bool

Enabled handles an enabled.

func (*RuntimeAdapter) GetFullAuth

func (a *RuntimeAdapter) GetFullAuth(ctx context.Context, uuid string) (*coreauth.Auth, error)

GetFullAuth returns a full auth.

func (*RuntimeAdapter) InvalidateFullAuth

func (a *RuntimeAdapter) InvalidateFullAuth(uuid string)

InvalidateFullAuth invalidates a full auth.

func (*RuntimeAdapter) List

func (a *RuntimeAdapter) List(ctx context.Context) ([]*coreauth.Auth, error)

List returns the available entries.

func (*RuntimeAdapter) ListMinimalAuths

func (a *RuntimeAdapter) ListMinimalAuths() []*coreauth.Auth

ListMinimalAuths returns a minimal auths.

func (*RuntimeAdapter) LoadAuthIndex

func (a *RuntimeAdapter) LoadAuthIndex(ctx context.Context) error

LoadAuthIndex loads an auth index.

func (*RuntimeAdapter) LoadConfigYAML

func (a *RuntimeAdapter) LoadConfigYAML(ctx context.Context) ([]byte, error)

LoadConfigYAML loads a config yaml.

func (*RuntimeAdapter) LoadIndex

func (a *RuntimeAdapter) LoadIndex(ctx context.Context) error

LoadIndex loads an index.

func (*RuntimeAdapter) RefreshAuthIndex

func (a *RuntimeAdapter) RefreshAuthIndex(ctx context.Context, uuid string) error

RefreshAuthIndex refreshes refresh auth index.

func (*RuntimeAdapter) RemoveAuthIndex

func (a *RuntimeAdapter) RemoveAuthIndex(uuid string)

RemoveAuthIndex removes an auth index.

func (*RuntimeAdapter) Save

func (a *RuntimeAdapter) Save(ctx context.Context, auth *coreauth.Auth) (string, error)

Save stores save.

func (*RuntimeAdapter) StoreUsagePayload

func (a *RuntimeAdapter) StoreUsagePayload(ctx context.Context, payload string) error

StoreUsagePayload stores an usage payload.

type SQLiteConfig added in v1.0.17

type SQLiteConfig struct {
	Path string `yaml:"path"`
}

func (SQLiteConfig) Configured added in v1.0.17

func (c SQLiteConfig) Configured() bool

Configured reports whether SQLite has cluster database settings.

type UpsertResult added in v1.0.17

type UpsertResult string
const (
	UpsertResultCreated   UpsertResult = "created"
	UpsertResultUpdated   UpsertResult = "updated"
	UpsertResultUnchanged UpsertResult = "unchanged"
	UpsertResultRestored  UpsertResult = "restored"
)

type UsageRecord

type UsageRecord struct {
	ID                  uint      `gorm:"column:id;primaryKey;autoIncrement;index:idx_usage_time_order,priority:2"`
	Timestamp           time.Time `` /* 359-byte string literal not displayed */
	LatencyMS           int64     `gorm:"column:latency_ms;not null;default:0"`
	Source              string    `gorm:"column:source;index:idx_usage_source;index:idx_usage_source_time,priority:1"`
	AuthIndex           string    `gorm:"column:auth_index;index:idx_usage_auth_index;index:idx_usage_auth_time,priority:1"`
	InputTokens         int64     `gorm:"column:input_tokens;not null;default:0"`
	OutputTokens        int64     `gorm:"column:output_tokens;not null;default:0"`
	ReasoningTokens     int64     `gorm:"column:reasoning_tokens;not null;default:0"`
	CachedTokens        int64     `gorm:"column:cached_tokens;not null;default:0"`
	CacheReadTokens     int64     `gorm:"column:cache_read_tokens;not null;default:0"`
	CacheCreationTokens int64     `gorm:"column:cache_creation_tokens;not null;default:0"`
	TotalTokens         int64     `gorm:"column:total_tokens;not null;default:0"`
	Failed              bool      `gorm:"column:failed;not null;default:false;index:idx_usage_failed;index:idx_usage_failed_time,priority:1"`
	FailStatusCode      int       `gorm:"column:fail_status_code;not null;default:0"`
	FailBody            string    `gorm:"column:fail_body;type:text"`
	Provider            string    `gorm:"column:provider;index:idx_usage_provider_model,priority:1;index:idx_usage_provider_model_time,priority:1"`
	Model               string    `gorm:"column:model;index:idx_usage_provider_model,priority:2;index:idx_usage_provider_model_time,priority:2"`
	Alias               string    `gorm:"column:alias"`
	Endpoint            string    `gorm:"column:endpoint;index:idx_usage_endpoint;index:idx_usage_endpoint_time,priority:1"`
	AuthType            string    `gorm:"column:auth_type"`
	APIKey              string    `gorm:"column:api_key"`
	RequestID           string    `gorm:"column:request_id;index:idx_usage_request_id"`
	TokensJSON          JSONB     `gorm:"column:tokens"`
	FailJSON            JSONB     `gorm:"column:fail"`
	PayloadJSON         JSONB     `gorm:"column:payload;not null"`
	CreatedAt           time.Time `gorm:"column:created_at;not null"`
}

func UsageRecordFromPayload

func UsageRecordFromPayload(payload string) (*UsageRecord, error)

UsageRecordFromPayload derives usage record from payload.

func (UsageRecord) TableName

func (UsageRecord) TableName() string

TableName returns the database table name.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL