-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc.go
70 lines (62 loc) · 7.87 KB
/
doc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Package cfg
package cfg
/* ********************************************************************************************************************
Стадии работы дирижёра компонентов:
- Регистрация компонентов приложения.
- Запрет регистрации компонентов приложения, переход к подготовке и выполнению компонентов.
- Проверка конфликта компонентов по правилам "КОНФЛИКТУЕТ".
- Проверка зависимости компонентов по правилам "ТРЕБУЕТ".
- Сортировка компонентов по правилу "ДО".
- Сортировка компонентов по правилу "ПОСЛЕ".
- Создание списка очерёдности выполнения компонентов и очерёдности переключения уровней работы приложения.
- Инициализация командного интерфейса CLI.
- Выполнение для всех компонентов функции Initiate() с контролем времени выполнения и прерыванием.
- Выполнение для всех компонентов функции Do() с фильтрацией по runlevel и командой запуска приложения.
- Выполнение, в обратном порядке, для всех компонент функции Finalize().
- Отображение всех накопившихся ошибок и завершение приложения с передачей, большего по номеру, кода возврата.
******************************************************************************************************************** */
/*
Runlevel - Текущий уровень работы приложения.
Приложение при старте получает уровень работы 0.
Завершает свою работу при переключении уровня на значение 65535.
Уровень работы приложения может изменяться только в сторону увеличения.
Targetlevel - Целевой уровень работы приложения.
В момент запуска, приложение получает целевой уровень 65535, то есть, цель приложения
выполнится и завершится.
Если указано значение меньше значения по умолчанию, приложение на этом уровне, передаёт ответственность
за дальнейшее изменение уровня работы приложения, на компоненты приложения.
В процессе работы приложения, уровень Runlevel может изменяться и останавливаться компонентами приложения.
При достижении приложением уровня 65535, выполняются функций Finalize() компонентов
и завершение работы приложения.
-------------------------
Уровни работы приложения:
* 0 - [внутренний] Старт, запуск всех init(), запуск main() приложения.
* 1 - [внутренний] Инициализация менеджера логирования.
* 2 - [внутренний] Опрос компонентов, запуск функции Preferences(), сбор настроек компонентов (preferences).
* 3 - [внутренний] Проверка конфликтов компонентов (conflict).
* 4 - [внутренний] Проверка зависимостей компонентов (requires).
* 5 - [внутренний] Сортировка компонентов в соответствии с настройками (before) и (after).
* 6 - [внутренний] Построение шагов переключения уровня выполнения приложения после уровня 10 (runlevel).
* 7 - [внутренний] Инициализация параметров командного интерфейса (cli) и переменных окружения.
* 8 - [внутренний] Инициализации компонентов, запуск функции Initiate() у всех компонентов (initiate).
* 9 - [внутренний] Регистрация функций слежения за изменением уровня работы приложения.
* 10 - Начиная с этого уровня и до Targetlevel, выполняется последовательный запуск функции Do() у всех
- компонентов, либо при достижении указанного приложению Targetlevel, либо в соответствии с правилами
- запуска компонентов.
- Если у компоненты не указан runlevel, тогда функции Do() запускается на уровне 10 в соответствии с
- индексом очерёдности запуска компонент.
- Если у компоненты указан runlevel, тогда функции Do() запускается при достижении приложением runlevel.
- только при строгом равенстве указанному в компоненте, а если компонентов с одинаковым runlevel.
- несколько, тогда они так же запускаются на своём уровне в соответствии с индексом очерёдности запуска.
- Компоненты с указанной командой, запускаются на тех же условиях, но только если приложение
- запущено с указанием команды соответствующей указанной команде в компоненте.
* Targetlevel - Если указан Targetlevel>9 и Targetlevel<65535, и хотя бы одна функция Do() вернула done=true, тогда
- приложение снимает с себя ответственность за переключения уровня выполнения и в дальнейшем только
- ожидает изменение runlevel.
- Дальнейшее переключение runlevel полностью возлагается на компоненты приложения, которые к этому
- моменту должны были запустить свои "потоки" и полностью контролировать приложение.
- Факт готовности компоненты к дальнейшему контролю над runlevel и фиксируется флагом done=true.
* 65535 - [внутренний] Запуск функций Finalize() у всех компонентов, ожидание завершения всех компонентов,
— завершение приложения с выводом всех накопленных ошибок и кодом возврата приложения.
-------------------------
*/