43 lines
2.3 KiB
Go
43 lines
2.3 KiB
Go
// Package billing — слой записи статистики вызовов функций.
|
|
//
|
|
// Независим от типа БД: снаружи виден только интерфейс Store.
|
|
// Если BILLING_DSN не задан — работает NoopStore (тихо, не крашит).
|
|
package billing
|
|
|
|
import "time"
|
|
|
|
// TriggerType описывает источник вызова.
|
|
const (
|
|
TriggerHTTP = "http" // вызов через /fn/... снаружи
|
|
TriggerCron = "cron" // вызов по расписанию
|
|
TriggerConsole = "console" // вызов через кнопку «Вызов» в UI
|
|
TriggerEvent = "event" // lifecycle: create/delete/clone/update
|
|
)
|
|
|
|
// Invocation — одна запись о вызове или событии функции.
|
|
type Invocation struct {
|
|
Namespace string // пользовательский namespace (= пользователь)
|
|
FunctionName string // имя функции
|
|
TriggerType string // TriggerHTTP / TriggerCron / TriggerConsole / TriggerEvent
|
|
Route string // HTTP маршрут (/abc123/my-func), пусто для event
|
|
HTTPMethod string // GET/POST/... пусто для event
|
|
StartedAt time.Time // время начала
|
|
DurationMS int64 // длительность в миллисекундах (0 для event)
|
|
StatusCode int // HTTP статус ответа (0 для event)
|
|
ColdStart bool // true = первый вызов после создания/простоя
|
|
RequestBytes int64 // размер тела запроса
|
|
ResponseBytes int64 // размер тела ответа
|
|
ErrorMsg string // сообщение об ошибке, пусто если успех
|
|
RecordedBy string // "console" | "router"
|
|
EventType string // для TriggerEvent: "create" | "delete" | "clone" | "update" | "invoke"
|
|
}
|
|
|
|
// Store — интерфейс записи статистики.
|
|
// Реализации: pgStore (PostgreSQL через pgx), NoopStore (заглушка).
|
|
type Store interface {
|
|
// RecordInvocation записывает одно событие асинхронно (fire-and-forget).
|
|
RecordInvocation(inv Invocation)
|
|
// Close освобождает ресурсы (пул соединений и т.д.).
|
|
Close()
|
|
}
|