Documentation
¶
Overview ¶
Package audit provides functionality for the TDTP framework.
Index ¶
- func OpenDatabaseSink(dbType, dsn string) (*sql.DB, error)
- type Appender
- type AuditLogger
- func (l *AuditLogger) AddAppender(appender Appender)
- func (l *AuditLogger) Close() error
- func (l *AuditLogger) Flush() error
- func (l *AuditLogger) Log(ctx context.Context, entry *Entry) error
- func (l *AuditLogger) LogFailure(ctx context.Context, operation Operation, err error) *Entry
- func (l *AuditLogger) LogOperation(ctx context.Context, operation Operation, status Status) *Entry
- func (l *AuditLogger) LogSuccess(ctx context.Context, operation Operation) *Entry
- func (l *AuditLogger) RemoveAppender(appender Appender)
- type ConsoleAppender
- type DatabaseAppender
- func (da *DatabaseAppender) Append(ctx context.Context, entry *Entry) error
- func (da *DatabaseAppender) Close() error
- func (da *DatabaseAppender) Count(ctx context.Context, filter QueryFilter) (int64, error)
- func (da *DatabaseAppender) DeleteOlderThan(ctx context.Context, before time.Time) (int64, error)
- func (da *DatabaseAppender) Flush() error
- func (da *DatabaseAppender) Query(ctx context.Context, filter QueryFilter) ([]*Entry, error)
- type DatabaseAppenderConfig
- type Entry
- func (e *Entry) Clone() *Entry
- func (e *Entry) FilterByLevel(level Level) *Entry
- func (e *Entry) String() string
- func (e *Entry) ToJSON() ([]byte, error)
- func (e *Entry) ToJSONIndent() ([]byte, error)
- func (e *Entry) WithData(data any) *Entry
- func (e *Entry) WithDuration(duration time.Duration) *Entry
- func (e *Entry) WithError(err error) *Entry
- func (e *Entry) WithIPAddress(ip string) *Entry
- func (e *Entry) WithMetadata(key string, value any) *Entry
- func (e *Entry) WithRecordsAffected(count int64) *Entry
- func (e *Entry) WithResource(resource string) *Entry
- func (e *Entry) WithSessionID(sessionID string) *Entry
- func (e *Entry) WithSource(source string) *Entry
- func (e *Entry) WithTarget(target string) *Entry
- func (e *Entry) WithUser(user string) *Entry
- type FileAppender
- type FileAppenderConfig
- type Level
- type Logger
- type LoggerConfig
- type MultiAppender
- type NullAppender
- type NullLogger
- func (nl *NullLogger) Close() error
- func (nl *NullLogger) Flush() error
- func (nl *NullLogger) Log(ctx context.Context, entry *Entry) error
- func (nl *NullLogger) LogFailure(ctx context.Context, operation Operation, err error) *Entry
- func (nl *NullLogger) LogOperation(ctx context.Context, operation Operation, status Status) *Entry
- func (nl *NullLogger) LogSuccess(ctx context.Context, operation Operation) *Entry
- type Operation
- type QueryFilter
- type Status
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func OpenDatabaseSink ¶
OpenDatabaseSink opens the audit trail's own SQL connection. The caller owns closing it: DatabaseAppender.Close flushes+closes its prepared statement, not the *sql.DB itself — same as every other adapter.
SQLite allows only one writer at a time; without a busy_timeout, a second concurrent process (writing its own audit entry, or racing AutoCreateTable's CREATE TABLE IF NOT EXISTS on first run) gets an immediate SQLITE_BUSY "database is locked" instead of waiting — confirmed by running 8 processes concurrently before this handling: 3 of 8 failed outright. WAL mode lets readers proceed without blocking on a writer; busy_timeout (in the DSN, so every pooled connection carries it from open) makes genuinely concurrent writers wait and retry; the WAL switch itself goes through enableWAL. One connection per pool keeps writers serialized on top.
Types ¶
type Appender ¶
type Appender interface {
// Append - записать audit entry
Append(ctx context.Context, entry *Entry) error
// Close - закрыть appender
Close() error
}
Appender - интерфейс для записи audit логов
type AuditLogger ¶
type AuditLogger struct {
// contains filtered or unexported fields
}
AuditLogger - основной логгер аудита
func NewLogger ¶
func NewLogger(config LoggerConfig, appenders ...Appender) *AuditLogger
NewLogger - создать новый audit logger
func (*AuditLogger) AddAppender ¶
func (l *AuditLogger) AddAppender(appender Appender)
AddAppender - добавить appender
func (*AuditLogger) Close ¶
func (l *AuditLogger) Close() error
Close - закрыть logger и все appenders
func (*AuditLogger) Flush ¶
func (l *AuditLogger) Flush() error
Flush - сбросить буферы всех appenders
func (*AuditLogger) Log ¶
func (l *AuditLogger) Log(ctx context.Context, entry *Entry) error
Log - записать audit entry
func (*AuditLogger) LogFailure ¶
LogFailure - записать неудачную операцию
func (*AuditLogger) LogOperation ¶
LogOperation - создать и записать entry для операции
func (*AuditLogger) LogSuccess ¶
func (l *AuditLogger) LogSuccess(ctx context.Context, operation Operation) *Entry
LogSuccess - записать успешную операцию
func (*AuditLogger) RemoveAppender ¶
func (l *AuditLogger) RemoveAppender(appender Appender)
RemoveAppender - удалить appender
type ConsoleAppender ¶
type ConsoleAppender struct {
// contains filtered or unexported fields
}
ConsoleAppender - запись в console (stdout/stderr)
func NewConsoleAppender ¶
func NewConsoleAppender(level Level, formatJSON bool) *ConsoleAppender
NewConsoleAppender - создать console appender
func (*ConsoleAppender) Append ¶
func (ca *ConsoleAppender) Append(ctx context.Context, entry *Entry) error
Append - записать в console
func (*ConsoleAppender) Close ¶
func (ca *ConsoleAppender) Close() error
Close - закрыть console appender (noop)
type DatabaseAppender ¶
type DatabaseAppender struct {
// contains filtered or unexported fields
}
DatabaseAppender - запись в SQL базу данных
func NewDatabaseAppender ¶
func NewDatabaseAppender(config DatabaseAppenderConfig) (*DatabaseAppender, error)
NewDatabaseAppender - создать database appender
func (*DatabaseAppender) Append ¶
func (da *DatabaseAppender) Append(ctx context.Context, entry *Entry) error
Append - записать entry в базу данных
func (*DatabaseAppender) Close ¶
func (da *DatabaseAppender) Close() error
Close - закрыть database appender
func (*DatabaseAppender) Count ¶
func (da *DatabaseAppender) Count(ctx context.Context, filter QueryFilter) (int64, error)
Count - подсчитать количество audit entries
func (*DatabaseAppender) DeleteOlderThan ¶
DeleteOlderThan - удалить старые audit entries
func (*DatabaseAppender) Flush ¶
func (da *DatabaseAppender) Flush() error
Flush - сбросить batch queue
func (*DatabaseAppender) Query ¶
func (da *DatabaseAppender) Query(ctx context.Context, filter QueryFilter) ([]*Entry, error)
Query - запросить audit entries из базы
type DatabaseAppenderConfig ¶
type DatabaseAppenderConfig struct {
// DB - подключение к базе данных
DB *sql.DB
// TableName - имя таблицы для аудита
TableName string
// Level - уровень логирования
Level Level
// BatchSize - размер batch для группового insert (0 = без batching)
BatchSize int
// AutoCreateTable - автоматически создать таблицу если не существует
AutoCreateTable bool
}
DatabaseAppenderConfig - конфигурация database appender
type Entry ¶
type Entry struct {
// ID - уникальный идентификатор записи
ID string `json:"id"`
// Timestamp - время операции
Timestamp time.Time `json:"timestamp"`
// Operation - тип операции
Operation Operation `json:"operation"`
// Status - статус выполнения
Status Status `json:"status"`
// User - пользователь или система
User string `json:"user,omitempty"`
// Source - источник данных
Source string `json:"source,omitempty"`
// Target - целевая система
Target string `json:"target,omitempty"`
// Resource - ресурс (таблица, файл, и т.д.)
Resource string `json:"resource,omitempty"`
// RecordsAffected - количество затронутых записей
RecordsAffected int64 `json:"records_affected,omitempty"`
// Duration - длительность операции
Duration time.Duration `json:"duration,omitempty"`
// ErrorMessage - сообщение об ошибке
ErrorMessage string `json:"error_message,omitempty"`
// Metadata - дополнительные метаданные
Metadata map[string]any `json:"metadata,omitempty"`
// Data - данные операции (только для LevelFull)
Data any `json:"data,omitempty"`
// IPAddress - IP адрес источника
IPAddress string `json:"ip_address,omitempty"`
// SessionID - идентификатор сессии
SessionID string `json:"session_id,omitempty"`
}
Entry - запись в audit логе
func (*Entry) FilterByLevel ¶
FilterByLevel - фильтрация данных по уровню
func (*Entry) ToJSONIndent ¶
ToJSONIndent - преобразовать в форматированный JSON
func (*Entry) WithDuration ¶
WithDuration - установить длительность
func (*Entry) WithIPAddress ¶
WithIPAddress - установить IP адрес
func (*Entry) WithMetadata ¶
WithMetadata - добавить метаданные
func (*Entry) WithRecordsAffected ¶
WithRecordsAffected - установить количество записей
func (*Entry) WithResource ¶
WithResource - установить ресурс
func (*Entry) WithSessionID ¶
WithSessionID - установить ID сессии
func (*Entry) WithSource ¶
WithSource - установить источник
func (*Entry) WithTarget ¶
WithTarget - установить целевую систему
type FileAppender ¶
type FileAppender struct {
// contains filtered or unexported fields
}
FileAppender - запись в файл
func NewFileAppender ¶
func NewFileAppender(config FileAppenderConfig) (*FileAppender, error)
NewFileAppender - создать file appender
func (*FileAppender) Append ¶
func (fa *FileAppender) Append(ctx context.Context, entry *Entry) error
Append - записать entry в файл
func (*FileAppender) CurrentSize ¶
func (fa *FileAppender) CurrentSize() int64
CurrentSize - текущий размер файла
type FileAppenderConfig ¶
type FileAppenderConfig struct {
FilePath string
MaxSize int64 // В мегабайтах
MaxBackups int
Level Level
FormatJSON bool
}
FileAppenderConfig - конфигурация file appender
type Logger ¶
type Logger interface {
Log(ctx context.Context, entry *Entry) error
LogOperation(ctx context.Context, operation Operation, status Status) *Entry
LogSuccess(ctx context.Context, operation Operation) *Entry
LogFailure(ctx context.Context, operation Operation, err error) *Entry
Flush() error
Close() error
}
Logger - основной интерфейс для аудита
type LoggerConfig ¶
type LoggerConfig struct {
// AsyncMode - асинхронная запись в appenders
AsyncMode bool
// BufferSize - размер буфера для асинхронного режима
BufferSize int
// DefaultLevel - уровень логирования по умолчанию
DefaultLevel Level
// DefaultUser - пользователь по умолчанию (если не указан в entry)
DefaultUser string
// DefaultSource - источник по умолчанию
DefaultSource string
// FlushInterval - интервал автоматического flush (0 = отключен)
FlushInterval time.Duration
// OnError - callback при ошибке записи
OnError func(error)
}
LoggerConfig - конфигурация логгера
type MultiAppender ¶
type MultiAppender struct {
// contains filtered or unexported fields
}
MultiAppender - запись в несколько appenders
func NewMultiAppender ¶
func NewMultiAppender(appenders ...Appender) *MultiAppender
NewMultiAppender - создать multi appender
type NullAppender ¶
type NullAppender struct{}
NullAppender - пустой appender (для тестов)
type NullLogger ¶
type NullLogger struct{}
NullLogger - пустой logger (для тестов)
func (*NullLogger) Log ¶
func (nl *NullLogger) Log(ctx context.Context, entry *Entry) error
Log - ничего не делает
func (*NullLogger) LogFailure ¶
LogFailure - ничего не делает
func (*NullLogger) LogOperation ¶
LogOperation - ничего не делает
func (*NullLogger) LogSuccess ¶
func (nl *NullLogger) LogSuccess(ctx context.Context, operation Operation) *Entry
LogSuccess - ничего не делает
type Operation ¶
type Operation string
Operation - тип операции
const ( OpExport Operation = "export" OpImport Operation = "import" OpQuery Operation = "query" OpCreate Operation = "create" OpUpdate Operation = "update" OpDelete Operation = "delete" OpConnect Operation = "connect" OpDisconnect Operation = "disconnect" OpValidate Operation = "validate" OpMask Operation = "mask" OpNormalize Operation = "normalize" OpTransform Operation = "transform" OpSync Operation = "sync" // Синхронизация данных OpAuthenticate Operation = "authenticate" )
Audit operation types.