memory

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2023 License: MIT Imports: 15 Imported by: 0

README

Сканер занятой памяти.

Компонент следит за использованной памятью приложения и меняет свой статус, в зависимости от кол. используемой памяти и установленного лимита. Реализует интерфейс Stater, который доступен в контейнере объектов. При нормальном потреблении памяти, имеет состояние Normal.

type Stater interface {
	Serve(ctx context.Context)
	State() State
}
Объект конфигурации.
type Config struct {
	WarnPercent     uint8
	CriticalPercent uint8
	ScanInterval    time.Duration
}

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

Поле Описание Значение по умолчанию
WarnPercent Процент занятой памяти, при котором будет применено состояние Warning, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --memory.percent.warn
- переменная окружения MEMORY_PERCENT_WARN
- значение в конфиг файле memory.percent.warn
60
CriticalPercent Процент занятой памяти, при котором будет применено состояние Critical, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --memory.percent.critical
- переменная окружения MEMORY_PERCENT_CRITICAL
- значение в конфиг файле memory.percent.critical
95
ScanInterval Интервал сканирования памяти, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --memory.scan_interval
- переменная окружения MEMORY_SCAN_INTERVAL
- значение в конфиг файле memory.scan_interval
1s

Documentation

Index

Constants

View Source
const (
	WarnPercentFieldName     = "memory.percent.warn"
	CriticalPercentFieldName = "memory.percent.critical"
	ScanIntervalFieldName    = "memory.scan_interval"

	WarnPercentDefault     = uint8(60)
	CriticalPercentDefault = uint8(95)
	ScanIntervalDefault    = time.Second
)

Variables

View Source
var Component = &app.Component{
	Dependencies: app.Components{
		logger.Component,
		configurator.Component,
		closer.OsSignalComponent,
		quota.Component,
		info.Component,
	},
	Constructor: func(container container.Container) error {
		return container.Provides(
			NewConfig,
			NewReConfigurationWithConfigurator,
			func(reConfiguration *ReConfiguration) Stater { return reConfiguration },
		)
	},
	BindFlags: func(flagSet *pflag.FlagSet, container container.Container) error {
		return container.Invoke(func(config *Config) {
			flagSet.Uint8Var(&config.WarnPercent, WarnPercentFieldName, WarnPercentDefault, fmt.Sprintf(
				"percentage of used memory, after which the value will be set to %s",
				Warning,
			))
			flagSet.Uint8Var(&config.CriticalPercent, CriticalPercentFieldName, CriticalPercentDefault, fmt.Sprintf(
				"percentage of used memory, after which the value will be set to %s",
				Critical,
			))
			flagSet.DurationVar(&config.ScanInterval, ScanIntervalFieldName, ScanIntervalDefault, "timeout between memory scans")
		})
	},
	Serve: func(c container.Container) error {
		stater, err := container.Get[*ReConfiguration](c)
		if err != nil {
			return err
		}

		closer, err := container.Get[closer.Closer](c)
		if err != nil {
			return err
		}

		reConfiguration, err := container.Get[configurator.ReConfiguration](c)
		if err != nil {
			return err
		}

		informer, err := container.Get[logger.Informer](c)
		if err != nil {
			return err
		}

		reConfiguration.Registration(stater)
		informer.Info("memoryStater: registration in the reConfigurator")

		info, err := container.Get[info.Info](c)
		if err != nil {
			return err
		}

		config, err := container.Get[*Config](c)
		if err != nil {
			return err
		}

		info.Registration("memory", config)

		stater.Serve(closer.GetContext())

		return nil
	},
}

Functions

This section is empty.

Types

type Config

type Config struct {
	WarnPercent     uint8
	CriticalPercent uint8
	ScanInterval    time.Duration
}

func Configuration

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

func NewConfig

func NewConfig() *Config

type ReConfiguration

type ReConfiguration struct {
	// contains filtered or unexported fields
}

func NewReConfiguration

func NewReConfiguration(quota quota.Quota, logger logger.Logger, config *Config) *ReConfiguration

func NewReConfigurationWithConfigurator

func NewReConfigurationWithConfigurator(quota quota.Quota, logger logger.Logger, config *Config, configurator configurator.Configurator) *ReConfiguration

func (*ReConfiguration) ReConfiguration

func (reConfiguration *ReConfiguration) ReConfiguration(configurator configurator.Configurator) error

func (*ReConfiguration) Serve

func (reConfiguration *ReConfiguration) Serve(ctx context.Context)

func (*ReConfiguration) State

func (reConfiguration *ReConfiguration) State() State

func (*ReConfiguration) Stater

func (reConfiguration *ReConfiguration) Stater() Stater

type State

type State uint8
const (
	Normal   State = iota
	Warning  State = iota
	Critical State = iota
)

func (State) String

func (i State) String() string

type Stater

type Stater interface {
	Serve(ctx context.Context)
	State() State
}

func New

func New(config *Config, logger logger.Logger, quota quota.Quota) Stater

func NewWithConfigurator

func NewWithConfigurator(
	config *Config,
	configurator configurator.Configurator,
	logger logger.Logger,
	quota quota.Quota,
) (Stater, error)

Jump to

Keyboard shortcuts

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