journal

package module
v1.0.20 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2021 License: Apache-2.0 Imports: 19 Imported by: 0

README

journal

Documentation

Index

Constants

View Source
const (
	ModelTypeUnknown journalModels = 0
	ModelTypeCrash   journalModels = 1
)

Типы для моделей по-умолчанию

View Source
const (
	IndexStart uint16 = 0x0001
	IndexModel uint16 = 0x0002
)

Константы индексов

Variables

View Source
var (
	ErrSelect   = errx.New("Ошибка загрузки записи журнала").WithReason(errx.ErrInternal)
	ErrInsert   = errx.New("Ошибка сохранения записи журнала").WithReason(errx.ErrInternal)
	ErrNotFound = errx.New("Не найдены подходящие записи журнала").WithReason(errx.ErrNotFound)
	ErrValidate = errx.New("Ошибка валидации входных данных").WithReason(errx.ErrBadRequest)
)

Ошибки реализаций

Functions

func Autovacuum

func Autovacuum(ctx context.Context, dbc db.Connection, journalID, crashID uint16)

func RegisterType

func RegisterType(types ...ModelType)

RegisterType - регистрация типа для корректной загрузки данных из БД

Types

type API

type API struct {
	ID     string            `json:"id,omitempty"`
	Start  time.Time         `json:"start"`
	Total  time.Duration     `json:"total"`
	Name   string            `json:"name"`
	User   string            `json:"user,omitempty"`
	Tags   map[string]string `json:"tags,omitempty"`
	Keys   map[string]string `json:"keys,omitempty"`
	Stages []*StageAPI       `json:"stages"`
}

type CrashHandler

type CrashHandler func(report *crash.Report, chain []*Stage)

CrashHandler - обработчик вызываемый при Crash

type Cursor

type Cursor interface {
	ID() string
	Empty() bool

	// NextPage - Подгрузка следующей страницы (но, возможно, с изменением размера)
	NextPage(size uint, services ...string) ([]Model, error)
}

Cursor - модель для крупных выборок с постраничкой

type Driver

type Driver interface {
	/*
		InsertEntry - сохранение записи журнала в БД.
	*/
	InsertEntry(*Entry) error
}

Driver - помощник сохранения журнала для провайдера

func NewFdbxDriver

func NewFdbxDriver(dbc db.Connection, journalID, crashID uint16) Driver

NewFdbxDriver - конструктор драйвера для сохранения через fdbx/v2

type Entry

type Entry struct {
	ID      string
	Host    string
	Service string
	Start   time.Time
	Total   time.Duration
	Chain   []*Stage
	Debug   map[string]string
}

Entry - основное представление записи журнала

func (Entry) String

func (v Entry) String() string

type Factory

type Factory interface {
	/*
		New - конструктор новой модели для сохранения
	*/
	New() Model

	/*
		ByID - получение записи журнала по идентификатору.

		* id не должен быть пустым и валидируется как core.UUID

		* Если не найден, ErrNotFound
		* Если что-то пошло не так, ErrSelect
	*/
	ByID(id string) (Model, error)

	/*
		ByModel - получение всех записей журнала по конкретной модели
	*/
	ByModel(mtp ModelType, mid string) ([]Model, error)

	/*
		Cursor - загрузка существующего курсора
	*/
	Cursor(id string) (_ Cursor, err error)

	/*
		ByDate - формирование курсора перебора по дате
	*/
	ByDate(from, to time.Time, page uint, services ...string) (_ Cursor, err error)

	/*
		ByModelDate - формирование курсора перебора по модели и дате
	*/
	ByModelDate(mtp ModelType, mid string, from, to time.Time, page uint, services ...string) (_ Cursor, err error)

	/*
		ImportEntries - массовая загрузка сразу нескольких моделей
	*/
	ImportEntries(...*Entry) error
}

Factory - поставщик моделей для работы в рамках транзакции

func NewFdbxFactory

func NewFdbxFactory(tx mvcc.Tx, journalID, crashID uint16) Factory

NewFdbxFactory - конструктор фабрики для загрузки через fdbx/v2

type GlogLogger

type GlogLogger struct{}

func (*GlogLogger) Error

func (l *GlogLogger) Error(tpl string, args ...interface{})

func (*GlogLogger) Print

func (l *GlogLogger) Print(tpl string, args ...interface{})

type Logger

type Logger interface {
	Print(tpl string, args ...interface{})
	Error(tpl string, args ...interface{})
}

Logger - обертка для записи журнала в консольку

type Model

