app

package
v1.5.6 Latest Latest
Warning

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

Go to latest
Published: Oct 24, 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, читается из переменной окруженияCONTAINER_ID container_id
ContainerName Имя контейнера с приложением, в кластере k8s, читается из переменной окруженияCONTAINER_NAME container_name
HostName Имя пода в кластере k8s, выданный ОС, читается из переменной окруженияHOSTNAME 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"
	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 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