app

package
v1.1.3 Latest Latest
Warning

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

Go to latest
Published: Oct 6, 2023 License: MIT Imports: 7 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 BinFlags func(flagSet *pflag.FlagSet, container container.Container) error
type Serve func(container container.Container) error

type Component struct {
	Constructor Constructor
	BindFlags   BinFlags
	Serve       Serve
}

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

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

Поле Описание
Constructor Конструктор компонента, чаще всего, в этом методе происходит передача функции конструктора в контейнер объектов
BindFlags Метод в котором проходит бинд флагов командной строки с полями в файле конфигурации компонента
Serve Метод деионизации процесса компонента, запускается в отдельной goroutine

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

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

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

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

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

Documentation

Index

Constants

View Source
const (
	NamespaceFieldName       string = "NAMESPACE"
	ClusterFieldName                = "CLUSTER"
	DvContainerIdFieldName          = "DV_CONTAINER_ID"
	DvContainerNameFieldName        = "DV_CONTAINER_NAME"
	DvHostnameFieldName             = "DV_HOSTNAME"

	NamespaceDefault       = "namespace"
	ClusterDefault         = "cluster"
	DvContainerIdDefault   = "container_id"
	DvContainerNameDefault = "container_name"
	DvHostnameDefault      = "dv_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 BinFlags

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

type Component

type Component struct {
	Dependencies Components
	Constructor  Constructor
	BindFlags    BinFlags
	Serve        Serve
	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

Jump to

Keyboard shortcuts

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