file

package
v1.5.9 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2023 License: MIT Imports: 17 Imported by: 0

README

Буфер для хранения данных в файле.

Реализует интерфейс io.ReadWriteCloser и стратегию хранения данных в файле. Для хранения данных использует пакет file.

Объект конфигурации..
type Config struct {
	Directory                 string
	NamePattern               string
	NameForMetric             string
	RotationStrategy          string
	RotationSizeHumanReadable string
	RotationSize              uint64
	Compressor                string
	AutoDelete                bool
}

Описание полей:

Поле Описание Значение по умолчанию Доступные значения
Directory Путь до директории хранения файла, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.directory
- переменная окружения BUFFER_FILE_DIRECTORY
- значение в конфиг файле buffer.file.directory
<os_temp_dir>/app
NamePattern Паттерн наименования шардов файла, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.name_pattern
- переменная окружения BUFFER_FILE_NAME_PATTERN
- значение в конфиг файле buffer.file.name_pattern
data_${unix_time_nano}.bin все доступные значения паттерна, перечислены в пакете file.
NameForMetric Имя буфера в метриках, устанавливает в ручную, должно быть установлено на этапе конфигурирования приложения, до создание объекта буфера
RotationStrategy Стратегия ротации шардов файла, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.rotation.strategy
- переменная окружения BUFFER_FILE_ROTATION_STRATEGY
- значение в конфиг файле buffer.file.rotation.strategy
size - size - ротация шардов по размеру шарда;
- day - ротация шардов раз в день;
- hour - ротация шардов каждый час.
RotationSizeHumanReadable Размер файла при котором создается новый шард файла, в человека удобном формате, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.rotation.size
- переменная окружения BUFFER_FILE_ROTATION_SIZE
- значение в конфиг файле buffer.file.rotation.size
10MiB
RotationSize Размер файла при котором создается новый шард файла в байтах, парсится из поле RotationSizeHumanReadable либо устанавливается вручную, если установлено вручную, то значение в поле RotationSizeHumanReadable игнорируется, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.rotation.size
- переменная окружения BUFFER_FILE_ROTATION_SIZE
- значение в конфиг файле buffer.file.rotation.size
10485760
Compressor Тип алгоритма сжатия, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.compressor
- переменная окружения BUFFER_FILE_COMPRESSOR
- значение в конфиг файле buffer.file.compressor
none - none - не использовать сжатие;
- true - автоматический выбор алгоритма сжатия в зависимости от ОС;
- tar_gz - сжимает готовый шард в архив tar.gz;
- zip - сжимает готовый шард в архив zip;
- lz4 - сжимает входящий поток байтов алгоритмом lz4.
AutoDelete Если true, то после полного прочтения шарда, он будет автоматически удален, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --buffer.file.auto_delete
- переменная окружения BUFFER_FILE_AUTO_DELETE
- значение в конфиг файле buffer.file.auto_delete
false
Метрики

Метрики добавляются автоматически и не могут быть отключены.

buffer_file_count - счетчик кол. шардов. Доступные лейблы в метрике:

  • app - имя приложения;
  • name - имя буфера из поля конфига NameForMetric.

buffer_file_bytes - счетчик кол. записанных и прочитанных байтов. Доступные лейблы в метрике:

  • app - имя приложения;
  • name - имя буфера из поля конфига NameForMetric;
  • action - тип действия, запись - write, чтение - read;
  • compressor - тип выбранного алгоритма сжатия, если выбран алгоритм сжатия lz4 то метрика будет писаться дважды, на каждое действие записи/чтения, до сжатия и после сжатия.

Documentation

Index

Constants

View Source
const (
	DirectoryFieldName                 = "buffer.file.directory"
	NamePatternFieldName               = "buffer.file.name_pattern"
	RotationStrategyFieldName          = "buffer.file.rotation.strategy"
	RotationSizeHumanReadableFieldName = "buffer.file.rotation.size"
	CompressorFieldName                = "buffer.file.compressor"
	AutoDeleteFieldName                = "buffer.file.auto_delete"

	DayRotationStrategy  = "day"
	HourRotationStrategy = "hour"
	SizeRotationStrategy = "size"

	CompressorNone  = "none"
	CompressorTrue  = "true"
	CompressorTarGZ = "tar_gz"
	CompressorZIP   = "zip"
	CompressorLZ4   = "lz4"

	NamePatternDefault      = "data_" + namer.UnixTimeNanoPattern + ".bin"
	RotationStrategyDefault = SizeRotationStrategy
	RotationSizeDefault     = 10 * size.MiB
	CompressorDefault       = CompressorNone
	AutoDeleteDefault       = false
)
View Source
const (
	ActionFieldNameMetric     = "action"
	CompressorFieldNameMetric = "compressor"
	NameFieldNameMetric       = "name"
	ActionWriteMetric         = "write"
	ActionReadMetric          = "read"
)

Variables

View Source
var (
	DirectoryDefault                 = filepath.Join(os.TempDir(), "go_app")
	RotationSizeHumanReadableDefault = size.FormatBinary(RotationSizeDefault)
)

Functions

func New

func New(ctx context.Context, config *Config, appConfig *app.Config) (*file.File, error)

func NewWithConfigurator

func NewWithConfigurator(
	ctx context.Context,
	config *Config,
	configurator configurator.Configurator,
	appConfig *app.Config,
) (*file.File, error)

Types

type Config

type Config struct {
	Directory                 string
	NamePattern               string
	NameForMetric             string
	RotationStrategy          string
	RotationSizeHumanReadable string
	RotationSize              uint64
	Compressor                string
	AutoDelete                bool
}

func Configuration

func Configuration(config *Config, configurator configurator.Configurator) (*Config, error)

func NewConfig

func NewConfig() *Config

Jump to

Keyboard shortcuts

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