明细只保留 1 天,超过 1 天聚合到新表 channel_monitor_daily_rollups(按 monitor_id/model/bucket_date 维度),聚合保留 30 天。两张表都用 SoftDeleteMixin 软删除(DELETE 自动改为 UPDATE deleted_at = NOW())。 聚合 + 清理任务由 OpsCleanupService 的 cron 统一调度,与运维监控的清理共享 schedule(默认 0 2 * * *)和 leader lock。ChannelMonitorRunner 的 cleanupLoop 被移除,只保留 dueCheckLoop。 读取路径 ComputeAvailability* 改为 UNION 明细(今天 deleted_at IS NULL)+ 聚合(过去 windowDays 天 deleted_at IS NULL),SUM(ok)/SUM(total) 自然加权 计算可用率,AVG latency 用 SUM(sum_latency_ms)/SUM(count_latency)。 watermark 表 channel_monitor_aggregation_watermark 单行(id=1),记录 last_aggregated_date,重启后从该日期 +1 继续聚合,首次为 nil 则从 today - 30d 开始回填,单次最多 35 天上限避免长事务。 raw SQL 的 ListLatestPerModel / ListLatestForMonitorIDs / ListRecentHistoryForMonitors 都补上 deleted_at IS NULL 过滤(SoftDeleteMixin interceptor 只对 ent query 生效)。 bump version to 0.1.114.28 GroupBadge 在 MonitorKeyPickerDialog 中复用平台主题色 + 倍率/专属倍率 (顺手优化)。
254 lines
9.7 KiB
Go
254 lines
9.7 KiB
Go
// Code generated by ent, DO NOT EDIT.
|
|
|
|
package channelmonitor
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"entgo.io/ent/dialect/sql"
|
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
|
)
|
|
|
|
const (
|
|
// Label holds the string label denoting the channelmonitor type in the database.
|
|
Label = "channel_monitor"
|
|
// FieldID holds the string denoting the id field in the database.
|
|
FieldID = "id"
|
|
// FieldCreatedAt holds the string denoting the created_at field in the database.
|
|
FieldCreatedAt = "created_at"
|
|
// FieldUpdatedAt holds the string denoting the updated_at field in the database.
|
|
FieldUpdatedAt = "updated_at"
|
|
// FieldName holds the string denoting the name field in the database.
|
|
FieldName = "name"
|
|
// FieldProvider holds the string denoting the provider field in the database.
|
|
FieldProvider = "provider"
|
|
// FieldEndpoint holds the string denoting the endpoint field in the database.
|
|
FieldEndpoint = "endpoint"
|
|
// FieldAPIKeyEncrypted holds the string denoting the api_key_encrypted field in the database.
|
|
FieldAPIKeyEncrypted = "api_key_encrypted"
|
|
// FieldPrimaryModel holds the string denoting the primary_model field in the database.
|
|
FieldPrimaryModel = "primary_model"
|
|
// FieldExtraModels holds the string denoting the extra_models field in the database.
|
|
FieldExtraModels = "extra_models"
|
|
// FieldGroupName holds the string denoting the group_name field in the database.
|
|
FieldGroupName = "group_name"
|
|
// FieldEnabled holds the string denoting the enabled field in the database.
|
|
FieldEnabled = "enabled"
|
|
// FieldIntervalSeconds holds the string denoting the interval_seconds field in the database.
|
|
FieldIntervalSeconds = "interval_seconds"
|
|
// FieldLastCheckedAt holds the string denoting the last_checked_at field in the database.
|
|
FieldLastCheckedAt = "last_checked_at"
|
|
// FieldCreatedBy holds the string denoting the created_by field in the database.
|
|
FieldCreatedBy = "created_by"
|
|
// EdgeHistory holds the string denoting the history edge name in mutations.
|
|
EdgeHistory = "history"
|
|
// EdgeDailyRollups holds the string denoting the daily_rollups edge name in mutations.
|
|
EdgeDailyRollups = "daily_rollups"
|
|
// Table holds the table name of the channelmonitor in the database.
|
|
Table = "channel_monitors"
|
|
// HistoryTable is the table that holds the history relation/edge.
|
|
HistoryTable = "channel_monitor_histories"
|
|
// HistoryInverseTable is the table name for the ChannelMonitorHistory entity.
|
|
// It exists in this package in order to avoid circular dependency with the "channelmonitorhistory" package.
|
|
HistoryInverseTable = "channel_monitor_histories"
|
|
// HistoryColumn is the table column denoting the history relation/edge.
|
|
HistoryColumn = "monitor_id"
|
|
// DailyRollupsTable is the table that holds the daily_rollups relation/edge.
|
|
DailyRollupsTable = "channel_monitor_daily_rollups"
|
|
// DailyRollupsInverseTable is the table name for the ChannelMonitorDailyRollup entity.
|
|
// It exists in this package in order to avoid circular dependency with the "channelmonitordailyrollup" package.
|
|
DailyRollupsInverseTable = "channel_monitor_daily_rollups"
|
|
// DailyRollupsColumn is the table column denoting the daily_rollups relation/edge.
|
|
DailyRollupsColumn = "monitor_id"
|
|
)
|
|
|
|
// Columns holds all SQL columns for channelmonitor fields.
|
|
var Columns = []string{
|
|
FieldID,
|
|
FieldCreatedAt,
|
|
FieldUpdatedAt,
|
|
FieldName,
|
|
FieldProvider,
|
|
FieldEndpoint,
|
|
FieldAPIKeyEncrypted,
|
|
FieldPrimaryModel,
|
|
FieldExtraModels,
|
|
FieldGroupName,
|
|
FieldEnabled,
|
|
FieldIntervalSeconds,
|
|
FieldLastCheckedAt,
|
|
FieldCreatedBy,
|
|
}
|
|
|
|
// ValidColumn reports if the column name is valid (part of the table columns).
|
|
func ValidColumn(column string) bool {
|
|
for i := range Columns {
|
|
if column == Columns[i] {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
var (
|
|
// DefaultCreatedAt holds the default value on creation for the "created_at" field.
|
|
DefaultCreatedAt func() time.Time
|
|
// DefaultUpdatedAt holds the default value on creation for the "updated_at" field.
|
|
DefaultUpdatedAt func() time.Time
|
|
// UpdateDefaultUpdatedAt holds the default value on update for the "updated_at" field.
|
|
UpdateDefaultUpdatedAt func() time.Time
|
|
// NameValidator is a validator for the "name" field. It is called by the builders before save.
|
|
NameValidator func(string) error
|
|
// EndpointValidator is a validator for the "endpoint" field. It is called by the builders before save.
|
|
EndpointValidator func(string) error
|
|
// APIKeyEncryptedValidator is a validator for the "api_key_encrypted" field. It is called by the builders before save.
|
|
APIKeyEncryptedValidator func(string) error
|
|
// PrimaryModelValidator is a validator for the "primary_model" field. It is called by the builders before save.
|
|
PrimaryModelValidator func(string) error
|
|
// DefaultExtraModels holds the default value on creation for the "extra_models" field.
|
|
DefaultExtraModels []string
|
|
// DefaultGroupName holds the default value on creation for the "group_name" field.
|
|
DefaultGroupName string
|
|
// GroupNameValidator is a validator for the "group_name" field. It is called by the builders before save.
|
|
GroupNameValidator func(string) error
|
|
// DefaultEnabled holds the default value on creation for the "enabled" field.
|
|
DefaultEnabled bool
|
|
// IntervalSecondsValidator is a validator for the "interval_seconds" field. It is called by the builders before save.
|
|
IntervalSecondsValidator func(int) error
|
|
)
|
|
|
|
// Provider defines the type for the "provider" enum field.
|
|
type Provider string
|
|
|
|
// Provider values.
|
|
const (
|
|
ProviderOpenai Provider = "openai"
|
|
ProviderAnthropic Provider = "anthropic"
|
|
ProviderGemini Provider = "gemini"
|
|
)
|
|
|
|
func (pr Provider) String() string {
|
|
return string(pr)
|
|
}
|
|
|
|
// ProviderValidator is a validator for the "provider" field enum values. It is called by the builders before save.
|
|
func ProviderValidator(pr Provider) error {
|
|
switch pr {
|
|
case ProviderOpenai, ProviderAnthropic, ProviderGemini:
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("channelmonitor: invalid enum value for provider field: %q", pr)
|
|
}
|
|
}
|
|
|
|
// OrderOption defines the ordering options for the ChannelMonitor queries.
|
|
type OrderOption func(*sql.Selector)
|
|
|
|
// ByID orders the results by the id field.
|
|
func ByID(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldID, opts...).ToFunc()
|
|
}
|
|
|
|
// ByCreatedAt orders the results by the created_at field.
|
|
func ByCreatedAt(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldCreatedAt, opts...).ToFunc()
|
|
}
|
|
|
|
// ByUpdatedAt orders the results by the updated_at field.
|
|
func ByUpdatedAt(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldUpdatedAt, opts...).ToFunc()
|
|
}
|
|
|
|
// ByName orders the results by the name field.
|
|
func ByName(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldName, opts...).ToFunc()
|
|
}
|
|
|
|
// ByProvider orders the results by the provider field.
|
|
func ByProvider(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldProvider, opts...).ToFunc()
|
|
}
|
|
|
|
// ByEndpoint orders the results by the endpoint field.
|
|
func ByEndpoint(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldEndpoint, opts...).ToFunc()
|
|
}
|
|
|
|
// ByAPIKeyEncrypted orders the results by the api_key_encrypted field.
|
|
func ByAPIKeyEncrypted(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldAPIKeyEncrypted, opts...).ToFunc()
|
|
}
|
|
|
|
// ByPrimaryModel orders the results by the primary_model field.
|
|
func ByPrimaryModel(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldPrimaryModel, opts...).ToFunc()
|
|
}
|
|
|
|
// ByGroupName orders the results by the group_name field.
|
|
func ByGroupName(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldGroupName, opts...).ToFunc()
|
|
}
|
|
|
|
// ByEnabled orders the results by the enabled field.
|
|
func ByEnabled(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldEnabled, opts...).ToFunc()
|
|
}
|
|
|
|
// ByIntervalSeconds orders the results by the interval_seconds field.
|
|
func ByIntervalSeconds(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldIntervalSeconds, opts...).ToFunc()
|
|
}
|
|
|
|
// ByLastCheckedAt orders the results by the last_checked_at field.
|
|
func ByLastCheckedAt(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldLastCheckedAt, opts...).ToFunc()
|
|
}
|
|
|
|
// ByCreatedBy orders the results by the created_by field.
|
|
func ByCreatedBy(opts ...sql.OrderTermOption) OrderOption {
|
|
return sql.OrderByField(FieldCreatedBy, opts...).ToFunc()
|
|
}
|
|
|
|
// ByHistoryCount orders the results by history count.
|
|
func ByHistoryCount(opts ...sql.OrderTermOption) OrderOption {
|
|
return func(s *sql.Selector) {
|
|
sqlgraph.OrderByNeighborsCount(s, newHistoryStep(), opts...)
|
|
}
|
|
}
|
|
|
|
// ByHistory orders the results by history terms.
|
|
func ByHistory(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
|
return func(s *sql.Selector) {
|
|
sqlgraph.OrderByNeighborTerms(s, newHistoryStep(), append([]sql.OrderTerm{term}, terms...)...)
|
|
}
|
|
}
|
|
|
|
// ByDailyRollupsCount orders the results by daily_rollups count.
|
|
func ByDailyRollupsCount(opts ...sql.OrderTermOption) OrderOption {
|
|
return func(s *sql.Selector) {
|
|
sqlgraph.OrderByNeighborsCount(s, newDailyRollupsStep(), opts...)
|
|
}
|
|
}
|
|
|
|
// ByDailyRollups orders the results by daily_rollups terms.
|
|
func ByDailyRollups(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
|
return func(s *sql.Selector) {
|
|
sqlgraph.OrderByNeighborTerms(s, newDailyRollupsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
|
}
|
|
}
|
|
func newHistoryStep() *sqlgraph.Step {
|
|
return sqlgraph.NewStep(
|
|
sqlgraph.From(Table, FieldID),
|
|
sqlgraph.To(HistoryInverseTable, FieldID),
|
|
sqlgraph.Edge(sqlgraph.O2M, false, HistoryTable, HistoryColumn),
|
|
)
|
|
}
|
|
func newDailyRollupsStep() *sqlgraph.Step {
|
|
return sqlgraph.NewStep(
|
|
sqlgraph.From(Table, FieldID),
|
|
sqlgraph.To(DailyRollupsInverseTable, FieldID),
|
|
sqlgraph.Edge(sqlgraph.O2M, false, DailyRollupsTable, DailyRollupsColumn),
|
|
)
|
|
}
|