Help us shape the future of Go! Take the 2026 Go Developer Survey

log

package
v1.21.2 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 2026 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Overview

Package log holds the system log row (the system_logs table) and the typed content of each kind of entry: the message and subscription logs, the login, registration, balance, commission, gift and order logs, and the traffic logs, rankings and daily statistics. Every domain may append to the audit log inside its own transaction.

Index

Constants

View Source
const (
	ResetSubscribeTypeAuto       uint16 = 231 // Auto reset
	ResetSubscribeTypeAdvance    uint16 = 232 // Advance reset
	ResetSubscribeTypePaid       uint16 = 233 // Paid reset
	ResetSubscribeTypeQuota      uint16 = 234 // Quota reset
	BalanceTypeRecharge          uint16 = 321 // Recharge
	BalanceTypeWithdraw          uint16 = 322 // Withdraw
	BalanceTypePayment           uint16 = 323 // Payment
	BalanceTypeRefund            uint16 = 324 // Refund
	BalanceTypeAdjust            uint16 = 326 // Admin Adjust
	BalanceTypeReward            uint16 = 325 // Reward
	CommissionTypePurchase       uint16 = 331 // Purchase
	CommissionTypeRenewal        uint16 = 332 // Renewal
	CommissionTypeRefund         uint16 = 333 // Refund
	CommissionTypeWithdraw       uint16 = 334 // withdraw
	CommissionTypeAdjust         uint16 = 335 // Admin Adjust
	CommissionTypeConvertBalance uint16 = 336 // Convert to Balance
	GiftTypeIncrease             uint16 = 341 // Increase
	GiftTypeReduce               uint16 = 342 // Reduce
)
View Source
const (
	AdminActionSourceHTTP     = "http"
	AdminActionSourceTelegram = "telegram"
)

The sources an administrator mutation arrives from.

Variables

This section is empty.

Functions

func ExpirableTypes added in v1.19.0

func ExpirableTypes() []int

ExpirableTypes returns the operational log classes that may be removed by the configured retention policy. Financial logs are deliberately absent: balance, commission and gift entries are durable ledgers and are also used by business queries, so treating them as disposable logs corrupts history. Keep this as an allowlist so newly-added log types are retained by default.

Types

type AdminAction added in v1.21.0

type AdminAction struct {
	requestmeta.Metadata
	Action           string `json:"action"`
	Object           string `json:"object,omitempty"`
	ObjectID         int64  `json:"object_id,omitempty"`
	Detail           string `json:"detail,omitempty"`
	Source           string `json:"source"` // "http" or "telegram"
	TelegramSenderID int64  `json:"telegram_sender_id,omitempty"`
	Timestamp        int64  `json:"timestamp"`
}

AdminAction records a mutation an administrator made: which action, on which object, from the HTTP API (ActorID) or the Telegram bot (TelegramSenderID). Detail is a short, bounded description and must never carry a secret: settings entries name the changed keys, not their values. The type is not expirable, so the trail survives a shortened retention.

func AdminActionFrom added in v1.21.0

func AdminActionFrom(ctx context.Context, action AdminAction) AdminAction

AdminActionFrom returns action with the request metadata of ctx (the administrator's request, ActorID included) as recorded by the HTTP middleware; without one the action is recorded as it is.

func (*AdminAction) Marshal added in v1.21.0

func (a *AdminAction) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*AdminAction) Unmarshal added in v1.21.0

func (a *AdminAction) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Balance

type Balance struct {
	requestmeta.Metadata
	Type      uint16 `json:"type"`
	Amount    int64  `json:"amount"`
	OrderNo   string `json:"order_no,omitempty"`
	Balance   int64  `json:"balance"`
	Timestamp int64  `json:"timestamp"`
}

Balance represents a balance log entry.

func (*Balance) Marshal

func (b *Balance) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*Balance) Unmarshal

func (b *Balance) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Commission

type Commission struct {
	requestmeta.Metadata
	Type    uint16 `json:"type"`
	Amount  int64  `json:"amount"`
	OrderNo string `json:"order_no"`
	// Balance is the commission balance after the movement, so the balance
	// before it is Balance - Amount. Writers that do not know it leave it
	// out; an administrator's adjustment always records it.
	Balance   int64 `json:"balance,omitempty"`
	Timestamp int64 `json:"timestamp"`
}