type Model interface {
	/*
		Import - копирование основного представления в модель и сохранение в БД.
	*/
	Import(*Entry) error

	/*
		Export - основное представление записи журнала.
	*/
	Export(withCrash bool) (*Entry, error)

	/*
		ExportAPI - представление для выдачи журнала в файлах и пакетах
	*/
	ExportAPI(log Provider) *API

	/*
		ExportMonitoring - представление для выдачи журнала в мониторинге
	*/
	ExportMonitoring(log Provider) *ViewMonitoring
}

Model - запись журнала в БД

type ModelType

type ModelType interface {
	ID() int
	String() string
}

ModelType - абстрактный тип модели для логирования

type Provider

type Provider interface {
	/*
		Print - простая текстовая запись, для отладки или обозначения контрольной точки в процессе.

		* txt - текст записи, возможно форматная строка
		* args - аргументы форматной строки, могут отсутствовать, если текст не требует форматирования

		* Вызов функции создает новую отметку времени в цепочке
	*/
	Print(txt string, args ...interface{})

	/*
		Model - запись со ссылкой на какую-то модель в БД.

		* mtp - тип модели записи журнала, один из допустимых для логирования и поиска
		* mid - идентификатор модели, будет участвовать в поисковом индексе
		* txt - комментарий к записи, возможно форматная строка
		* args - аргументы форматной строки, могут отсутствовать, если текст не требует форматирования

		* Вызов функции создает новую отметку времени в цепочке
		* Если указан пустой идентификатор, то функция аналогична вызову Print
	*/
	Model(mtp ModelType, mid string, txt string, args ...interface{})

	/*
		Crash - логирование ошибки в журнал с формированием и записью отчета.

		* err - любая ошибка, которая будет возвращена как внешняя

		* Если err = nil, то возвращается тоже nil
		* Ошибка логируется как модель с идентификатором типа core.ModelTypeCrash
		* В текстовый комментарий к модели идет содержимое err.Error()
	*/
	Crash(err error) *crash.Report

	/*
		Close - закрытие модели, запись в glog и сохранение с помощью фабрики.

		* Обязательно требуется вызов этого метода, иначе все записи будут потеряны
	*/
	Close() *Entry

	/*
		Clone - создание нового чистого провайдера, с теми же параметрами.
	*/
	Clone() Provider

	/*
		SaveOnlyError - пометка о том, что сохранять запись в БД при закрытии нужно только в случае ошибки
	*/
	SaveOnlyError(opt bool)

	/*
		Debug - общая запись значений для дебага, который записывается в каждую ошибку.
		В записях журнала дебаг не сохраняется.

		* Старые значения из карты не удаляются.
		* Повторяющиеся - перезаписываются последними данными.
	*/
	Debug(dbg map[string]string)

	/*
		OnCrash - установка обработчика, который будет вызываться при Crash,
		когда возвращаемый crash.Report не равен nil

		* Переданная функция запускается в отдельной горутине
	*/
	OnCrash(handler CrashHandler)
}

Provider сборки и сохранения журнала

func NewProvider

func NewProvider(max int, crp crash.Provider, drv Driver, log Logger, srv string) Provider

NewProvider - конструктор сборщика журнала.

* max - максимальный разрешенный уровень логирования для записей * crp - провайдер отчетов об ошибках * drv - реализация драйвера для сохранения записи журнала * log - реализация логгера для записи журнала в консольку или файл * srv - наименование сервиса, инициатора записей в журнале

type Stage

type Stage struct {
	EnID string
	Text string
	Wait time.Duration
	Verb int
	Type int
	Fail *crash.Report
}

Stage - основное представление отметки в записи журнала

func (Stage) String

func (v Stage) String() string

type StageAPI

type StageAPI struct {
	Wait time.Duration `json:"wait"`
	Name string        `json:"name"`
	Type string        `json:"type,omitempty"`
	EnID string        `json:"enid,omitempty"`
}

type StageMonitoring

type StageMonitoring struct {
	Wait string `json:"wait"`
	Name string `json:"name"`
	Time uint64 `json:"time"`
	Type string `json:"type,omitempty"`
	EnID string `json:"enid,omitempty"`
}

type StrLogger

type StrLogger struct {
	Result string
	// contains filtered or unexported fields
}

func (*StrLogger) Error

func (l *StrLogger) Error(tpl string, args ...interface{})

func (*StrLogger) Print

func (l *StrLogger) Print(tpl string, args ...interface{})

type ViewMonitoring

type ViewMonitoring struct {
	ID      string             `json:"id,omitempty"`
	Host    string             `json:"host"`
	Service string             `json:"service"`
	Total   string             `json:"total"`
	Name    string             `json:"name"`
	User    string             `json:"user,omitempty"`
	Start   time.Time          `json:"start"`
	Time    uint64             `json:"time"`
	Tags    map[string]string  `json:"tags,omitempty"`
	Keys    map[string]string  `json:"keys,omitempty"`
	Stages  []*StageMonitoring `json:"stages"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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