app

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: 8 Imported by: 0

README

Каркас приложения.

Это объект, который упрощает разрешение зависимостей за счет контейнера объектов и упрощает старт приложения, а так же "демонизацию" и разбиение на разные goroutine внутренних процессов приложения.

Состав пакета:
  • [Объект конфигурации](#Объект конфигурации.);
  • [Объект компонента](#Объект компонента.);
  • [Объект приложения](#Объект приложения.).
Объект конфигурации.
type Config struct {
Name          string
PID           uint64
Namespace     string
Cluster       string
ContainerId   string
ContainerName string
HostName      string
}

Содержит общую информацию о приложении, собранную из разных мест.

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

Поле Описание Значение по умолчанию
Name Имя приложения, переданное при создание объекта приложения
PID Идентификатор приложения, выданный ОС
Cluster Имя кластера k8s в котором развернут контейнер с приложением, читается из переменной окруженияCLUSTER cluster
Namespace Namespace k8s контейнера в кластере, читается из переменной окруженияNAMESPACE namespace
ContainerId Идентификатор контейнера, внутри кластера k8s, читается из переменной окруженияDV_CONTAINER_ID container_id
ContainerName Имя контейнера с приложением, в кластере k8s, читается из переменной окруженияDV_CONTAINER_NAME container_name
HostName Имя пода в кластере k8s, читается из переменной окруженияDV_HOSTNAME dv_hostname
Объект компонента.
type Constructor func (container container.Container) error
type BindFlags func (flagSet *pflag.FlagSet, container container.Container) error
type Serve func(container container.Container) error
type ServeChan func (container container.Container, isServeChan chan struct{}) error
type Run func (container container.Container) error

type Component struct {
Dependencies Components
Constructor  Constructor
ServeChan ServeChan
Run       Run
}

Объект в котором описывается компонент приложения.

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

Поле Описание
Dependencies Список ссылок на компоненты, от которых зависит описываемый компонент, компоненты из этого списка инициализируются перед инициализацией описываемого ккомпонента
Constructor Конструктор компонента, чаще всего, в этом методе происходит передача функции конструктора в контейнер объектов
BindFlags Метод в котором проходит бинд флагов командной строки с полями в файле конфигурации компонента
ServeChan Метод деионизации процесса компонента, запускается в отдельной goroutine, требует обратного сигнала о запуске компонента, на запуск компонента дается 500мс, если за отведенное время сигнал не будет получен, прилодение завершится с ошибкой
Run Метод инициализации компонента, вызвается в том же потоке, в котором проходит иницализаци приложения

Все поля являются не обязательными, каждый компонент должен сам решать, что именно он будет добавлять в контейнер объектов, какие имена флагов, как именно и с каким именем биндить, во избежание дублей флагов командой строки, следует придерживаться данного формата составления имени флага: <имя компонента>.<имя флага>.

Объект приложения.
type App struct {
container  container.Container
components []*Component
}

Объект, хранит список заданных компонентов приложения, имеет ряд следующих методов:

  • AddComponents - добавляет переданные компоненты в общий список, вызывает метод Constructor, если он установлен, для добавления компонента в контейнер объектов;
  • BindFlags - проходится по каждому компоненту и вызывает метод BindFlags, если он установлен;
  • Serve - проходится по каждому компоненту и вызывает методы:
    • Run, если он установлен, метод вызывается в том же потоке, что и метод Serve, что позволяет делать иницализацию компонентов последовательной;
    • ServeChan, если он установлен, каждый в своей отдельной goroutine и дожидается их завершения.

Пакет так же имеет метод конструктор func NewApp(name string) (*App, error), который создает и возвращает новый объект приложения, а так же, добавляет [объект конфигурации](#Объект конфигурации.) в контейнер объектов.

Documentation

Index

Constants

View Source
const (
	NamespaceFieldName     = "NAMESPACE"
	ClusterFieldName       = "CLUSTER"
	ContainerIdFieldName   = "CONTAINER_ID"
	ContainerNameFieldName = "CONTAINER_NAME"
	HostnameFieldName      = "HOSTNAME"

	NamespaceDefault     = "namespace"
	ClusterDefault       = "cluster"
	ContainerIdDefault   = "container_id"
	ContainerNameDefault = "container_name"
	HostnameDefault      = "hostname"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type App

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

func NewApp

func NewApp(name string) (*App, error)

func (*App) AddComponents

func (app *App) AddComponents(components ...*Component) error

func (*App) BindFlags

func (app *App) BindFlags(flagSet *pflag.FlagSet) error

func (*App) BuildComponents

func (app *App) BuildComponents(components ...*Component) error

func (*App) BuildContainer

func (app *App) BuildContainer() error

func (*App) Components

func (app *App) Components() Components

func (*App) Container

func (app *App) Container() container.Container

func (*App) Serve

func (app *App) Serve() error

type BindFlags added in v1.8.12

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

type Component

type Component struct {
	Dependencies Components
	Constructor  Constructor
	BindFlags    BindFlags
	// Deprecated: should use the ServeChan method
	Serve     Serve
	ServeChan ServeChan
	Run       Run
	// contains filtered or unexported fields
}

func (*Component) Pointer

func (component *Component) Pointer() uintptr

type Components

type Components []*Component

func (Components) Exist

func (components Components) Exist(component *Component) bool

type Config

type Config struct {
	Name          string
	PID           uint64
	Namespace     string
	Cluster       string
	ContainerId   string
	ContainerName string
	HostName      string
}

func Configuration

func Configuration(config *Config) *Config

func NewConfig

func NewConfig() *Config

type Constructor

type Constructor func(container container.Container) error

type Run

type Run func(container container.Container) error

type Serve

type Serve func(container container.Container) error

type ServeChan added in v1.8.12

type ServeChan func(container container.Container, isServeChan chan struct{}) error

Jump to

Keyboard shortcuts

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