Commission represents a commission log entry.

func (*Commission) Marshal

func (c *Commission) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*Commission) Unmarshal

func (c *Commission) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type FilterParams

type FilterParams struct {
	Page      int
	Size      int
	Type      uint8
	Data      string
	StartDate string
	EndDate   string
	Search    string
	ObjectID  int64
	SkipCount bool // when true, skip the COUNT(*) query (total will be 0)
	// ContentInt64 keeps the rows whose JSON content has each named
	// top-level field equal to the value, matched by the database's JSON
	// extraction rather than by a text pattern (which "12" would share with
	// "120"). The keys are field names of the content types in this package.
	ContentInt64 map[string]int64
}

FilterParams selects a page of the system log.

type Gift

type Gift struct {
	requestmeta.Metadata
	Type        uint16 `json:"type"`
	OrderNo     string `json:"order_no"`
	SubscribeId int64  `json:"subscribe_id"`
	Amount      int64  `json:"amount"`
	Balance     int64  `json:"balance"`
	Remark      string `json:"remark,omitempty"`
	Timestamp   int64  `json:"timestamp"`
}

Gift represents a gift log entry.

func (*Gift) Marshal

func (g *Gift) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*Gift) Unmarshal

func (g *Gift) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Login

type Login struct {
	requestmeta.IPMetadata
	Method    string `json:"method"`
	LoginIP   string `json:"login_ip"`
	UserAgent string `json:"user_agent"`
	Success   bool   `json:"success"`
	Timestamp int64  `json:"timestamp"`
	ActorID   int64  `json:"actor_id,omitempty"`
}

Login represents a login log entry.

func (*Login) Marshal

func (l *Login) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*Login) Request added in v1.21.0

func (l *Login) Request() requestmeta.Metadata

Request returns the request the login came from; its address is LoginIP.

func (*Login) Unmarshal

func (l *Login) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Message

type Message struct {
	requestmeta.Metadata
	To       string         `json:"to"`
	Subject  string         `json:"subject,omitempty"`
	Content  map[string]any `json:"content"`
	Platform string         `json:"platform"`
	Template string         `json:"template"`
	Status   uint8          `json:"status"` // 0: Attempt started, 1: Sent, 2: Failed
}

Message represents a message log entry.

func (*Message) Marshal

func (m *Message) Marshal() ([]byte, error)

Marshal encodes the entry as stored, redacted.

func (*Message) Unmarshal

func (m *Message) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, redacted.

type OrderCreated added in v1.20.1

type OrderCreated struct {
	requestmeta.Metadata
	OrderNo        string `json:"order_no"`
	OrderType      uint8  `json:"order_type"`
	Quantity       int64  `json:"quantity"`
	Price          int64  `json:"price"`
	Amount         int64  `json:"amount"`
	GiftAmount     int64  `json:"gift_amount"`
	Discount       int64  `json:"discount"`
	CouponDiscount int64  `json:"coupon_discount"`
	PaymentID      int64  `json:"payment_id"`
	Method         string `json:"method"`
	FeeAmount      int64  `json:"fee_amount"`
	SubscribeID    int64  `json:"subscribe_id,omitempty"`
	Source         string `json:"source"`
	Timestamp      int64  `json:"timestamp"`
}

OrderCreated represents a durable order-creation audit entry. It contains only the order summary needed for operations and risk analysis; coupon codes, gateway trade numbers and guest credentials are deliberately absent.

func (*OrderCreated) Marshal added in v1.20.1

func (o *OrderCreated) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*OrderCreated) Unmarshal added in v1.20.1

func (o *OrderCreated) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Register

type Register struct {
	requestmeta.IPMetadata
	AuthMethod string `json:"auth_method"`
	Identifier string `json:"identifier"`
	RegisterIP string `json:"register_ip"`
	UserAgent  string `json:"user_agent"`
	Timestamp  int64  `json:"timestamp"`
	ActorID    int64  `json:"actor_id,omitempty"`
}

Register represents a registration log entry.

func (*Register) Marshal

func (r *Register) Marshal() ([]byte, error)

