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
- Variables
- func BindFlags(flagSet *pflag.FlagSet, container container.Container) error
- func New(closer closer.Closer, config *Config, metrics *metric.Metric, ...) (*file.File, error)
- func NewWithConfigurator(closer closer.Closer, config *Config, configurator configurator.Configurator, ...) (*file.File, error)
- type Buffer
- type Config
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 NewWithConfigurator ¶
Types ¶
type Buffer ¶
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)
Click to show internal directories.
Click to hide internal directories.