file

package
v1.9.14 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2024 License: MIT Imports: 20 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
Метрики

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

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

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

go_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"

	NamePatternDefault      = "data_" + namer.UnixTimeNanoPattern + ".bin"
	RotationStrategyDefault = SizeRotationStrategy
	RotationSizeDefault     = 10 * size.MiB
	CompressorDefault       = CompressorNone
	AutoDeleteDefault       = false
)

Variables

View Source
var (
	DirectoryDefault                 = filepath.Join(os.TempDir(), "go_app")
	RotationSizeHumanReadableDefault = size.FormatBinary(RotationSizeDefault)
)
View Source
var Component = &app.Component{
	Dependencies: app.Components{
		logger.Component,
		configurator.Component,
		metric.Component,
	},
	Constructor: app.Constructor(func(container container.Container) error {
		return container.Provides(
			NewConfig,
			NewWithConfigurator,
			func(buffer *file.File) Buffer { return buffer },
		)
	}),
	BindFlags: app.BindFlags(BindFlags),
}

Functions

func BindFlags added in v1.9.14

func BindFlags(flagSet *pflag.FlagSet, container container.Container) error

func New

func New(closer closer.Closer, config *Config, metrics *metric.Metric, informer logger.Informer) (*file.File, error)

func NewWithConfigurator

func NewWithConfigurator(
	closer closer.Closer,
	config *Config,
	configurator configurator.Configurator,
	metric *metric.Metric,
	informer logger.Informer,
) (*file.File, error)

Types

type Buffer added in v1.8.12

type Buffer io.ReadWriteCloser

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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