Add Archimate model generation scripts, data, and HTML preview for UGMK technology layer
This commit is contained in:
parent
390cf969d6
commit
dab050c6ed
94
docs/architecture/README.md
Normal file
94
docs/architecture/README.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# Модель архитектуры в нотации ArchiMate
|
||||||
|
|
||||||
|
Модель контура **УГМК** (`d8-ugmk-prod`) в двух форматах — содержимое одинаковое:
|
||||||
|
|
||||||
|
| Файл | Формат | Чем открывать |
|
||||||
|
|---|---|---|
|
||||||
|
| `ugmk-technology.archimate` | нативный формат [Archi](https://www.archimatetool.com/) | десктопный Archi: File → Open |
|
||||||
|
| `ugmk-technology.xml` | The Open Group ArchiMate Model Exchange File Format 3.1 | любой инструмент с импортом Open Exchange, в том числе archi-online.com: кнопка **Import, save, and create models** → Open Exchange |
|
||||||
|
| `preview.html` | SVG-рендер всех представлений | любой браузер, без установки чего-либо |
|
||||||
|
|
||||||
|
`ugmk-technology.xml` проверен на соответствие официальной схеме `archimate3_Diagram.xsd` — валидатор ошибок не нашёл. Если сторонний инструмент не берёт нативный `.archimate`, используйте его.
|
||||||
|
|
||||||
|
Отличие обменной версии: вложенность узлов на схемах развёрнута в плоский список с абсолютными координатами (в обменном формате трактовка координат вложенного узла неоднозначна между реализациями). Визуально раскладка та же, но компоненты внутри кластера не будут «вложены» в него как дочерние — при перетаскивании контейнера содержимое останется на месте.
|
||||||
|
|
||||||
|
Сейчас в модели проработан **технологический слой**. Прикладной слой присутствует только как потребители технологических сервисов — межсервисные REST-связи приложений и бизнес-слой будут добавлены отдельно.
|
||||||
|
|
||||||
|
## Состав
|
||||||
|
|
||||||
|
70 элементов, 153 отношения, 9 представлений.
|
||||||
|
|
||||||
|
| Представление | Что показывает |
|
||||||
|
|---|---|
|
||||||
|
| T1 | Кластер, ПО внутри него, внешние узлы, технологические сервисы. Без приложений — обзорная схема |
|
||||||
|
| T2 | Маршрутизация HTTPS — 21 приложение |
|
||||||
|
| T3 | Аутентификация OIDC — 10 |
|
||||||
|
| T4 | Управление секретами — 25 |
|
||||||
|
| T5 | Реляционное хранилище — 23 |
|
||||||
|
| T6 | Кэш — 3 |
|
||||||
|
| T7 | Событийная шина — 12 |
|
||||||
|
| T8 | Очередь сообщений AMQP — 11 |
|
||||||
|
| T9 | Объектное хранилище — 13 |
|
||||||
|
|
||||||
|
Разбиение на представления по сервисам сделано осознанно: все 118 связей «сервис → приложение» на одной схеме нечитаемы. В модели они лежат одним набором, представления — это срезы.
|
||||||
|
|
||||||
|
Метамодель намеренно урезана. Технологический слой: `Node`, `SystemSoftware`, `TechnologyService`, `Artifact`. Прикладной: `ApplicationComponent`. Отношения: `Composition`, `Realization`, `Serving`, `Assignment`. Не используются `Device`, `Path`, `CommunicationNetwork`, `TechnologyFunction` — в этом контуре они не несут информации.
|
||||||
|
|
||||||
|
## Откуда взяты связи
|
||||||
|
|
||||||
|
Не нарисованы от руки. Выведены из манифестов, поэтому проверяемы:
|
||||||
|
|
||||||
|
| Связь | Источник |
|
||||||
|
|---|---|
|
||||||
|
| Состав кластера | `clusters/d8-ugmk-prod/kustomization.yaml` |
|
||||||
|
| Версии чартов | `infrastructure/<comp>/base/helmrelease.yaml` |
|
||||||
|
| Приложение → PostgreSQL | env `POSTGRES_*`, `DB__HOST` или путь Vault `secrets/data/apps/<app>/postgres` |
|
||||||
|
| Приложение → RabbitMQ | env `RABBITMQ*`, `AMQP__*` |
|
||||||
|
| Приложение → Kafka | env `KAFKA*`, `BOOTSTRAP_SERVERS` |
|
||||||
|
| Приложение → S3 | env `S3__*`, `S3_ENDPOINT`, `S3_ACCESS`, `S3_BUCKET` |
|
||||||
|
| Приложение → Redis | env `REDIS_HOST`, `REDIS__*` |
|
||||||
|
| Приложение → Vault | аннотации `vault.hashicorp.com/agent-inject*` |
|
||||||
|
| Приложение → Zitadel | env `ZITADEL*`, `JWKS`, `OIDC`, секрет `jwt-public` |
|
||||||
|
| Приложение → Istio | `service:` в маршрутах `infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml` (закомментированные не считаются) |
|
||||||
|
|
||||||
|
Сканируются `*.yaml` в `apps/<app>/base/` и `apps/<app>/d8-ugmk-prod/`; документация (`*.md`) игнорируется, иначе прозаические упоминания переменных дают ложные срабатывания.
|
||||||
|
|
||||||
|
## Что вскрылось при построении
|
||||||
|
|
||||||
|
- **Camunda развёрнута, но потребителей нет.** `camunda-contour` 11.0.14 в контуре есть, наружу опубликованы Operate, Tasklist, Optimize, Identity, Keycloak — но ни одно приложение не сконфигурировано на Zeebe. Единственные ссылки на Camunda в `apps/` — оверлеи `cde/brusnika-prod` и `cde/brusnika-stage`.
|
||||||
|
- **Четыре приложения ни к чему не подключены**: `projects`, `prescriptions`, `cross-section`, `faas` — не используют ни один технологический сервис и не имеют маршрута в `istio-config`. В модели они есть, но ни в одно представление не попали. Для сравнения: в `yc-ecp` маршрут `/projects/static/` существует.
|
||||||
|
- **Наблюдаемости в контуре нет** — ни vmstack, ни prometheus-stack, ни openobserve, ни otel, в отличие от Brusnika и WB. Если мониторинг там есть, он живёт вне этого репозитория.
|
||||||
|
- **Сертификаты самоподписанные** — `ClusterIssuer sarex-selfsigned`, не Let's Encrypt.
|
||||||
|
- **Redis только у `pm`.** В остальных приложениях `REDIS_HOST` встречается лишь в текстах `CONFIGURATION.md`.
|
||||||
|
- **Ingress прибит к одному узлу** `um-sarex-k8s-frontend-01` через `nodeSelector` — единственная точка отказа внешнего трафика.
|
||||||
|
- **S3 внешний** (`s3.uralmine.com`), MinIO в контуре не разворачивается.
|
||||||
|
|
||||||
|
## Скрипты
|
||||||
|
|
||||||
|
`scan_ugmk.py` — строит матрицу «приложение → технологический сервис» и кладёт в `matrix.json`. Полезен, когда состав контура изменился: перезапустить и сравнить.
|
||||||
|
|
||||||
|
```
|
||||||
|
py scan_ugmk.py matrix.json
|
||||||
|
```
|
||||||
|
|
||||||
|
`build_archimate.py` — одноразовая генерация модели из `matrix.json`.
|
||||||
|
|
||||||
|
```
|
||||||
|
py build_archimate.py ugmk-technology.archimate
|
||||||
|
```
|
||||||
|
|
||||||
|
`to_open_exchange.py` — конвертирует нативный файл в обменный формат. Запускать после каждой правки модели, иначе `.xml` разъедется с `.archimate`.
|
||||||
|
|
||||||
|
```
|
||||||
|
py to_open_exchange.py ugmk-technology.archimate ugmk-technology.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
`render_preview.py` — рисует все представления в один HTML со встроенным SVG. Пересобирать вместе с обменным форматом.
|
||||||
|
|
||||||
|
```
|
||||||
|
py render_preview.py ugmk-technology.archimate preview.html
|
||||||
|
```
|
||||||
|
|
||||||
|
**Внимание:** после того как модель отредактирована в Archi, источником истины становится `.archimate`, а повторный запуск генератора затрёт расстановку элементов. Пересобирать целиком имеет смысл только при перестройке модели с нуля.
|
||||||
|
|
||||||
|
Требуется Python 3, внешних зависимостей нет. На этой машине запускать через `py`, а не `python`.
|
||||||
255
docs/architecture/build_archimate.py
Normal file
255
docs/architecture/build_archimate.py
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
"""Собирает .archimate (формат Archi 5) для технологического слоя контура УГМК."""
|
||||||
|
import json, pathlib, sys, io
|
||||||
|
from xml.sax.saxutils import escape, quoteattr
|
||||||
|
|
||||||
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||||||
|
HERE = pathlib.Path(__file__).parent
|
||||||
|
DATA = json.loads((HERE / "matrix.json").read_text(encoding="utf-8"))
|
||||||
|
OUT = pathlib.Path(sys.argv[1])
|
||||||
|
|
||||||
|
elements = [] # (folder, id, type, name, doc)
|
||||||
|
relations = [] # (id, type, src, tgt)
|
||||||
|
_rc = [0]
|
||||||
|
|
||||||
|
def el(folder, eid, etype, name, doc=""):
|
||||||
|
elements.append((folder, eid, etype, name, doc)); return eid
|
||||||
|
|
||||||
|
def rel(rtype, src, tgt):
|
||||||
|
_rc[0] += 1
|
||||||
|
rid = f"rel-{_rc[0]:03d}"
|
||||||
|
relations.append((rid, rtype, src, tgt)); return rid
|
||||||
|
|
||||||
|
REL_INDEX = {}
|
||||||
|
def R(rtype, src, tgt):
|
||||||
|
REL_INDEX[(rtype, src, tgt)] = rel(rtype, src, tgt); return REL_INDEX[(rtype, src, tgt)]
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- технологический слой
|
||||||
|
T = "technology"
|
||||||
|
nd_cluster = el(T, "nd-cluster", "Node", "Кластер d8-ugmk-prod (Deckhouse)",
|
||||||
|
"clusters/d8-ugmk-prod/kustomization.yaml. GitOps через FluxCD v2.")
|
||||||
|
nd_front = el(T, "nd-frontend", "Node", "um-sarex-k8s-frontend-01",
|
||||||
|
"Выделенный frontend-узел. К нему прибит ingress-gateway через nodeSelector: "
|
||||||
|
"clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml")
|
||||||
|
nd_s3 = el(T, "nd-s3", "Node", "s3.uralmine.com — объектное хранилище УГМК",
|
||||||
|
"Внешнее по отношению к кластеру. MinIO в контуре не разворачивается.")
|
||||||
|
nd_nfs = el(T, "nd-nfs", "Node", "NFS-хранилище (StorageClass nfs01)",
|
||||||
|
"Единственный storageClass в контуре, 9 упоминаний в манифестах.")
|
||||||
|
nd_gitea = el(T, "nd-gitea", "Node", "Gitea 10.222.255.165:3000 (infra/iac)",
|
||||||
|
"Источник для Flux: clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml")
|
||||||
|
nd_cr = el(T, "nd-cr", "Node", "cr.yandex/crp3ccidau046kdj8g9q",
|
||||||
|
"Реестр чартов (OCI) и образов контейнеров.")
|
||||||
|
|
||||||
|
SS = [
|
||||||
|
("ss-istio-gw", "Istio Ingress Gateway", "Deckhouse IngressIstioController «sarex», inlet NodePort 30080/30443. clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml"),
|
||||||
|
("ss-istio-mesh", "Istio Service Mesh", "chart istio-config-contour 0.1.0. Gateway, VirtualService, RequestAuthentication."),
|
||||||
|
("ss-certmanager", "cert-manager", "ClusterIssuer sarex-selfsigned — сертификаты самоподписанные, не Let's Encrypt. Wildcard *.uralmine.com и *.sarex-k8s.uralmine.com."),
|
||||||
|
("ss-zitadel", "Zitadel", "chart idp-contour 4.12.13, ns zitadel."),
|
||||||
|
("ss-vault", "Vault + Agent Injector", "chart vault-contour 0.2.3, ns vault. Единственный механизм доставки секретов, путь secrets/data/apps/<app>/postgres."),
|
||||||
|
("ss-postgres", "PostgreSQL", "chart postgresql-contour 17.0.7, ns postgresql. PVC 20Gi на nfs01."),
|
||||||
|
("ss-redis", "Redis", "Разворачивается только в ns pm: apps/pm/d8-ugmk-prod/redis.yaml."),
|
||||||
|
("ss-kafka", "Kafka", "chart kafka-contour 0.1.15, ns kafka."),
|
||||||
|
("ss-rabbit", "RabbitMQ", "chart rabbitmq-contour 15.2.4, ns rabbitmq. Публикуется наружу на rabbitmq.sarex-k8s.uralmine.com."),
|
||||||
|
("ss-camunda", "Camunda Platform", "chart camunda-contour 11.0.14, ns camunda. ВНИМАНИЕ: ни одно приложение контура на неё не сконфигурировано — потребителей нет."),
|
||||||
|
]
|
||||||
|
for sid, name, doc in SS:
|
||||||
|
el(T, sid, "SystemSoftware", name, doc); R("Composition", nd_cluster, sid)
|
||||||
|
|
||||||
|
CAMUNDA_SUB = ["Zeebe", "Zeebe Gateway", "Operate", "Tasklist", "Optimize", "Identity", "Connectors"]
|
||||||
|
cam_ids = []
|
||||||
|
for n in CAMUNDA_SUB:
|
||||||
|
cid = "ss-cam-" + n.lower().replace(" ", "-")
|
||||||
|
el(T, cid, "SystemSoftware", n, "infrastructure/camunda/d8-ugmk-prod/camunda.yaml")
|
||||||
|
R("Composition", "ss-camunda", cid); cam_ids.append(cid)
|
||||||
|
|
||||||
|
ar_charts = el(T, "ar-charts", "Artifact", "Helm-чарты *-contour (OCI)")
|
||||||
|
ar_images = el(T, "ar-images", "Artifact", "Образы контейнеров")
|
||||||
|
R("Composition", nd_cr, ar_charts); R("Composition", nd_cr, ar_images)
|
||||||
|
|
||||||
|
# технологические сервисы: id -> (имя, кто реализует, ключ в матрице)
|
||||||
|
TS = [
|
||||||
|
("ts-ingress", "Маршрутизация HTTPS-трафика", ["ss-istio-gw", "ss-istio-mesh"], "istio"),
|
||||||
|
("ts-tls", "Выпуск TLS-сертификатов", ["ss-certmanager"], None),
|
||||||
|
("ts-oidc", "Аутентификация OIDC", ["ss-zitadel"], "oidc"),
|
||||||
|
("ts-secrets", "Управление секретами", ["ss-vault"], "vault"),
|
||||||
|
("ts-rdbms", "Реляционное хранилище", ["ss-postgres"], "postgres"),
|
||||||
|
("ts-cache", "Кэш", ["ss-redis"], "redis"),
|
||||||
|
("ts-events", "Событийная шина", ["ss-kafka"], "kafka"),
|
||||||
|
("ts-amqp", "Очередь сообщений AMQP", ["ss-rabbit"], "rabbitmq"),
|
||||||
|
("ts-bpmn", "Оркестрация процессов BPMN", ["ss-camunda"], "camunda"),
|
||||||
|
("ts-object", "Объектное хранилище", ["nd-s3"], "s3"),
|
||||||
|
]
|
||||||
|
for tid, name, realizers, _ in TS:
|
||||||
|
el(T, tid, "TechnologyService", name)
|
||||||
|
for r in realizers:
|
||||||
|
R("Realization", r, tid)
|
||||||
|
|
||||||
|
R("Assignment", nd_front, "ss-istio-gw")
|
||||||
|
R("Serving", "ts-tls", "ss-istio-gw")
|
||||||
|
R("Serving", nd_nfs, "ss-postgres")
|
||||||
|
R("Serving", nd_gitea, nd_cluster)
|
||||||
|
R("Serving", nd_cr, nd_cluster)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- прикладной слой
|
||||||
|
app_id = {a: "ac-" + a for a in DATA["apps"]}
|
||||||
|
for a in DATA["apps"]:
|
||||||
|
el("application", app_id[a], "ApplicationComponent", a, f"apps/{a}/d8-ugmk-prod/")
|
||||||
|
|
||||||
|
consumers = {}
|
||||||
|
for tid, _, _, key in TS:
|
||||||
|
if key is None:
|
||||||
|
consumers[tid] = []; continue
|
||||||
|
if key == "istio":
|
||||||
|
lst = [a for a in DATA["apps"] if a in DATA["exposed"]]
|
||||||
|
else:
|
||||||
|
lst = [a for a in DATA["apps"] if DATA["matrix"][a][key]]
|
||||||
|
consumers[tid] = lst
|
||||||
|
for a in lst:
|
||||||
|
R("Serving", tid, app_id[a])
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- представления
|
||||||
|
views = []
|
||||||
|
|
||||||
|
def view(name, doc=""):
|
||||||
|
v = {"id": f"view-{len(views)+1}", "name": name, "doc": doc, "objects": [], "conns": []}
|
||||||
|
views.append(v); return v
|
||||||
|
|
||||||
|
_oc = [0]
|
||||||
|
def obj(v, eid, x, y, w, h, parent=None):
|
||||||
|
_oc[0] += 1
|
||||||
|
o = {"id": f"do-{_oc[0]:04d}", "el": eid, "b": (x, y, w, h), "children": [], "src": [], "tgt": []}
|
||||||
|
(parent["children"] if parent else v["objects"]).append(o)
|
||||||
|
return o
|
||||||
|
|
||||||
|
def conn(v, rtype, so, to):
|
||||||
|
key = (rtype, so["el"], to["el"])
|
||||||
|
if key not in REL_INDEX:
|
||||||
|
raise KeyError(f"нет отношения в модели: {key}")
|
||||||
|
_oc[0] += 1
|
||||||
|
cid = f"cn-{_oc[0]:04d}"
|
||||||
|
so["src"].append({"id": cid, "rel": REL_INDEX[key], "tgt": to["id"]})
|
||||||
|
to["tgt"].append(cid)
|
||||||
|
|
||||||
|
# --- T1: инфраструктура без приложений
|
||||||
|
v1 = view("T1. Технологический слой — контур УГМК",
|
||||||
|
"Что развёрнуто в кластере d8-ugmk-prod и какие технологические сервисы это даёт. "
|
||||||
|
"Приложения-потребители вынесены в отдельные представления T2–T9.")
|
||||||
|
o_ts = {}
|
||||||
|
for i, (tid, _, _, _) in enumerate(TS):
|
||||||
|
o_ts[tid] = obj(v1, tid, 20 + i * 165, 30, 150, 60)
|
||||||
|
|
||||||
|
o_cluster = obj(v1, nd_cluster, 20, 140, 1270, 400)
|
||||||
|
o_ss = {}
|
||||||
|
row1 = ["ss-istio-gw", "ss-istio-mesh", "ss-certmanager", "ss-zitadel", "ss-vault"]
|
||||||
|
for i, sid in enumerate(row1):
|
||||||
|
o_ss[sid] = obj(v1, sid, 20 + i * 240, 45, 220, 70, o_cluster)
|
||||||
|
row2 = ["ss-postgres", "ss-redis", "ss-kafka", "ss-rabbit"]
|
||||||
|
for i, sid in enumerate(row2):
|
||||||
|
o_ss[sid] = obj(v1, sid, 20 + i * 240, 145, 220, 70, o_cluster)
|
||||||
|
o_ss["ss-camunda"] = obj(v1, "ss-camunda", 20, 245, 1230, 130, o_cluster)
|
||||||
|
for i, cid in enumerate(cam_ids):
|
||||||
|
obj(v1, cid, 10 + i * 174, 50, 162, 60, o_ss["ss-camunda"])
|
||||||
|
|
||||||
|
o_s3 = obj(v1, nd_s3, 1320, 140, 330, 70)
|
||||||
|
o_nfs = obj(v1, nd_nfs, 1320, 230, 330, 70)
|
||||||
|
o_gitea = obj(v1, nd_gitea, 1320, 320, 330, 70)
|
||||||
|
o_cr = obj(v1, nd_cr, 1320, 410, 330, 130)
|
||||||
|
obj(v1, ar_charts, 15, 50, 145, 60, o_cr)
|
||||||
|
obj(v1, ar_images, 170, 50, 145, 60, o_cr)
|
||||||
|
o_front = obj(v1, nd_front, 20, 570, 300, 60)
|
||||||
|
|
||||||
|
for tid, _, realizers, _ in TS:
|
||||||
|
for r in realizers:
|
||||||
|
conn(v1, "Realization", o_ss.get(r) or o_s3, o_ts[tid])
|
||||||
|
conn(v1, "Assignment", o_front, o_ss["ss-istio-gw"])
|
||||||
|
conn(v1, "Serving", o_ts["ts-tls"], o_ss["ss-istio-gw"])
|
||||||
|
conn(v1, "Serving", o_nfs, o_ss["ss-postgres"])
|
||||||
|
conn(v1, "Serving", o_gitea, o_cluster)
|
||||||
|
conn(v1, "Serving", o_cr, o_cluster)
|
||||||
|
|
||||||
|
# --- T2..T9: потребители каждого сервиса
|
||||||
|
PER_ROW = 6
|
||||||
|
for tid, tname, realizers, key in TS:
|
||||||
|
lst = consumers[tid]
|
||||||
|
if not lst:
|
||||||
|
continue
|
||||||
|
v = view(f"T{len(views)+1}. Потребители: {tname}",
|
||||||
|
f"{len(lst)} из {len(DATA['apps'])} приложений контура. Связи выведены из манифестов "
|
||||||
|
f"apps/*/base и apps/*/d8-ugmk-prod.")
|
||||||
|
ots = obj(v, tid, 20, 20, 260, 60)
|
||||||
|
oss = [obj(v, r, 320 + i * 280, 20, 260, 60) for i, r in enumerate(realizers)]
|
||||||
|
for o in oss:
|
||||||
|
conn(v, "Realization", o, ots)
|
||||||
|
oapps = []
|
||||||
|
for i, a in enumerate(lst):
|
||||||
|
oapps.append(obj(v, app_id[a], 20 + (i % PER_ROW) * 190, 150 + (i // PER_ROW) * 80, 170, 55))
|
||||||
|
for oa in oapps:
|
||||||
|
conn(v, "Serving", ots, oa)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- сериализация
|
||||||
|
FOLDERS = [("Strategy", "strategy"), ("Business", "business"), ("Application", "application"),
|
||||||
|
("Technology & Physical", "technology"), ("Motivation", "motivation"),
|
||||||
|
("Implementation & Migration", "implementation_migration"), ("Other", "other"),
|
||||||
|
("Relations", "relations"), ("Views", "diagrams")]
|
||||||
|
|
||||||
|
def emit_obj(o, ind):
|
||||||
|
p = " " * ind
|
||||||
|
tgt = f' targetConnections={quoteattr(" ".join(o["tgt"]))}' if o["tgt"] else ""
|
||||||
|
x, y, w, h = o["b"]
|
||||||
|
# Порядок и имена — как их пишет сам Archi: <child>, затем bounds,
|
||||||
|
# sourceConnection, вложенные <child>. Имена EClass в метамодели
|
||||||
|
# (DiagramModelArchimateObject) в XML не используются.
|
||||||
|
s = f'{p}<child xsi:type="archimate:DiagramObject" id="{o["id"]}" archimateElement="{o["el"]}"{tgt}>\n'
|
||||||
|
s += f'{p} <bounds x="{x}" y="{y}" width="{w}" height="{h}"/>\n'
|
||||||
|
for c in o["src"]:
|
||||||
|
s += (f'{p} <sourceConnection xsi:type="archimate:Connection" id="{c["id"]}" '
|
||||||
|
f'source="{o["id"]}" target="{c["tgt"]}" relationship="{c["rel"]}"/>\n')
|
||||||
|
for c in o["children"]:
|
||||||
|
s += emit_obj(c, ind + 2)
|
||||||
|
s += f'{p}</child>\n'
|
||||||
|
return s
|
||||||
|
|
||||||
|
out = ['<?xml version="1.0" encoding="UTF-8"?>',
|
||||||
|
'<archimate:model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
|
||||||
|
'xmlns:archimate="http://www.archimatetool.com/archimate" '
|
||||||
|
'name="СДЕ Sarex — контур УГМК" id="model-ugmk" version="5.0.0">',
|
||||||
|
' <purpose>Технологический слой контура d8-ugmk-prod, выведенный из репозитория infra/iac. '
|
||||||
|
'Прикладной слой присутствует только как потребители технологических сервисов — '
|
||||||
|
'межсервисные связи приложений моделируются отдельно.</purpose>']
|
||||||
|
|
||||||
|
for fname, ftype in FOLDERS:
|
||||||
|
inner = ""
|
||||||
|
if ftype in ("technology", "application"):
|
||||||
|
for folder, eid, etype, name, doc in elements:
|
||||||
|
if folder != ftype:
|
||||||
|
continue
|
||||||
|
if doc:
|
||||||
|
inner += (f' <element xsi:type="archimate:{etype}" name={quoteattr(name)} id="{eid}">\n'
|
||||||
|
f' <documentation>{escape(doc)}</documentation>\n'
|
||||||
|
f' </element>\n')
|
||||||
|
else:
|
||||||
|
inner += f' <element xsi:type="archimate:{etype}" name={quoteattr(name)} id="{eid}"/>\n'
|
||||||
|
elif ftype == "relations":
|
||||||
|
for rid, rtype, src, tgt in relations:
|
||||||
|
inner += (f' <element xsi:type="archimate:{rtype}Relationship" id="{rid}" '
|
||||||
|
f'source="{src}" target="{tgt}"/>\n')
|
||||||
|
elif ftype == "diagrams":
|
||||||
|
for v in views:
|
||||||
|
inner += f' <element xsi:type="archimate:ArchimateDiagramModel" name={quoteattr(v["name"])} id="{v["id"]}">\n'
|
||||||
|
if v["doc"]:
|
||||||
|
inner += f' <documentation>{escape(v["doc"])}</documentation>\n'
|
||||||
|
for o in v["objects"]:
|
||||||
|
inner += emit_obj(o, 6)
|
||||||
|
inner += ' </element>\n'
|
||||||
|
if inner:
|
||||||
|
out.append(f' <folder name={quoteattr(fname)} id="folder-{ftype}" type="{ftype}">\n{inner} </folder>')
|
||||||
|
else:
|
||||||
|
out.append(f' <folder name={quoteattr(fname)} id="folder-{ftype}" type="{ftype}"/>')
|
||||||
|
|
||||||
|
out.append('</archimate:model>')
|
||||||
|
OUT.write_text("\n".join(out) + "\n", encoding="utf-8")
|
||||||
|
|
||||||
|
print(f"записано: {OUT}")
|
||||||
|
print(f"элементов: {len(elements)} отношений: {len(relations)} представлений: {len(views)}")
|
||||||
|
for v in views:
|
||||||
|
n_obj = sum(1 + len(o["children"]) + sum(len(c["children"]) for c in o["children"]) for o in v["objects"])
|
||||||
|
print(f" {v['name']} ({n_obj} объектов)")
|
||||||
417
docs/architecture/matrix.json
Normal file
417
docs/architecture/matrix.json
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
{
|
||||||
|
"apps": [
|
||||||
|
"attachments",
|
||||||
|
"auth-flow",
|
||||||
|
"bim",
|
||||||
|
"cde",
|
||||||
|
"checklists",
|
||||||
|
"comparisons",
|
||||||
|
"contracts",
|
||||||
|
"control-interface",
|
||||||
|
"cross-section",
|
||||||
|
"django",
|
||||||
|
"document-link",
|
||||||
|
"documentations",
|
||||||
|
"drawings",
|
||||||
|
"eav",
|
||||||
|
"faas",
|
||||||
|
"flows",
|
||||||
|
"iam",
|
||||||
|
"inspections",
|
||||||
|
"issues",
|
||||||
|
"mapper",
|
||||||
|
"measurements",
|
||||||
|
"message-hub",
|
||||||
|
"notes",
|
||||||
|
"pm",
|
||||||
|
"prescriptions",
|
||||||
|
"processing",
|
||||||
|
"projects",
|
||||||
|
"remarks",
|
||||||
|
"reviews",
|
||||||
|
"rfi",
|
||||||
|
"stamp-verification",
|
||||||
|
"subscriptions",
|
||||||
|
"system-log",
|
||||||
|
"transmittal",
|
||||||
|
"workspaces"
|
||||||
|
],
|
||||||
|
"matrix": {
|
||||||
|
"attachments": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"auth-flow": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"bim": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"cde": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"checklists": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"comparisons": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"contracts": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"control-interface": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"cross-section": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"django": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": true,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"document-link": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"documentations": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"drawings": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"eav": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"faas": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"flows": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"iam": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"inspections": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"issues": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"mapper": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"measurements": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"message-hub": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": true,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"pm": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": true,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"prescriptions": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"processing": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": true
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"remarks": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"reviews": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"rfi": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"stamp-verification": {
|
||||||
|
"postgres": false,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": false,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"subscriptions": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": true,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"system-log": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": true,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"transmittal": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": true,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
},
|
||||||
|
"workspaces": {
|
||||||
|
"postgres": true,
|
||||||
|
"rabbitmq": false,
|
||||||
|
"kafka": false,
|
||||||
|
"camunda": false,
|
||||||
|
"s3": false,
|
||||||
|
"redis": false,
|
||||||
|
"vault": true,
|
||||||
|
"oidc": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exposed": [
|
||||||
|
"auth-flow",
|
||||||
|
"bim",
|
||||||
|
"camunda",
|
||||||
|
"cde",
|
||||||
|
"checklists",
|
||||||
|
"control-interface",
|
||||||
|
"django",
|
||||||
|
"document-link",
|
||||||
|
"documentations",
|
||||||
|
"eav",
|
||||||
|
"flows",
|
||||||
|
"iam",
|
||||||
|
"inspections",
|
||||||
|
"issues",
|
||||||
|
"pm",
|
||||||
|
"processing",
|
||||||
|
"rabbitmq",
|
||||||
|
"remarks",
|
||||||
|
"reviews",
|
||||||
|
"rfi",
|
||||||
|
"stamp-verification",
|
||||||
|
"transmittal",
|
||||||
|
"workspaces",
|
||||||
|
"zitadel"
|
||||||
|
]
|
||||||
|
}
|
||||||
128
docs/architecture/preview.html
Normal file
128
docs/architecture/preview.html
Normal file
File diff suppressed because one or more lines are too long
157
docs/architecture/render_preview.py
Normal file
157
docs/architecture/render_preview.py
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
"""Рендерит представления из .archimate в один самодостаточный HTML со встроенным SVG.
|
||||||
|
Нужен, чтобы схемы можно было посмотреть без установки Archi."""
|
||||||
|
import sys, io, pathlib, html
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||||||
|
XSI = "{http://www.w3.org/2001/XMLSchema-instance}type"
|
||||||
|
src, dst = pathlib.Path(sys.argv[1]), pathlib.Path(sys.argv[2])
|
||||||
|
root = ET.parse(src).getroot()
|
||||||
|
|
||||||
|
LAYER = { # цвета Archi по слоям
|
||||||
|
"ApplicationComponent": "#B5FFFF", "ApplicationService": "#B5FFFF",
|
||||||
|
"Node": "#C9E7B7", "SystemSoftware": "#C9E7B7",
|
||||||
|
"TechnologyService": "#C9E7B7", "Artifact": "#C9E7B7",
|
||||||
|
}
|
||||||
|
STROKE = {"Application": "#2a7f8f", "Technology": "#4a7f3a"}
|
||||||
|
|
||||||
|
concepts, rels = {}, {}
|
||||||
|
for folder in root.findall("folder"):
|
||||||
|
for e in folder.findall("element"):
|
||||||
|
et = (e.get(XSI) or "").split(":")[-1]
|
||||||
|
if et.endswith("Relationship"):
|
||||||
|
rels[e.get("id")] = (et[:-len("Relationship")], e.get("source"), e.get("target"))
|
||||||
|
elif et != "ArchimateDiagramModel":
|
||||||
|
concepts[e.get("id")] = (et, e.get("name") or "")
|
||||||
|
|
||||||
|
def collect(node, ox, oy, nodes, conns):
|
||||||
|
b = node.find("bounds")
|
||||||
|
x, y = ox + int(b.get("x", 0)), oy + int(b.get("y", 0))
|
||||||
|
w, h = int(b.get("width", 120)), int(b.get("height", 55))
|
||||||
|
nodes[node.get("id")] = (node.get("archimateElement"), x, y, w, h)
|
||||||
|
for c in node.findall("sourceConnection"):
|
||||||
|
conns.append((c.get("relationship"), c.get("source"), c.get("target")))
|
||||||
|
for ch in node.findall("child"):
|
||||||
|
collect(ch, x, y, nodes, conns)
|
||||||
|
|
||||||
|
def wrap(s, width):
|
||||||
|
out, line = [], ""
|
||||||
|
for word in s.split():
|
||||||
|
if len(line) + len(word) + 1 > width and line:
|
||||||
|
out.append(line); line = word
|
||||||
|
else:
|
||||||
|
line = f"{line} {word}".strip()
|
||||||
|
if line:
|
||||||
|
out.append(line)
|
||||||
|
return out[:4]
|
||||||
|
|
||||||
|
def edge_point(x, y, w, h, tx, ty):
|
||||||
|
"""Точка пересечения луча к (tx,ty) с границей прямоугольника."""
|
||||||
|
cx, cy = x + w / 2, y + h / 2
|
||||||
|
dx, dy = tx - cx, ty - cy
|
||||||
|
if dx == 0 and dy == 0:
|
||||||
|
return cx, cy
|
||||||
|
sx = (w / 2) / abs(dx) if dx else float("inf")
|
||||||
|
sy = (h / 2) / abs(dy) if dy else float("inf")
|
||||||
|
s = min(sx, sy)
|
||||||
|
return cx + dx * s, cy + dy * s
|
||||||
|
|
||||||
|
MARKERS = """
|
||||||
|
<defs>
|
||||||
|
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||||||
|
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||||||
|
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||||||
|
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||||||
|
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||||||
|
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||||||
|
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||||||
|
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||||||
|
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||||||
|
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||||||
|
</defs>"""
|
||||||
|
|
||||||
|
STYLE = {
|
||||||
|
"Serving": ('stroke-dasharray="none"', 'marker-end="url(#open)"', ""),
|
||||||
|
"Realization": ('stroke-dasharray="6,4"', 'marker-end="url(#hollow)"', ""),
|
||||||
|
"Composition": ('stroke-dasharray="none"', "", 'marker-start="url(#diamond)"'),
|
||||||
|
"Assignment": ('stroke-dasharray="none"', 'marker-end="url(#filled)"', 'marker-start="url(#ball)"'),
|
||||||
|
}
|
||||||
|
|
||||||
|
parts = []
|
||||||
|
views = [e for f in root.findall("folder") for e in f.findall("element")
|
||||||
|
if (e.get(XSI) or "").endswith("ArchimateDiagramModel")]
|
||||||
|
|
||||||
|
for v in views:
|
||||||
|
nodes, conns = {}, []
|
||||||
|
for ch in v.findall("child"):
|
||||||
|
collect(ch, 0, 0, nodes, conns)
|
||||||
|
if not nodes:
|
||||||
|
continue
|
||||||
|
maxx = max(x + w for _, x, _, w, _ in nodes.values()) + 40
|
||||||
|
maxy = max(y + h for _, _, y, _, h in nodes.values()) + 40
|
||||||
|
|
||||||
|
svg = [f'<svg viewBox="0 0 {maxx} {maxy}" xmlns="http://www.w3.org/2000/svg" '
|
||||||
|
f'font-family="system-ui, sans-serif">', MARKERS]
|
||||||
|
|
||||||
|
# связи под блоками
|
||||||
|
for rid, so, to in conns:
|
||||||
|
if so not in nodes or to not in nodes or rid not in rels:
|
||||||
|
continue
|
||||||
|
rtype = rels[rid][0]
|
||||||
|
_, sx, sy, sw, sh = nodes[so]
|
||||||
|
_, tx, ty, tw, th = nodes[to]
|
||||||
|
x1, y1 = edge_point(sx, sy, sw, sh, tx + tw / 2, ty + th / 2)
|
||||||
|
x2, y2 = edge_point(tx, ty, tw, th, sx + sw / 2, sy + sh / 2)
|
||||||
|
dash, mend, mstart = STYLE.get(rtype, ('stroke-dasharray="none"', 'marker-end="url(#open)"', ""))
|
||||||
|
svg.append(f'<line x1="{x1:.0f}" y1="{y1:.0f}" x2="{x2:.0f}" y2="{y2:.0f}" '
|
||||||
|
f'stroke="#555" stroke-width="1.3" opacity="0.75" {dash} {mend} {mstart}/>')
|
||||||
|
|
||||||
|
# блоки: контейнеры раньше содержимого — сортируем по площади убыв.
|
||||||
|
for nid, (eref, x, y, w, h) in sorted(nodes.items(), key=lambda kv: -kv[1][3] * kv[1][4]):
|
||||||
|
etype, name = concepts.get(eref, ("", eref or "?"))
|
||||||
|
fill = LAYER.get(etype, "#EEEEEE")
|
||||||
|
stroke = STROKE["Application"] if etype.startswith("Application") else STROKE["Technology"]
|
||||||
|
big = w * h > 60000
|
||||||
|
svg.append(f'<rect x="{x}" y="{y}" width="{w}" height="{h}" rx="4" fill="{fill}" '
|
||||||
|
f'fill-opacity="{0.35 if big else 1}" stroke="{stroke}" stroke-width="1.2"/>')
|
||||||
|
lines = wrap(name, max(12, w // 7))
|
||||||
|
if big: # подпись контейнера — сверху слева
|
||||||
|
svg.append(f'<text x="{x+10}" y="{y+20}" font-size="13" font-weight="600" '
|
||||||
|
f'fill="#1a3a1a">{html.escape(name)}</text>')
|
||||||
|
else:
|
||||||
|
fs = 11 if len(lines) > 2 else 12
|
||||||
|
y0 = y + h / 2 - (len(lines) - 1) * fs * 0.62
|
||||||
|
for i, ln in enumerate(lines):
|
||||||
|
svg.append(f'<text x="{x + w/2}" y="{y0 + i*fs*1.25:.0f}" font-size="{fs}" '
|
||||||
|
f'text-anchor="middle" dominant-baseline="middle" fill="#111">'
|
||||||
|
f'{html.escape(ln)}</text>')
|
||||||
|
svg.append("</svg>")
|
||||||
|
|
||||||
|
doc = v.find("documentation")
|
||||||
|
parts.append(f'<section><h2>{html.escape(v.get("name") or "")}</h2>'
|
||||||
|
+ (f'<p class="doc">{html.escape(doc.text)}</p>' if doc is not None and doc.text else "")
|
||||||
|
+ "".join(svg) + "</section>")
|
||||||
|
|
||||||
|
page = f"""<!doctype html>
|
||||||
|
<html lang="ru"><meta charset="utf-8">
|
||||||
|
<title>{html.escape(root.get('name') or 'Модель')}</title>
|
||||||
|
<style>
|
||||||
|
body {{ font-family: system-ui, sans-serif; margin: 0 auto; padding: 24px; max-width: 1760px;
|
||||||
|
background:#fafafa; color:#111; }}
|
||||||
|
h1 {{ font-size: 22px; }} h2 {{ font-size: 16px; margin: 32px 0 4px; }}
|
||||||
|
.doc {{ color:#555; font-size:13px; margin:0 0 10px; max-width:900px; }}
|
||||||
|
section {{ background:#fff; border:1px solid #ddd; border-radius:6px; padding:14px; margin-bottom:18px;
|
||||||
|
overflow-x:auto; }}
|
||||||
|
svg {{ width:100%; height:auto; min-width:700px; }}
|
||||||
|
.legend {{ font-size:13px; color:#444; }}
|
||||||
|
.legend code {{ background:#eee; padding:1px 5px; border-radius:3px; }}
|
||||||
|
</style>
|
||||||
|
<h1>{html.escape(root.get('name') or '')}</h1>
|
||||||
|
<p class="legend">Автогенерация из <code>ugmk-technology.archimate</code>. Зелёный — технологический слой,
|
||||||
|
голубой — прикладной. Пунктир с полым треугольником — realization, стрелка — serving,
|
||||||
|
ромб — composition, линия с шариком — assignment.</p>
|
||||||
|
{''.join(parts)}
|
||||||
|
</html>"""
|
||||||
|
|
||||||
|
dst.write_text(page, encoding="utf-8", newline="\n")
|
||||||
|
print(f"записано: {dst} ({len(parts)} представлений)")
|
||||||
69
docs/architecture/scan_ugmk.py
Normal file
69
docs/architecture/scan_ugmk.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
"""Собирает матрицу «приложение UGMK -> используемый технологический сервис»
|
||||||
|
из манифестов base + d8-ugmk-prod. Только *.yaml, документацию не читаем."""
|
||||||
|
import re, pathlib, json, sys, io
|
||||||
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||||||
|
|
||||||
|
ROOT = pathlib.Path(r"C:\Users\user\PycharmProjects\infra\iac")
|
||||||
|
CLUSTER = "d8-ugmk-prod"
|
||||||
|
|
||||||
|
# 1. какие приложения подключены к кластеру
|
||||||
|
kust = (ROOT / "clusters" / CLUSTER / "kustomization.yaml").read_text(encoding="utf-8")
|
||||||
|
apps = sorted(set(re.findall(r"\.\./\.\./apps/([a-z0-9-]+)/" + CLUSTER, kust)))
|
||||||
|
|
||||||
|
# 2. маркеры использования технологических сервисов
|
||||||
|
MARKERS = {
|
||||||
|
"postgres": [r"POSTGRES_[A-Z]", r"DB__HOST", r"postgresql\.postgresql\.svc",
|
||||||
|
r"secrets/data/apps/[a-z0-9-]+/postgres"],
|
||||||
|
"rabbitmq": [r"RABBITMQ", r"AMQP__", r"rabbitmq\.rabbitmq\.svc"],
|
||||||
|
"kafka": [r"KAFKA", r"kafka\.kafka\.svc", r"BOOTSTRAP_SERVERS"],
|
||||||
|
"camunda": [r"ZEEBE", r"CAMUNDA"],
|
||||||
|
"s3": [r"S3__", r"S3_ENDPOINT", r"S3_ACCESS", r"S3_BUCKET"],
|
||||||
|
"redis": [r"REDIS_HOST", r"REDIS__", r"redis\.[a-z-]+\.svc"],
|
||||||
|
"vault": [r"vault\.hashicorp\.com/agent-inject"],
|
||||||
|
"oidc": [r"ZITADEL", r"JWKS", r"OIDC", r"jwt-public"],
|
||||||
|
}
|
||||||
|
|
||||||
|
def scan(app):
|
||||||
|
text = []
|
||||||
|
for sub in ("base", CLUSTER):
|
||||||
|
d = ROOT / "apps" / app / sub
|
||||||
|
if not d.is_dir():
|
||||||
|
continue
|
||||||
|
for f in d.rglob("*.yaml"):
|
||||||
|
text.append(f.read_text(encoding="utf-8", errors="replace"))
|
||||||
|
blob = "\n".join(text)
|
||||||
|
return {svc: any(re.search(p, blob) for p in pats) for svc, pats in MARKERS.items()}
|
||||||
|
|
||||||
|
matrix = {app: scan(app) for app in apps}
|
||||||
|
|
||||||
|
# 3. кто опубликован наружу через istio (destination host -> namespace)
|
||||||
|
istio_raw = (ROOT / "infrastructure" / "istio-config" / CLUSTER / "istio-config.yaml").read_text(encoding="utf-8")
|
||||||
|
# закомментированные маршруты не считаем развёрнутыми
|
||||||
|
istio = "\n".join(l for l in istio_raw.splitlines() if not l.lstrip().startswith("#"))
|
||||||
|
exposed = sorted(set(re.findall(r"service:\s*([a-z0-9-]+)\.([a-z0-9-]+)\.svc", istio)))
|
||||||
|
exposed_ns = sorted({ns for _, ns in exposed})
|
||||||
|
|
||||||
|
print("ПРИЛОЖЕНИЙ В КОНТУРЕ:", len(apps))
|
||||||
|
print()
|
||||||
|
hdr = ["app"] + list(MARKERS) + ["istio"]
|
||||||
|
print(" | ".join(h.ljust(9) for h in hdr))
|
||||||
|
print("-" * 110)
|
||||||
|
for app, row in matrix.items():
|
||||||
|
cells = [app.ljust(9)] + ["+".ljust(9) if row[s] else "".ljust(9) for s in MARKERS]
|
||||||
|
cells.append("+".ljust(9) if app in exposed_ns else "".ljust(9))
|
||||||
|
print(" | ".join(cells))
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("ИТОГО потребителей на сервис:")
|
||||||
|
for s in MARKERS:
|
||||||
|
n = sum(1 for r in matrix.values() if r[s])
|
||||||
|
print(f" {s:10s} {n:2d}")
|
||||||
|
print(f" {'istio':10s} {len([a for a in apps if a in exposed_ns]):2d}")
|
||||||
|
print()
|
||||||
|
print("namespace, опубликованные через istio:", ", ".join(exposed_ns))
|
||||||
|
print()
|
||||||
|
print("ВСЕГО SERVING-СВЯЗЕЙ:", sum(sum(r.values()) for r in matrix.values()) + len([a for a in apps if a in exposed_ns]))
|
||||||
|
|
||||||
|
(pathlib.Path(sys.argv[1] if len(sys.argv) > 1 else "matrix.json")).write_text(
|
||||||
|
json.dumps({"apps": apps, "matrix": matrix, "exposed": exposed_ns}, ensure_ascii=False, indent=2),
|
||||||
|
encoding="utf-8")
|
||||||
106
docs/architecture/to_open_exchange.py
Normal file
106
docs/architecture/to_open_exchange.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
"""Конвертирует нативный .archimate (формат Archi) в The Open Group
|
||||||
|
ArchiMate Model Exchange File Format — его понимают сторонние инструменты.
|
||||||
|
|
||||||
|
Вложенность узлов на схемах разворачивается в плоский список с абсолютными
|
||||||
|
координатами: в обменном формате трактовка координат вложенных узлов
|
||||||
|
неоднозначна, а плоская раскладка даёт одинаковый результат везде.
|
||||||
|
Контейнер выводится раньше содержимого, поэтому визуально вложенность
|
||||||
|
сохраняется.
|
||||||
|
"""
|
||||||
|
import sys, io, pathlib
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from xml.sax.saxutils import escape, quoteattr
|
||||||
|
|
||||||
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||||||
|
XSI = "{http://www.w3.org/2001/XMLSchema-instance}type"
|
||||||
|
NS = "http://www.opengroup.org/xsd/archimate/3.0/"
|
||||||
|
|
||||||
|
src, dst = pathlib.Path(sys.argv[1]), pathlib.Path(sys.argv[2])
|
||||||
|
root = ET.parse(src).getroot()
|
||||||
|
|
||||||
|
def t(e):
|
||||||
|
return (e.get(XSI) or "").split(":")[-1]
|
||||||
|
|
||||||
|
def text(e, tag):
|
||||||
|
c = e.find(tag)
|
||||||
|
return c.text if c is not None and c.text else ""
|
||||||
|
|
||||||
|
elements, relationships, views = [], [], []
|
||||||
|
|
||||||
|
for folder in root.findall("folder"):
|
||||||
|
ftype = folder.get("type")
|
||||||
|
for e in folder.findall("element"):
|
||||||
|
et = t(e)
|
||||||
|
if ftype == "diagrams":
|
||||||
|
views.append(e)
|
||||||
|
elif et.endswith("Relationship"):
|
||||||
|
relationships.append((e.get("id"), et[:-len("Relationship")],
|
||||||
|
e.get("source"), e.get("target")))
|
||||||
|
else:
|
||||||
|
elements.append((e.get("id"), et, e.get("name") or "", text(e, "documentation")))
|
||||||
|
|
||||||
|
def flatten(node, ox=0, oy=0, out=None, conns=None):
|
||||||
|
"""Возвращает плоский список узлов с абсолютными координатами и соединения."""
|
||||||
|
out = [] if out is None else out
|
||||||
|
conns = [] if conns is None else conns
|
||||||
|
b = node.find("bounds")
|
||||||
|
x = ox + int(b.get("x", 0)); y = oy + int(b.get("y", 0))
|
||||||
|
out.append((node.get("id"), node.get("archimateElement"),
|
||||||
|
x, y, int(b.get("width", 120)), int(b.get("height", 55))))
|
||||||
|
for c in node.findall("sourceConnection"):
|
||||||
|
conns.append((c.get("id"), c.get("relationship"),
|
||||||
|
c.get("source"), c.get("target")))
|
||||||
|
for ch in node.findall("child"):
|
||||||
|
flatten(ch, x, y, out, conns)
|
||||||
|
return out, conns
|
||||||
|
|
||||||
|
out = ['<?xml version="1.0" encoding="UTF-8"?>',
|
||||||
|
f'<model xmlns="{NS}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
|
||||||
|
f' xsi:schemaLocation="{NS} https://www.opengroup.org/xsd/archimate/3.1/archimate3_Diagram.xsd"',
|
||||||
|
f' identifier="{root.get("id")}">',
|
||||||
|
f' <name xml:lang="ru">{escape(root.get("name") or "model")}</name>']
|
||||||
|
purpose = root.find("purpose")
|
||||||
|
if purpose is not None and purpose.text:
|
||||||
|
out.append(f' <documentation xml:lang="ru">{escape(purpose.text)}</documentation>')
|
||||||
|
|
||||||
|
out.append(" <elements>")
|
||||||
|
for eid, etype, name, doc in elements:
|
||||||
|
out.append(f' <element identifier="{eid}" xsi:type="{etype}">')
|
||||||
|
out.append(f' <name xml:lang="ru">{escape(name)}</name>')
|
||||||
|
if doc:
|
||||||
|
out.append(f' <documentation xml:lang="ru">{escape(doc)}</documentation>')
|
||||||
|
out.append(" </element>")
|
||||||
|
out.append(" </elements>")
|
||||||
|
|
||||||
|
out.append(" <relationships>")
|
||||||
|
for rid, rtype, s, tg in relationships:
|
||||||
|
out.append(f' <relationship identifier="{rid}" source="{s}" target="{tg}" xsi:type="{rtype}"/>')
|
||||||
|
out.append(" </relationships>")
|
||||||
|
|
||||||
|
out.append(" <views>")
|
||||||
|
out.append(" <diagrams>")
|
||||||
|
for v in views:
|
||||||
|
out.append(f' <view identifier="{v.get("id")}" xsi:type="Diagram">')
|
||||||
|
out.append(f' <name xml:lang="ru">{escape(v.get("name") or "")}</name>')
|
||||||
|
doc = text(v, "documentation")
|
||||||
|
if doc:
|
||||||
|
out.append(f' <documentation xml:lang="ru">{escape(doc)}</documentation>')
|
||||||
|
nodes, conns = [], []
|
||||||
|
for child in v.findall("child"):
|
||||||
|
flatten(child, 0, 0, nodes, conns)
|
||||||
|
for nid, eref, x, y, w, h in nodes:
|
||||||
|
out.append(f' <node identifier="{nid}" elementRef="{eref}" xsi:type="Element" '
|
||||||
|
f'x="{x}" y="{y}" w="{w}" h="{h}"/>')
|
||||||
|
for cid, rref, s, tg in conns:
|
||||||
|
out.append(f' <connection identifier="{cid}" relationshipRef="{rref}" '
|
||||||
|
f'xsi:type="Relationship" source="{s}" target="{tg}"/>')
|
||||||
|
out.append(" </view>")
|
||||||
|
out.append(" </diagrams>")
|
||||||
|
out.append(" </views>")
|
||||||
|
out.append("</model>")
|
||||||
|
|
||||||
|
dst.write_text("\n".join(out) + "\n", encoding="utf-8", newline="\n")
|
||||||
|
print(f"записано: {dst}")
|
||||||
|
print(f" элементов: {len(elements)}")
|
||||||
|
print(f" отношений: {len(relationships)}")
|
||||||
|
print(f" представлений: {len(views)}")
|
||||||
1036
docs/architecture/ugmk-technology.archimate
Normal file
1036
docs/architecture/ugmk-technology.archimate
Normal file
File diff suppressed because it is too large
Load Diff
785
docs/architecture/ugmk-technology.xml
Normal file
785
docs/architecture/ugmk-technology.xml
Normal file
@ -0,0 +1,785 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<model xmlns="http://www.opengroup.org/xsd/archimate/3.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.opengroup.org/xsd/archimate/3.0/ https://www.opengroup.org/xsd/archimate/3.1/archimate3_Diagram.xsd"
|
||||||
|
identifier="model-ugmk">
|
||||||
|
<name xml:lang="ru">СДЕ Sarex — контур УГМК</name>
|
||||||
|
<documentation xml:lang="ru">Технологический слой контура d8-ugmk-prod, выведенный из репозитория infra/iac. Прикладной слой присутствует только как потребители технологических сервисов — межсервисные связи приложений моделируются отдельно.</documentation>
|
||||||
|
<elements>
|
||||||
|
<element identifier="ac-attachments" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">attachments</name>
|
||||||
|
<documentation xml:lang="ru">apps/attachments/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-auth-flow" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">auth-flow</name>
|
||||||
|
<documentation xml:lang="ru">apps/auth-flow/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-bim" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">bim</name>
|
||||||
|
<documentation xml:lang="ru">apps/bim/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-cde" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">cde</name>
|
||||||
|
<documentation xml:lang="ru">apps/cde/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-checklists" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">checklists</name>
|
||||||
|
<documentation xml:lang="ru">apps/checklists/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-comparisons" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">comparisons</name>
|
||||||
|
<documentation xml:lang="ru">apps/comparisons/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-contracts" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">contracts</name>
|
||||||
|
<documentation xml:lang="ru">apps/contracts/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-control-interface" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">control-interface</name>
|
||||||
|
<documentation xml:lang="ru">apps/control-interface/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-cross-section" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">cross-section</name>
|
||||||
|
<documentation xml:lang="ru">apps/cross-section/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-django" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">django</name>
|
||||||
|
<documentation xml:lang="ru">apps/django/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-document-link" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">document-link</name>
|
||||||
|
<documentation xml:lang="ru">apps/document-link/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-documentations" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">documentations</name>
|
||||||
|
<documentation xml:lang="ru">apps/documentations/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-drawings" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">drawings</name>
|
||||||
|
<documentation xml:lang="ru">apps/drawings/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-eav" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">eav</name>
|
||||||
|
<documentation xml:lang="ru">apps/eav/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-faas" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">faas</name>
|
||||||
|
<documentation xml:lang="ru">apps/faas/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-flows" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">flows</name>
|
||||||
|
<documentation xml:lang="ru">apps/flows/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-iam" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">iam</name>
|
||||||
|
<documentation xml:lang="ru">apps/iam/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-inspections" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">inspections</name>
|
||||||
|
<documentation xml:lang="ru">apps/inspections/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-issues" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">issues</name>
|
||||||
|
<documentation xml:lang="ru">apps/issues/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-mapper" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">mapper</name>
|
||||||
|
<documentation xml:lang="ru">apps/mapper/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-measurements" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">measurements</name>
|
||||||
|
<documentation xml:lang="ru">apps/measurements/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-message-hub" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">message-hub</name>
|
||||||
|
<documentation xml:lang="ru">apps/message-hub/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-notes" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">notes</name>
|
||||||
|
<documentation xml:lang="ru">apps/notes/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-pm" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">pm</name>
|
||||||
|
<documentation xml:lang="ru">apps/pm/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-prescriptions" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">prescriptions</name>
|
||||||
|
<documentation xml:lang="ru">apps/prescriptions/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-processing" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">processing</name>
|
||||||
|
<documentation xml:lang="ru">apps/processing/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-projects" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">projects</name>
|
||||||
|
<documentation xml:lang="ru">apps/projects/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-remarks" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">remarks</name>
|
||||||
|
<documentation xml:lang="ru">apps/remarks/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-reviews" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">reviews</name>
|
||||||
|
<documentation xml:lang="ru">apps/reviews/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-rfi" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">rfi</name>
|
||||||
|
<documentation xml:lang="ru">apps/rfi/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-stamp-verification" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">stamp-verification</name>
|
||||||
|
<documentation xml:lang="ru">apps/stamp-verification/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-subscriptions" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">subscriptions</name>
|
||||||
|
<documentation xml:lang="ru">apps/subscriptions/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-system-log" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">system-log</name>
|
||||||
|
<documentation xml:lang="ru">apps/system-log/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-transmittal" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">transmittal</name>
|
||||||
|
<documentation xml:lang="ru">apps/transmittal/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ac-workspaces" xsi:type="ApplicationComponent">
|
||||||
|
<name xml:lang="ru">workspaces</name>
|
||||||
|
<documentation xml:lang="ru">apps/workspaces/d8-ugmk-prod/</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-cluster" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">Кластер d8-ugmk-prod (Deckhouse)</name>
|
||||||
|
<documentation xml:lang="ru">clusters/d8-ugmk-prod/kustomization.yaml. GitOps через FluxCD v2.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-frontend" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">um-sarex-k8s-frontend-01</name>
|
||||||
|
<documentation xml:lang="ru">Выделенный frontend-узел. К нему прибит ingress-gateway через nodeSelector: clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-s3" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">s3.uralmine.com — объектное хранилище УГМК</name>
|
||||||
|
<documentation xml:lang="ru">Внешнее по отношению к кластеру. MinIO в контуре не разворачивается.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-nfs" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">NFS-хранилище (StorageClass nfs01)</name>
|
||||||
|
<documentation xml:lang="ru">Единственный storageClass в контуре, 9 упоминаний в манифестах.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-gitea" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">Gitea 10.222.255.165:3000 (infra/iac)</name>
|
||||||
|
<documentation xml:lang="ru">Источник для Flux: clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="nd-cr" xsi:type="Node">
|
||||||
|
<name xml:lang="ru">cr.yandex/crp3ccidau046kdj8g9q</name>
|
||||||
|
<documentation xml:lang="ru">Реестр чартов (OCI) и образов контейнеров.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-istio-gw" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Istio Ingress Gateway</name>
|
||||||
|
<documentation xml:lang="ru">Deckhouse IngressIstioController «sarex», inlet NodePort 30080/30443. clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-istio-mesh" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Istio Service Mesh</name>
|
||||||
|
<documentation xml:lang="ru">chart istio-config-contour 0.1.0. Gateway, VirtualService, RequestAuthentication.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-certmanager" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">cert-manager</name>
|
||||||
|
<documentation xml:lang="ru">ClusterIssuer sarex-selfsigned — сертификаты самоподписанные, не Let's Encrypt. Wildcard *.uralmine.com и *.sarex-k8s.uralmine.com.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-zitadel" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Zitadel</name>
|
||||||
|
<documentation xml:lang="ru">chart idp-contour 4.12.13, ns zitadel.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-vault" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Vault + Agent Injector</name>
|
||||||
|
<documentation xml:lang="ru">chart vault-contour 0.2.3, ns vault. Единственный механизм доставки секретов, путь secrets/data/apps/<app>/postgres.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-postgres" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">PostgreSQL</name>
|
||||||
|
<documentation xml:lang="ru">chart postgresql-contour 17.0.7, ns postgresql. PVC 20Gi на nfs01.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-redis" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Redis</name>
|
||||||
|
<documentation xml:lang="ru">Разворачивается только в ns pm: apps/pm/d8-ugmk-prod/redis.yaml.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-kafka" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Kafka</name>
|
||||||
|
<documentation xml:lang="ru">chart kafka-contour 0.1.15, ns kafka.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-rabbit" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">RabbitMQ</name>
|
||||||
|
<documentation xml:lang="ru">chart rabbitmq-contour 15.2.4, ns rabbitmq. Публикуется наружу на rabbitmq.sarex-k8s.uralmine.com.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-camunda" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Camunda Platform</name>
|
||||||
|
<documentation xml:lang="ru">chart camunda-contour 11.0.14, ns camunda. ВНИМАНИЕ: ни одно приложение контура на неё не сконфигурировано — потребителей нет.</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-zeebe" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Zeebe</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-zeebe-gateway" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Zeebe Gateway</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-operate" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Operate</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-tasklist" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Tasklist</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-optimize" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Optimize</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-identity" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Identity</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ss-cam-connectors" xsi:type="SystemSoftware">
|
||||||
|
<name xml:lang="ru">Connectors</name>
|
||||||
|
<documentation xml:lang="ru">infrastructure/camunda/d8-ugmk-prod/camunda.yaml</documentation>
|
||||||
|
</element>
|
||||||
|
<element identifier="ar-charts" xsi:type="Artifact">
|
||||||
|
<name xml:lang="ru">Helm-чарты *-contour (OCI)</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ar-images" xsi:type="Artifact">
|
||||||
|
<name xml:lang="ru">Образы контейнеров</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-ingress" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Маршрутизация HTTPS-трафика</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-tls" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Выпуск TLS-сертификатов</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-oidc" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Аутентификация OIDC</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-secrets" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Управление секретами</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-rdbms" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Реляционное хранилище</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-cache" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Кэш</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-events" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Событийная шина</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-amqp" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Очередь сообщений AMQP</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-bpmn" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Оркестрация процессов BPMN</name>
|
||||||
|
</element>
|
||||||
|
<element identifier="ts-object" xsi:type="TechnologyService">
|
||||||
|
<name xml:lang="ru">Объектное хранилище</name>
|
||||||
|
</element>
|
||||||
|
</elements>
|
||||||
|
<relationships>
|
||||||
|
<relationship identifier="rel-001" source="nd-cluster" target="ss-istio-gw" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-002" source="nd-cluster" target="ss-istio-mesh" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-003" source="nd-cluster" target="ss-certmanager" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-004" source="nd-cluster" target="ss-zitadel" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-005" source="nd-cluster" target="ss-vault" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-006" source="nd-cluster" target="ss-postgres" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-007" source="nd-cluster" target="ss-redis" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-008" source="nd-cluster" target="ss-kafka" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-009" source="nd-cluster" target="ss-rabbit" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-010" source="nd-cluster" target="ss-camunda" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-011" source="ss-camunda" target="ss-cam-zeebe" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-012" source="ss-camunda" target="ss-cam-zeebe-gateway" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-013" source="ss-camunda" target="ss-cam-operate" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-014" source="ss-camunda" target="ss-cam-tasklist" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-015" source="ss-camunda" target="ss-cam-optimize" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-016" source="ss-camunda" target="ss-cam-identity" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-017" source="ss-camunda" target="ss-cam-connectors" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-018" source="nd-cr" target="ar-charts" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-019" source="nd-cr" target="ar-images" xsi:type="Composition"/>
|
||||||
|
<relationship identifier="rel-020" source="ss-istio-gw" target="ts-ingress" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-021" source="ss-istio-mesh" target="ts-ingress" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-022" source="ss-certmanager" target="ts-tls" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-023" source="ss-zitadel" target="ts-oidc" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-024" source="ss-vault" target="ts-secrets" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-025" source="ss-postgres" target="ts-rdbms" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-026" source="ss-redis" target="ts-cache" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-027" source="ss-kafka" target="ts-events" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-028" source="ss-rabbit" target="ts-amqp" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-029" source="ss-camunda" target="ts-bpmn" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-030" source="nd-s3" target="ts-object" xsi:type="Realization"/>
|
||||||
|
<relationship identifier="rel-031" source="nd-frontend" target="ss-istio-gw" xsi:type="Assignment"/>
|
||||||
|
<relationship identifier="rel-032" source="ts-tls" target="ss-istio-gw" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-033" source="nd-nfs" target="ss-postgres" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-034" source="nd-gitea" target="nd-cluster" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-035" source="nd-cr" target="nd-cluster" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-036" source="ts-ingress" target="ac-auth-flow" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-037" source="ts-ingress" target="ac-bim" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-038" source="ts-ingress" target="ac-cde" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-039" source="ts-ingress" target="ac-checklists" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-040" source="ts-ingress" target="ac-control-interface" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-041" source="ts-ingress" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-042" source="ts-ingress" target="ac-document-link" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-043" source="ts-ingress" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-044" source="ts-ingress" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-045" source="ts-ingress" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-046" source="ts-ingress" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-047" source="ts-ingress" target="ac-inspections" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-048" source="ts-ingress" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-049" source="ts-ingress" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-050" source="ts-ingress" target="ac-processing" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-051" source="ts-ingress" target="ac-remarks" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-052" source="ts-ingress" target="ac-reviews" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-053" source="ts-ingress" target="ac-rfi" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-054" source="ts-ingress" target="ac-stamp-verification" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-055" source="ts-ingress" target="ac-transmittal" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-056" source="ts-ingress" target="ac-workspaces" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-057" source="ts-oidc" target="ac-checklists" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-058" source="ts-oidc" target="ac-comparisons" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-059" source="ts-oidc" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-060" source="ts-oidc" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-061" source="ts-oidc" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-062" source="ts-oidc" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-063" source="ts-oidc" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-064" source="ts-oidc" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-065" source="ts-oidc" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-066" source="ts-oidc" target="ac-processing" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-067" source="ts-secrets" target="ac-attachments" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-068" source="ts-secrets" target="ac-bim" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-069" source="ts-secrets" target="ac-cde" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-070" source="ts-secrets" target="ac-checklists" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-071" source="ts-secrets" target="ac-comparisons" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-072" source="ts-secrets" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-073" source="ts-secrets" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-074" source="ts-secrets" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-075" source="ts-secrets" target="ac-drawings" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-076" source="ts-secrets" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-077" source="ts-secrets" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-078" source="ts-secrets" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-079" source="ts-secrets" target="ac-inspections" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-080" source="ts-secrets" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-081" source="ts-secrets" target="ac-mapper" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-082" source="ts-secrets" target="ac-measurements" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-083" source="ts-secrets" target="ac-message-hub" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-084" source="ts-secrets" target="ac-notes" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-085" source="ts-secrets" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-086" source="ts-secrets" target="ac-processing" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-087" source="ts-secrets" target="ac-rfi" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-088" source="ts-secrets" target="ac-subscriptions" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-089" source="ts-secrets" target="ac-system-log" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-090" source="ts-secrets" target="ac-transmittal" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-091" source="ts-secrets" target="ac-workspaces" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-092" source="ts-rdbms" target="ac-attachments" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-093" source="ts-rdbms" target="ac-bim" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-094" source="ts-rdbms" target="ac-checklists" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-095" source="ts-rdbms" target="ac-comparisons" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-096" source="ts-rdbms" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-097" source="ts-rdbms" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-098" source="ts-rdbms" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-099" source="ts-rdbms" target="ac-drawings" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-100" source="ts-rdbms" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-101" source="ts-rdbms" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-102" source="ts-rdbms" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-103" source="ts-rdbms" target="ac-inspections" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-104" source="ts-rdbms" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-105" source="ts-rdbms" target="ac-mapper" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-106" source="ts-rdbms" target="ac-message-hub" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-107" source="ts-rdbms" target="ac-notes" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-108" source="ts-rdbms" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-109" source="ts-rdbms" target="ac-processing" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-110" source="ts-rdbms" target="ac-rfi" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-111" source="ts-rdbms" target="ac-subscriptions" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-112" source="ts-rdbms" target="ac-system-log" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-113" source="ts-rdbms" target="ac-transmittal" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-114" source="ts-rdbms" target="ac-workspaces" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-115" source="ts-cache" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-116" source="ts-cache" target="ac-message-hub" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-117" source="ts-cache" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-118" source="ts-events" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-119" source="ts-events" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-120" source="ts-events" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-121" source="ts-events" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-122" source="ts-events" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-123" source="ts-events" target="ac-inspections" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-124" source="ts-events" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-125" source="ts-events" target="ac-mapper" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-126" source="ts-events" target="ac-message-hub" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-127" source="ts-events" target="ac-notes" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-128" source="ts-events" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-129" source="ts-events" target="ac-system-log" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-130" source="ts-amqp" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-131" source="ts-amqp" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-132" source="ts-amqp" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-133" source="ts-amqp" target="ac-flows" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-134" source="ts-amqp" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-135" source="ts-amqp" target="ac-mapper" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-136" source="ts-amqp" target="ac-notes" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-137" source="ts-amqp" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-138" source="ts-amqp" target="ac-processing" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-139" source="ts-amqp" target="ac-rfi" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-140" source="ts-amqp" target="ac-transmittal" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-141" source="ts-object" target="ac-attachments" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-142" source="ts-object" target="ac-contracts" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-143" source="ts-object" target="ac-django" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-144" source="ts-object" target="ac-documentations" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-145" source="ts-object" target="ac-eav" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-146" source="ts-object" target="ac-iam" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-147" source="ts-object" target="ac-issues" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-148" source="ts-object" target="ac-mapper" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-149" source="ts-object" target="ac-message-hub" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-150" source="ts-object" target="ac-notes" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-151" source="ts-object" target="ac-pm" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-152" source="ts-object" target="ac-rfi" xsi:type="Serving"/>
|
||||||
|
<relationship identifier="rel-153" source="ts-object" target="ac-subscriptions" xsi:type="Serving"/>
|
||||||
|
</relationships>
|
||||||
|
<views>
|
||||||
|
<diagrams>
|
||||||
|
<view identifier="view-1" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T1. Технологический слой — контур УГМК</name>
|
||||||
|
<documentation xml:lang="ru">Что развёрнуто в кластере d8-ugmk-prod и какие технологические сервисы это даёт. Приложения-потребители вынесены в отдельные представления T2–T9.</documentation>
|
||||||
|
<node identifier="do-0001" elementRef="ts-ingress" xsi:type="Element" x="20" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0002" elementRef="ts-tls" xsi:type="Element" x="185" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0003" elementRef="ts-oidc" xsi:type="Element" x="350" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0004" elementRef="ts-secrets" xsi:type="Element" x="515" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0005" elementRef="ts-rdbms" xsi:type="Element" x="680" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0006" elementRef="ts-cache" xsi:type="Element" x="845" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0007" elementRef="ts-events" xsi:type="Element" x="1010" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0008" elementRef="ts-amqp" xsi:type="Element" x="1175" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0009" elementRef="ts-bpmn" xsi:type="Element" x="1340" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0010" elementRef="ts-object" xsi:type="Element" x="1505" y="30" w="150" h="60"/>
|
||||||
|
<node identifier="do-0011" elementRef="nd-cluster" xsi:type="Element" x="20" y="140" w="1270" h="400"/>
|
||||||
|
<node identifier="do-0012" elementRef="ss-istio-gw" xsi:type="Element" x="40" y="185" w="220" h="70"/>
|
||||||
|
<node identifier="do-0013" elementRef="ss-istio-mesh" xsi:type="Element" x="280" y="185" w="220" h="70"/>
|
||||||
|
<node identifier="do-0014" elementRef="ss-certmanager" xsi:type="Element" x="520" y="185" w="220" h="70"/>
|
||||||
|
<node identifier="do-0015" elementRef="ss-zitadel" xsi:type="Element" x="760" y="185" w="220" h="70"/>
|
||||||
|
<node identifier="do-0016" elementRef="ss-vault" xsi:type="Element" x="1000" y="185" w="220" h="70"/>
|
||||||
|
<node identifier="do-0017" elementRef="ss-postgres" xsi:type="Element" x="40" y="285" w="220" h="70"/>
|
||||||
|
<node identifier="do-0018" elementRef="ss-redis" xsi:type="Element" x="280" y="285" w="220" h="70"/>
|
||||||
|
<node identifier="do-0019" elementRef="ss-kafka" xsi:type="Element" x="520" y="285" w="220" h="70"/>
|
||||||
|
<node identifier="do-0020" elementRef="ss-rabbit" xsi:type="Element" x="760" y="285" w="220" h="70"/>
|
||||||
|
<node identifier="do-0021" elementRef="ss-camunda" xsi:type="Element" x="40" y="385" w="1230" h="130"/>
|
||||||
|
<node identifier="do-0022" elementRef="ss-cam-zeebe" xsi:type="Element" x="50" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0023" elementRef="ss-cam-zeebe-gateway" xsi:type="Element" x="224" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0024" elementRef="ss-cam-operate" xsi:type="Element" x="398" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0025" elementRef="ss-cam-tasklist" xsi:type="Element" x="572" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0026" elementRef="ss-cam-optimize" xsi:type="Element" x="746" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0027" elementRef="ss-cam-identity" xsi:type="Element" x="920" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0028" elementRef="ss-cam-connectors" xsi:type="Element" x="1094" y="435" w="162" h="60"/>
|
||||||
|
<node identifier="do-0029" elementRef="nd-s3" xsi:type="Element" x="1320" y="140" w="330" h="70"/>
|
||||||
|
<node identifier="do-0030" elementRef="nd-nfs" xsi:type="Element" x="1320" y="230" w="330" h="70"/>
|
||||||
|
<node identifier="do-0031" elementRef="nd-gitea" xsi:type="Element" x="1320" y="320" w="330" h="70"/>
|
||||||
|
<node identifier="do-0032" elementRef="nd-cr" xsi:type="Element" x="1320" y="410" w="330" h="130"/>
|
||||||
|
<node identifier="do-0033" elementRef="ar-charts" xsi:type="Element" x="1335" y="460" w="145" h="60"/>
|
||||||
|
<node identifier="do-0034" elementRef="ar-images" xsi:type="Element" x="1490" y="460" w="145" h="60"/>
|
||||||
|
<node identifier="do-0035" elementRef="nd-frontend" xsi:type="Element" x="20" y="570" w="300" h="60"/>
|
||||||
|
<connection identifier="cn-0048" relationshipRef="rel-032" xsi:type="Relationship" source="do-0002" target="do-0012"/>
|
||||||
|
<connection identifier="cn-0036" relationshipRef="rel-020" xsi:type="Relationship" source="do-0012" target="do-0001"/>
|
||||||
|
<connection identifier="cn-0037" relationshipRef="rel-021" xsi:type="Relationship" source="do-0013" target="do-0001"/>
|
||||||
|
<connection identifier="cn-0038" relationshipRef="rel-022" xsi:type="Relationship" source="do-0014" target="do-0002"/>
|
||||||
|
<connection identifier="cn-0039" relationshipRef="rel-023" xsi:type="Relationship" source="do-0015" target="do-0003"/>
|
||||||
|
<connection identifier="cn-0040" relationshipRef="rel-024" xsi:type="Relationship" source="do-0016" target="do-0004"/>
|
||||||
|
<connection identifier="cn-0041" relationshipRef="rel-025" xsi:type="Relationship" source="do-0017" target="do-0005"/>
|
||||||
|
<connection identifier="cn-0042" relationshipRef="rel-026" xsi:type="Relationship" source="do-0018" target="do-0006"/>
|
||||||
|
<connection identifier="cn-0043" relationshipRef="rel-027" xsi:type="Relationship" source="do-0019" target="do-0007"/>
|
||||||
|
<connection identifier="cn-0044" relationshipRef="rel-028" xsi:type="Relationship" source="do-0020" target="do-0008"/>
|
||||||
|
<connection identifier="cn-0045" relationshipRef="rel-029" xsi:type="Relationship" source="do-0021" target="do-0009"/>
|
||||||
|
<connection identifier="cn-0046" relationshipRef="rel-030" xsi:type="Relationship" source="do-0029" target="do-0010"/>
|
||||||
|
<connection identifier="cn-0049" relationshipRef="rel-033" xsi:type="Relationship" source="do-0030" target="do-0017"/>
|
||||||
|
<connection identifier="cn-0050" relationshipRef="rel-034" xsi:type="Relationship" source="do-0031" target="do-0011"/>
|
||||||
|
<connection identifier="cn-0051" relationshipRef="rel-035" xsi:type="Relationship" source="do-0032" target="do-0011"/>
|
||||||
|
<connection identifier="cn-0047" relationshipRef="rel-031" xsi:type="Relationship" source="do-0035" target="do-0012"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-2" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T2. Потребители: Маршрутизация HTTPS-трафика</name>
|
||||||
|
<documentation xml:lang="ru">21 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0052" elementRef="ts-ingress" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0053" elementRef="ss-istio-gw" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0054" elementRef="ss-istio-mesh" xsi:type="Element" x="600" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0057" elementRef="ac-auth-flow" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0058" elementRef="ac-bim" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0059" elementRef="ac-cde" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0060" elementRef="ac-checklists" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0061" elementRef="ac-control-interface" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0062" elementRef="ac-django" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0063" elementRef="ac-document-link" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0064" elementRef="ac-documentations" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0065" elementRef="ac-eav" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0066" elementRef="ac-flows" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0067" elementRef="ac-iam" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0068" elementRef="ac-inspections" xsi:type="Element" x="970" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0069" elementRef="ac-issues" xsi:type="Element" x="20" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0070" elementRef="ac-pm" xsi:type="Element" x="210" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0071" elementRef="ac-processing" xsi:type="Element" x="400" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0072" elementRef="ac-remarks" xsi:type="Element" x="590" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0073" elementRef="ac-reviews" xsi:type="Element" x="780" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0074" elementRef="ac-rfi" xsi:type="Element" x="970" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0075" elementRef="ac-stamp-verification" xsi:type="Element" x="20" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0076" elementRef="ac-transmittal" xsi:type="Element" x="210" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0077" elementRef="ac-workspaces" xsi:type="Element" x="400" y="390" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0078" relationshipRef="rel-036" xsi:type="Relationship" source="do-0052" target="do-0057"/>
|
||||||
|
<connection identifier="cn-0079" relationshipRef="rel-037" xsi:type="Relationship" source="do-0052" target="do-0058"/>
|
||||||
|
<connection identifier="cn-0080" relationshipRef="rel-038" xsi:type="Relationship" source="do-0052" target="do-0059"/>
|
||||||
|
<connection identifier="cn-0081" relationshipRef="rel-039" xsi:type="Relationship" source="do-0052" target="do-0060"/>
|
||||||
|
<connection identifier="cn-0082" relationshipRef="rel-040" xsi:type="Relationship" source="do-0052" target="do-0061"/>
|
||||||
|
<connection identifier="cn-0083" relationshipRef="rel-041" xsi:type="Relationship" source="do-0052" target="do-0062"/>
|
||||||
|
<connection identifier="cn-0084" relationshipRef="rel-042" xsi:type="Relationship" source="do-0052" target="do-0063"/>
|
||||||
|
<connection identifier="cn-0085" relationshipRef="rel-043" xsi:type="Relationship" source="do-0052" target="do-0064"/>
|
||||||
|
<connection identifier="cn-0086" relationshipRef="rel-044" xsi:type="Relationship" source="do-0052" target="do-0065"/>
|
||||||
|
<connection identifier="cn-0087" relationshipRef="rel-045" xsi:type="Relationship" source="do-0052" target="do-0066"/>
|
||||||
|
<connection identifier="cn-0088" relationshipRef="rel-046" xsi:type="Relationship" source="do-0052" target="do-0067"/>
|
||||||
|
<connection identifier="cn-0089" relationshipRef="rel-047" xsi:type="Relationship" source="do-0052" target="do-0068"/>
|
||||||
|
<connection identifier="cn-0090" relationshipRef="rel-048" xsi:type="Relationship" source="do-0052" target="do-0069"/>
|
||||||
|
<connection identifier="cn-0091" relationshipRef="rel-049" xsi:type="Relationship" source="do-0052" target="do-0070"/>
|
||||||
|
<connection identifier="cn-0092" relationshipRef="rel-050" xsi:type="Relationship" source="do-0052" target="do-0071"/>
|
||||||
|
<connection identifier="cn-0093" relationshipRef="rel-051" xsi:type="Relationship" source="do-0052" target="do-0072"/>
|
||||||
|
<connection identifier="cn-0094" relationshipRef="rel-052" xsi:type="Relationship" source="do-0052" target="do-0073"/>
|
||||||
|
<connection identifier="cn-0095" relationshipRef="rel-053" xsi:type="Relationship" source="do-0052" target="do-0074"/>
|
||||||
|
<connection identifier="cn-0096" relationshipRef="rel-054" xsi:type="Relationship" source="do-0052" target="do-0075"/>
|
||||||
|
<connection identifier="cn-0097" relationshipRef="rel-055" xsi:type="Relationship" source="do-0052" target="do-0076"/>
|
||||||
|
<connection identifier="cn-0098" relationshipRef="rel-056" xsi:type="Relationship" source="do-0052" target="do-0077"/>
|
||||||
|
<connection identifier="cn-0055" relationshipRef="rel-020" xsi:type="Relationship" source="do-0053" target="do-0052"/>
|
||||||
|
<connection identifier="cn-0056" relationshipRef="rel-021" xsi:type="Relationship" source="do-0054" target="do-0052"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-3" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T3. Потребители: Аутентификация OIDC</name>
|
||||||
|
<documentation xml:lang="ru">10 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0099" elementRef="ts-oidc" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0100" elementRef="ss-zitadel" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0102" elementRef="ac-checklists" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0103" elementRef="ac-comparisons" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0104" elementRef="ac-contracts" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0105" elementRef="ac-django" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0106" elementRef="ac-documentations" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0107" elementRef="ac-eav" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0108" elementRef="ac-flows" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0109" elementRef="ac-iam" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0110" elementRef="ac-issues" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0111" elementRef="ac-processing" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0112" relationshipRef="rel-057" xsi:type="Relationship" source="do-0099" target="do-0102"/>
|
||||||
|
<connection identifier="cn-0113" relationshipRef="rel-058" xsi:type="Relationship" source="do-0099" target="do-0103"/>
|
||||||
|
<connection identifier="cn-0114" relationshipRef="rel-059" xsi:type="Relationship" source="do-0099" target="do-0104"/>
|
||||||
|
<connection identifier="cn-0115" relationshipRef="rel-060" xsi:type="Relationship" source="do-0099" target="do-0105"/>
|
||||||
|
<connection identifier="cn-0116" relationshipRef="rel-061" xsi:type="Relationship" source="do-0099" target="do-0106"/>
|
||||||
|
<connection identifier="cn-0117" relationshipRef="rel-062" xsi:type="Relationship" source="do-0099" target="do-0107"/>
|
||||||
|
<connection identifier="cn-0118" relationshipRef="rel-063" xsi:type="Relationship" source="do-0099" target="do-0108"/>
|
||||||
|
<connection identifier="cn-0119" relationshipRef="rel-064" xsi:type="Relationship" source="do-0099" target="do-0109"/>
|
||||||
|
<connection identifier="cn-0120" relationshipRef="rel-065" xsi:type="Relationship" source="do-0099" target="do-0110"/>
|
||||||
|
<connection identifier="cn-0121" relationshipRef="rel-066" xsi:type="Relationship" source="do-0099" target="do-0111"/>
|
||||||
|
<connection identifier="cn-0101" relationshipRef="rel-023" xsi:type="Relationship" source="do-0100" target="do-0099"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-4" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T4. Потребители: Управление секретами</name>
|
||||||
|
<documentation xml:lang="ru">25 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0122" elementRef="ts-secrets" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0123" elementRef="ss-vault" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0125" elementRef="ac-attachments" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0126" elementRef="ac-bim" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0127" elementRef="ac-cde" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0128" elementRef="ac-checklists" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0129" elementRef="ac-comparisons" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0130" elementRef="ac-contracts" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0131" elementRef="ac-django" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0132" elementRef="ac-documentations" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0133" elementRef="ac-drawings" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0134" elementRef="ac-eav" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0135" elementRef="ac-flows" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0136" elementRef="ac-iam" xsi:type="Element" x="970" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0137" elementRef="ac-inspections" xsi:type="Element" x="20" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0138" elementRef="ac-issues" xsi:type="Element" x="210" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0139" elementRef="ac-mapper" xsi:type="Element" x="400" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0140" elementRef="ac-measurements" xsi:type="Element" x="590" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0141" elementRef="ac-message-hub" xsi:type="Element" x="780" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0142" elementRef="ac-notes" xsi:type="Element" x="970" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0143" elementRef="ac-pm" xsi:type="Element" x="20" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0144" elementRef="ac-processing" xsi:type="Element" x="210" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0145" elementRef="ac-rfi" xsi:type="Element" x="400" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0146" elementRef="ac-subscriptions" xsi:type="Element" x="590" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0147" elementRef="ac-system-log" xsi:type="Element" x="780" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0148" elementRef="ac-transmittal" xsi:type="Element" x="970" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0149" elementRef="ac-workspaces" xsi:type="Element" x="20" y="470" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0150" relationshipRef="rel-067" xsi:type="Relationship" source="do-0122" target="do-0125"/>
|
||||||
|
<connection identifier="cn-0151" relationshipRef="rel-068" xsi:type="Relationship" source="do-0122" target="do-0126"/>
|
||||||
|
<connection identifier="cn-0152" relationshipRef="rel-069" xsi:type="Relationship" source="do-0122" target="do-0127"/>
|
||||||
|
<connection identifier="cn-0153" relationshipRef="rel-070" xsi:type="Relationship" source="do-0122" target="do-0128"/>
|
||||||
|
<connection identifier="cn-0154" relationshipRef="rel-071" xsi:type="Relationship" source="do-0122" target="do-0129"/>
|
||||||
|
<connection identifier="cn-0155" relationshipRef="rel-072" xsi:type="Relationship" source="do-0122" target="do-0130"/>
|
||||||
|
<connection identifier="cn-0156" relationshipRef="rel-073" xsi:type="Relationship" source="do-0122" target="do-0131"/>
|
||||||
|
<connection identifier="cn-0157" relationshipRef="rel-074" xsi:type="Relationship" source="do-0122" target="do-0132"/>
|
||||||
|
<connection identifier="cn-0158" relationshipRef="rel-075" xsi:type="Relationship" source="do-0122" target="do-0133"/>
|
||||||
|
<connection identifier="cn-0159" relationshipRef="rel-076" xsi:type="Relationship" source="do-0122" target="do-0134"/>
|
||||||
|
<connection identifier="cn-0160" relationshipRef="rel-077" xsi:type="Relationship" source="do-0122" target="do-0135"/>
|
||||||
|
<connection identifier="cn-0161" relationshipRef="rel-078" xsi:type="Relationship" source="do-0122" target="do-0136"/>
|
||||||
|
<connection identifier="cn-0162" relationshipRef="rel-079" xsi:type="Relationship" source="do-0122" target="do-0137"/>
|
||||||
|
<connection identifier="cn-0163" relationshipRef="rel-080" xsi:type="Relationship" source="do-0122" target="do-0138"/>
|
||||||
|
<connection identifier="cn-0164" relationshipRef="rel-081" xsi:type="Relationship" source="do-0122" target="do-0139"/>
|
||||||
|
<connection identifier="cn-0165" relationshipRef="rel-082" xsi:type="Relationship" source="do-0122" target="do-0140"/>
|
||||||
|
<connection identifier="cn-0166" relationshipRef="rel-083" xsi:type="Relationship" source="do-0122" target="do-0141"/>
|
||||||
|
<connection identifier="cn-0167" relationshipRef="rel-084" xsi:type="Relationship" source="do-0122" target="do-0142"/>
|
||||||
|
<connection identifier="cn-0168" relationshipRef="rel-085" xsi:type="Relationship" source="do-0122" target="do-0143"/>
|
||||||
|
<connection identifier="cn-0169" relationshipRef="rel-086" xsi:type="Relationship" source="do-0122" target="do-0144"/>
|
||||||
|
<connection identifier="cn-0170" relationshipRef="rel-087" xsi:type="Relationship" source="do-0122" target="do-0145"/>
|
||||||
|
<connection identifier="cn-0171" relationshipRef="rel-088" xsi:type="Relationship" source="do-0122" target="do-0146"/>
|
||||||
|
<connection identifier="cn-0172" relationshipRef="rel-089" xsi:type="Relationship" source="do-0122" target="do-0147"/>
|
||||||
|
<connection identifier="cn-0173" relationshipRef="rel-090" xsi:type="Relationship" source="do-0122" target="do-0148"/>
|
||||||
|
<connection identifier="cn-0174" relationshipRef="rel-091" xsi:type="Relationship" source="do-0122" target="do-0149"/>
|
||||||
|
<connection identifier="cn-0124" relationshipRef="rel-024" xsi:type="Relationship" source="do-0123" target="do-0122"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-5" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T5. Потребители: Реляционное хранилище</name>
|
||||||
|
<documentation xml:lang="ru">23 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0175" elementRef="ts-rdbms" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0176" elementRef="ss-postgres" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0178" elementRef="ac-attachments" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0179" elementRef="ac-bim" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0180" elementRef="ac-checklists" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0181" elementRef="ac-comparisons" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0182" elementRef="ac-contracts" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0183" elementRef="ac-django" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0184" elementRef="ac-documentations" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0185" elementRef="ac-drawings" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0186" elementRef="ac-eav" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0187" elementRef="ac-flows" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0188" elementRef="ac-iam" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0189" elementRef="ac-inspections" xsi:type="Element" x="970" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0190" elementRef="ac-issues" xsi:type="Element" x="20" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0191" elementRef="ac-mapper" xsi:type="Element" x="210" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0192" elementRef="ac-message-hub" xsi:type="Element" x="400" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0193" elementRef="ac-notes" xsi:type="Element" x="590" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0194" elementRef="ac-pm" xsi:type="Element" x="780" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0195" elementRef="ac-processing" xsi:type="Element" x="970" y="310" w="170" h="55"/>
|
||||||
|
<node identifier="do-0196" elementRef="ac-rfi" xsi:type="Element" x="20" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0197" elementRef="ac-subscriptions" xsi:type="Element" x="210" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0198" elementRef="ac-system-log" xsi:type="Element" x="400" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0199" elementRef="ac-transmittal" xsi:type="Element" x="590" y="390" w="170" h="55"/>
|
||||||
|
<node identifier="do-0200" elementRef="ac-workspaces" xsi:type="Element" x="780" y="390" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0201" relationshipRef="rel-092" xsi:type="Relationship" source="do-0175" target="do-0178"/>
|
||||||
|
<connection identifier="cn-0202" relationshipRef="rel-093" xsi:type="Relationship" source="do-0175" target="do-0179"/>
|
||||||
|
<connection identifier="cn-0203" relationshipRef="rel-094" xsi:type="Relationship" source="do-0175" target="do-0180"/>
|
||||||
|
<connection identifier="cn-0204" relationshipRef="rel-095" xsi:type="Relationship" source="do-0175" target="do-0181"/>
|
||||||
|
<connection identifier="cn-0205" relationshipRef="rel-096" xsi:type="Relationship" source="do-0175" target="do-0182"/>
|
||||||
|
<connection identifier="cn-0206" relationshipRef="rel-097" xsi:type="Relationship" source="do-0175" target="do-0183"/>
|
||||||
|
<connection identifier="cn-0207" relationshipRef="rel-098" xsi:type="Relationship" source="do-0175" target="do-0184"/>
|
||||||
|
<connection identifier="cn-0208" relationshipRef="rel-099" xsi:type="Relationship" source="do-0175" target="do-0185"/>
|
||||||
|
<connection identifier="cn-0209" relationshipRef="rel-100" xsi:type="Relationship" source="do-0175" target="do-0186"/>
|
||||||
|
<connection identifier="cn-0210" relationshipRef="rel-101" xsi:type="Relationship" source="do-0175" target="do-0187"/>
|
||||||
|
<connection identifier="cn-0211" relationshipRef="rel-102" xsi:type="Relationship" source="do-0175" target="do-0188"/>
|
||||||
|
<connection identifier="cn-0212" relationshipRef="rel-103" xsi:type="Relationship" source="do-0175" target="do-0189"/>
|
||||||
|
<connection identifier="cn-0213" relationshipRef="rel-104" xsi:type="Relationship" source="do-0175" target="do-0190"/>
|
||||||
|
<connection identifier="cn-0214" relationshipRef="rel-105" xsi:type="Relationship" source="do-0175" target="do-0191"/>
|
||||||
|
<connection identifier="cn-0215" relationshipRef="rel-106" xsi:type="Relationship" source="do-0175" target="do-0192"/>
|
||||||
|
<connection identifier="cn-0216" relationshipRef="rel-107" xsi:type="Relationship" source="do-0175" target="do-0193"/>
|
||||||
|
<connection identifier="cn-0217" relationshipRef="rel-108" xsi:type="Relationship" source="do-0175" target="do-0194"/>
|
||||||
|
<connection identifier="cn-0218" relationshipRef="rel-109" xsi:type="Relationship" source="do-0175" target="do-0195"/>
|
||||||
|
<connection identifier="cn-0219" relationshipRef="rel-110" xsi:type="Relationship" source="do-0175" target="do-0196"/>
|
||||||
|
<connection identifier="cn-0220" relationshipRef="rel-111" xsi:type="Relationship" source="do-0175" target="do-0197"/>
|
||||||
|
<connection identifier="cn-0221" relationshipRef="rel-112" xsi:type="Relationship" source="do-0175" target="do-0198"/>
|
||||||
|
<connection identifier="cn-0222" relationshipRef="rel-113" xsi:type="Relationship" source="do-0175" target="do-0199"/>
|
||||||
|
<connection identifier="cn-0223" relationshipRef="rel-114" xsi:type="Relationship" source="do-0175" target="do-0200"/>
|
||||||
|
<connection identifier="cn-0177" relationshipRef="rel-025" xsi:type="Relationship" source="do-0176" target="do-0175"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-6" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T6. Потребители: Кэш</name>
|
||||||
|
<documentation xml:lang="ru">3 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0224" elementRef="ts-cache" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0225" elementRef="ss-redis" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0227" elementRef="ac-django" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0228" elementRef="ac-message-hub" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0229" elementRef="ac-pm" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0230" relationshipRef="rel-115" xsi:type="Relationship" source="do-0224" target="do-0227"/>
|
||||||
|
<connection identifier="cn-0231" relationshipRef="rel-116" xsi:type="Relationship" source="do-0224" target="do-0228"/>
|
||||||
|
<connection identifier="cn-0232" relationshipRef="rel-117" xsi:type="Relationship" source="do-0224" target="do-0229"/>
|
||||||
|
<connection identifier="cn-0226" relationshipRef="rel-026" xsi:type="Relationship" source="do-0225" target="do-0224"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-7" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T7. Потребители: Событийная шина</name>
|
||||||
|
<documentation xml:lang="ru">12 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0233" elementRef="ts-events" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0234" elementRef="ss-kafka" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0236" elementRef="ac-contracts" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0237" elementRef="ac-django" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0238" elementRef="ac-eav" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0239" elementRef="ac-flows" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0240" elementRef="ac-iam" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0241" elementRef="ac-inspections" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0242" elementRef="ac-issues" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0243" elementRef="ac-mapper" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0244" elementRef="ac-message-hub" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0245" elementRef="ac-notes" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0246" elementRef="ac-pm" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0247" elementRef="ac-system-log" xsi:type="Element" x="970" y="230" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0248" relationshipRef="rel-118" xsi:type="Relationship" source="do-0233" target="do-0236"/>
|
||||||
|
<connection identifier="cn-0249" relationshipRef="rel-119" xsi:type="Relationship" source="do-0233" target="do-0237"/>
|
||||||
|
<connection identifier="cn-0250" relationshipRef="rel-120" xsi:type="Relationship" source="do-0233" target="do-0238"/>
|
||||||
|
<connection identifier="cn-0251" relationshipRef="rel-121" xsi:type="Relationship" source="do-0233" target="do-0239"/>
|
||||||
|
<connection identifier="cn-0252" relationshipRef="rel-122" xsi:type="Relationship" source="do-0233" target="do-0240"/>
|
||||||
|
<connection identifier="cn-0253" relationshipRef="rel-123" xsi:type="Relationship" source="do-0233" target="do-0241"/>
|
||||||
|
<connection identifier="cn-0254" relationshipRef="rel-124" xsi:type="Relationship" source="do-0233" target="do-0242"/>
|
||||||
|
<connection identifier="cn-0255" relationshipRef="rel-125" xsi:type="Relationship" source="do-0233" target="do-0243"/>
|
||||||
|
<connection identifier="cn-0256" relationshipRef="rel-126" xsi:type="Relationship" source="do-0233" target="do-0244"/>
|
||||||
|
<connection identifier="cn-0257" relationshipRef="rel-127" xsi:type="Relationship" source="do-0233" target="do-0245"/>
|
||||||
|
<connection identifier="cn-0258" relationshipRef="rel-128" xsi:type="Relationship" source="do-0233" target="do-0246"/>
|
||||||
|
<connection identifier="cn-0259" relationshipRef="rel-129" xsi:type="Relationship" source="do-0233" target="do-0247"/>
|
||||||
|
<connection identifier="cn-0235" relationshipRef="rel-027" xsi:type="Relationship" source="do-0234" target="do-0233"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-8" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T8. Потребители: Очередь сообщений AMQP</name>
|
||||||
|
<documentation xml:lang="ru">11 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0260" elementRef="ts-amqp" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0261" elementRef="ss-rabbit" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0263" elementRef="ac-contracts" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0264" elementRef="ac-django" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0265" elementRef="ac-documentations" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0266" elementRef="ac-flows" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0267" elementRef="ac-issues" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0268" elementRef="ac-mapper" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0269" elementRef="ac-notes" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0270" elementRef="ac-pm" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0271" elementRef="ac-processing" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0272" elementRef="ac-rfi" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0273" elementRef="ac-transmittal" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0274" relationshipRef="rel-130" xsi:type="Relationship" source="do-0260" target="do-0263"/>
|
||||||
|
<connection identifier="cn-0275" relationshipRef="rel-131" xsi:type="Relationship" source="do-0260" target="do-0264"/>
|
||||||
|
<connection identifier="cn-0276" relationshipRef="rel-132" xsi:type="Relationship" source="do-0260" target="do-0265"/>
|
||||||
|
<connection identifier="cn-0277" relationshipRef="rel-133" xsi:type="Relationship" source="do-0260" target="do-0266"/>
|
||||||
|
<connection identifier="cn-0278" relationshipRef="rel-134" xsi:type="Relationship" source="do-0260" target="do-0267"/>
|
||||||
|
<connection identifier="cn-0279" relationshipRef="rel-135" xsi:type="Relationship" source="do-0260" target="do-0268"/>
|
||||||
|
<connection identifier="cn-0280" relationshipRef="rel-136" xsi:type="Relationship" source="do-0260" target="do-0269"/>
|
||||||
|
<connection identifier="cn-0281" relationshipRef="rel-137" xsi:type="Relationship" source="do-0260" target="do-0270"/>
|
||||||
|
<connection identifier="cn-0282" relationshipRef="rel-138" xsi:type="Relationship" source="do-0260" target="do-0271"/>
|
||||||
|
<connection identifier="cn-0283" relationshipRef="rel-139" xsi:type="Relationship" source="do-0260" target="do-0272"/>
|
||||||
|
<connection identifier="cn-0284" relationshipRef="rel-140" xsi:type="Relationship" source="do-0260" target="do-0273"/>
|
||||||
|
<connection identifier="cn-0262" relationshipRef="rel-028" xsi:type="Relationship" source="do-0261" target="do-0260"/>
|
||||||
|
</view>
|
||||||
|
<view identifier="view-9" xsi:type="Diagram">
|
||||||
|
<name xml:lang="ru">T9. Потребители: Объектное хранилище</name>
|
||||||
|
<documentation xml:lang="ru">13 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</documentation>
|
||||||
|
<node identifier="do-0285" elementRef="ts-object" xsi:type="Element" x="20" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0286" elementRef="nd-s3" xsi:type="Element" x="320" y="20" w="260" h="60"/>
|
||||||
|
<node identifier="do-0288" elementRef="ac-attachments" xsi:type="Element" x="20" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0289" elementRef="ac-contracts" xsi:type="Element" x="210" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0290" elementRef="ac-django" xsi:type="Element" x="400" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0291" elementRef="ac-documentations" xsi:type="Element" x="590" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0292" elementRef="ac-eav" xsi:type="Element" x="780" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0293" elementRef="ac-iam" xsi:type="Element" x="970" y="150" w="170" h="55"/>
|
||||||
|
<node identifier="do-0294" elementRef="ac-issues" xsi:type="Element" x="20" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0295" elementRef="ac-mapper" xsi:type="Element" x="210" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0296" elementRef="ac-message-hub" xsi:type="Element" x="400" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0297" elementRef="ac-notes" xsi:type="Element" x="590" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0298" elementRef="ac-pm" xsi:type="Element" x="780" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0299" elementRef="ac-rfi" xsi:type="Element" x="970" y="230" w="170" h="55"/>
|
||||||
|
<node identifier="do-0300" elementRef="ac-subscriptions" xsi:type="Element" x="20" y="310" w="170" h="55"/>
|
||||||
|
<connection identifier="cn-0301" relationshipRef="rel-141" xsi:type="Relationship" source="do-0285" target="do-0288"/>
|
||||||
|
<connection identifier="cn-0302" relationshipRef="rel-142" xsi:type="Relationship" source="do-0285" target="do-0289"/>
|
||||||
|
<connection identifier="cn-0303" relationshipRef="rel-143" xsi:type="Relationship" source="do-0285" target="do-0290"/>
|
||||||
|
<connection identifier="cn-0304" relationshipRef="rel-144" xsi:type="Relationship" source="do-0285" target="do-0291"/>
|
||||||
|
<connection identifier="cn-0305" relationshipRef="rel-145" xsi:type="Relationship" source="do-0285" target="do-0292"/>
|
||||||
|
<connection identifier="cn-0306" relationshipRef="rel-146" xsi:type="Relationship" source="do-0285" target="do-0293"/>
|
||||||
|
<connection identifier="cn-0307" relationshipRef="rel-147" xsi:type="Relationship" source="do-0285" target="do-0294"/>
|
||||||
|
<connection identifier="cn-0308" relationshipRef="rel-148" xsi:type="Relationship" source="do-0285" target="do-0295"/>
|
||||||
|
<connection identifier="cn-0309" relationshipRef="rel-149" xsi:type="Relationship" source="do-0285" target="do-0296"/>
|
||||||
|
<connection identifier="cn-0310" relationshipRef="rel-150" xsi:type="Relationship" source="do-0285" target="do-0297"/>
|
||||||
|
<connection identifier="cn-0311" relationshipRef="rel-151" xsi:type="Relationship" source="do-0285" target="do-0298"/>
|
||||||
|
<connection identifier="cn-0312" relationshipRef="rel-152" xsi:type="Relationship" source="do-0285" target="do-0299"/>
|
||||||
|
<connection identifier="cn-0313" relationshipRef="rel-153" xsi:type="Relationship" source="do-0285" target="do-0300"/>
|
||||||
|
<connection identifier="cn-0287" relationshipRef="rel-030" xsi:type="Relationship" source="do-0286" target="do-0285"/>
|
||||||
|
</view>
|
||||||
|
</diagrams>
|
||||||
|
</views>
|
||||||
|
</model>
|
||||||
Loading…
Reference in New Issue
Block a user