Marshal encodes the entry as stored: the identifier redacted, the request bounded.

func (*Register) Request added in v1.21.0

func (r *Register) Request() requestmeta.Metadata

Request returns the request the registration came from; its address is RegisterIP.

func (*Register) Unmarshal

func (r *Register) Unmarshal(data []byte) error

Unmarshal decodes a stored entry: the identifier redacted, the request bounded.

type ResetSubscribe

type ResetSubscribe struct {
	requestmeta.Metadata
	Type      uint16 `json:"type"`
	UserId    int64  `json:"user_id"`
	OrderNo   string `json:"order_no,omitempty"`
	Timestamp int64  `json:"timestamp"`
}

ResetSubscribe represents a reset subscription log entry.

func (*ResetSubscribe) Marshal

func (r *ResetSubscribe) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*ResetSubscribe) Unmarshal

func (r *ResetSubscribe) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type ServerTraffic

type ServerTraffic struct {
	requestmeta.Metadata
	ServerId int64 `json:"server_id"` // Server ID
	Upload   int64 `json:"upload"`    // Upload traffic in bytes
	Download int64 `json:"download"`  // Download traffic in bytes
	Total    int64 `json:"total"`     // Total traffic in bytes (Upload + Download)
}

ServerTraffic represents a server traffic log entry.

func (*ServerTraffic) Marshal

func (s *ServerTraffic) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*ServerTraffic) Unmarshal

func (s *ServerTraffic) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type ServerTrafficRank

type ServerTrafficRank struct {
	Rank map[uint8]ServerTraffic `json:"rank"` // Key is rank ,type is ServerTraffic
}

ServerTrafficRank represents a server traffic rank entry.

func (*ServerTrafficRank) Marshal

func (s *ServerTrafficRank) Marshal() ([]byte, error)

Marshal encodes the ranking as stored, each entry's request bounded.

func (*ServerTrafficRank) Unmarshal

func (s *ServerTrafficRank) Unmarshal(data []byte) error

Unmarshal decodes a stored ranking, each entry's request bounded.

type Subscribe

type Subscribe struct {
	requestmeta.IPMetadata
	Token           string `json:"token"`
	UserAgent       string `json:"user_agent"`
	ClientIP        string `json:"client_ip"`
	UserSubscribeId int64  `json:"user_subscribe_id"`
	ActorID         int64  `json:"actor_id,omitempty"`
}

Subscribe represents a subscription log entry.

func (*Subscribe) Marshal

func (s *Subscribe) Marshal() ([]byte, error)

Marshal encodes the entry as stored: the token redacted, the request bounded.

func (*Subscribe) Request added in v1.21.0

func (s *Subscribe) Request() requestmeta.Metadata

Request returns the request that fetched the subscription.

func (*Subscribe) Unmarshal

func (s *Subscribe) Unmarshal(data []byte) error

Unmarshal decodes a stored entry: the token redacted, the request bounded.

type SystemLog

type SystemLog struct {
	Id        int64     `gorm:"primaryKey;AUTO_INCREMENT"`
	Type      uint8     `` /* 236-byte string literal not displayed */
	Date      string    `gorm:"index:idx_date;type:varchar(20);default:null;comment:Log Date"`
	ObjectID  int64     `gorm:"index:idx_object_id;type:bigint(20);not null;default:0;comment:Object ID"`
	Content   string    `gorm:"type:text;not null;comment:Log Content"`
	CreatedAt time.Time `gorm:"<-:create;comment:Create Time"`
}

SystemLog represents a log entry in the system.

func NewAdminActionLog added in v1.21.0

func NewAdminActionLog(action AdminAction) (*SystemLog, error)

NewAdminActionLog builds the system log row recording action, dated now. The row's object is the acting administrator (action.ActorID), so the trail of one administrator is an indexed read; the object the action changed is in the content. An unset Source is the HTTP API and an unset Timestamp is now.

func (SystemLog) TableName

func (SystemLog) TableName() string

TableName returns the name of the table for SystemLogs.

type Traffic

type Traffic struct {
	Download int64 `json:"download"`
	Upload   int64 `json:"upload"`
}

Traffic represents a subscription traffic log entry.

func (*Traffic) Marshal

func (s *Traffic) Marshal() ([]byte, error)

Marshal encodes the entry as stored.

func (*Traffic) Unmarshal

func (s *Traffic) Unmarshal(data []byte) error

Unmarshal decodes a stored entry.

type TrafficStat

type TrafficStat struct {
	requestmeta.Metadata
	Upload   int64 `json:"upload"`
	Download int64 `json:"download"`
	Total    int64 `json:"total"`
}

TrafficStat represents a daily traffic statistics log entry.

func (*TrafficStat) Marshal

func (t *TrafficStat) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*TrafficStat) Unmarshal

func (t *TrafficStat) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type Type

type Type uint8
const (
	TypeEmailMessage      Type = 10 // Message log
	TypeMobileMessage     Type = 11 // Mobile message log
	TypeSubscribe         Type = 20 // Subscription log
	TypeSubscribeTraffic  Type = 21 // Subscription traffic log
	TypeServerTraffic     Type = 22 // Server traffic log
	TypeResetSubscribe    Type = 23 // Reset subscription log
	TypeLogin             Type = 30 // Login log
	TypeRegister          Type = 31 // Registration log
	TypeBalance           Type = 32 // Balance log
	TypeCommission        Type = 33 // Commission log
	TypeGift              Type = 34 // Gift log
	TypeOrderCreated      Type = 35 // Order creation audit log
	TypeUnmatchedPayment  Type = 36 // Gateway-confirmed payment that could not settle an order
	TypeUserTrafficRank   Type = 40 // Top 10 User traffic rank log
	TypeServerTrafficRank Type = 41 // Top 10 Server traffic rank log
	TypeTrafficStat       Type = 42 // Daily traffic statistics log
	TypeAdminAction       Type = 50 // Administrator mutation audit log
)

func (Type) Uint8

func (t Type) Uint8() uint8

Uint8 converts Type to uint8.

type UnmatchedPayment added in v1.21.0

type UnmatchedPayment struct {
	requestmeta.Metadata
	OrderNo   string `json:"order_no"`
	TradeNo   string `json:"trade_no"`
	Platform  string `json:"platform"`
	Amount    int64  `json:"amount"`
	Currency  string `json:"currency"`
	Reason    string `json:"reason"`
	Timestamp int64  `json:"timestamp"`
}

UnmatchedPayment records a payment a gateway confirmed that could not settle its order: the order was already closed or finished, the trade differs from the one bound to it, or the gateway asks for manual review. It is the durable trace an operator refunds from, so it is a financial record and never expires.

func (*UnmatchedPayment) Marshal added in v1.21.0

func (u *UnmatchedPayment) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*UnmatchedPayment) Unmarshal added in v1.21.0

func (u *UnmatchedPayment) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type UserTraffic

type UserTraffic struct {
	requestmeta.Metadata
	SubscribeId int64 `json:"subscribe_id"` // Subscribe ID
	UserId      int64 `json:"user_id"`      // User ID
	Upload      int64 `json:"upload"`       // Upload traffic in bytes
	Download    int64 `json:"download"`     // Download traffic in bytes
	Total       int64 `json:"total"`        // Total traffic in bytes (Upload + Download)
}

UserTraffic represents a user traffic log entry.

func (*UserTraffic) Marshal

func (u *UserTraffic) Marshal() ([]byte, error)

Marshal encodes the entry as stored, its request bounded.

func (*UserTraffic) Unmarshal

func (u *UserTraffic) Unmarshal(data []byte) error

Unmarshal decodes a stored entry, its request bounded.

type UserTrafficRank

type UserTrafficRank struct {
	Rank map[uint8]UserTraffic `json:"rank"` // Key is rank ,type is UserTraffic
}

UserTrafficRank represents a user traffic rank entry.

func (*UserTrafficRank) Marshal

func (u *UserTrafficRank) Marshal() ([]byte, error)

Marshal encodes the ranking as stored, each entry's request bounded.

func (*UserTrafficRank) Unmarshal

func (u *UserTrafficRank) Unmarshal(data []byte) error

Unmarshal decodes a stored ranking, each entry's request bounded.

Jump to

Keyboard shortcuts

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