Commit 11f74910 authored by Talgat Mustafinov's avatar Talgat Mustafinov

Add decision tree

parent 268f68e8
# Дерево принятий решений
\ No newline at end of file
# Дерево принятия решений — Техническая поддержка SYNERGY
---
## Как пользоваться этим документом
Каждый входящий запрос проходит через **три уровня**:
1. **Уровень 1 — Классификация запроса** → определить тип обращения
2. **Уровень 2 — Проверка готовности** → убедиться, что предоставлены необходимые данные
3. **Уровень 3 — Диагностика** → шаги по локализации и устранению проблемы
---
## Уровень 1 — Классификация запроса
```
Получен запрос
Есть ли формализованное описание проблемы?
├── НЕТ ──► ОТКЛОНИТЬ. Запросить описание по шаблону.
└── ДА
Связан ли запрос с ошибкой штатного функционала платформы?
├── ДА ──► [ИНЦИДЕНТ] → перейти к Уровню 2-А
└── НЕТ
Связан ли запрос с проектированием, бизнес-логикой
или кастомной реализацией клиента?
├── ДА ──► ОТКЛОНИТЬ или перевести в [КОНСУЛЬТАЦИЮ]
│ с уведомлением о расходе часов
└── НЕТ ──► [КОНСУЛЬТАЦИЯ] → перейти к Уровню 2-Б
```
---
## Уровень 2-А — Проверка готовности: Инцидент
Перед началом диагностики убедиться, что заявитель предоставил:
- [ ] Версию платформы
- [ ] Среду (dev / test / prod)
- [ ] Пошаговое описание воспроизведения ошибки
- [ ] Логи, скриншоты, трассировки
- [ ] Минимальный сценарий воспроизведения
**Если данные не предоставлены** → приостановить работу, запросить недостающее.
**Если данные есть** → перейти к Уровню 3-А (диагностика инцидента).
---
## Уровень 2-Б — Проверка готовности: Консультация
Убедиться, что заявитель выполнил самостоятельную проработку:
- [ ] Изучена документация на [TDD](http://tdd.lan.arta.kz/docs/)
- [ ] Проверена база существующих заявок (Хранилище → Реестры → Архив обращений)
- [ ] Проведены собственные эксперименты и проверки
- [ ] Получена консультация сертифицированных коллег
- [ ] Определена категория вопроса по каталогу услуг
**Проверить баланс часов:**
```
Есть свободные часы поддержки (из 4 ч/мес по dev-лицензии)?
├── ДА ──► Принять в работу → Уровень 3-Б
└── НЕТ ──► Уведомить о приостановке.
Продолжение только на платной основе.
```
---
## Уровень 3-А — Диагностика инцидента
### Шаг 1 — Проверка окружения
Прежде чем диагностировать платформу, исключить инфраструктурные причины:
```
Выполнены требования промышленной эксплуатации?
├── НЕТ ──► Проблема на стороне инфраструктуры.
│ Направить заявителя устранять несоответствие.
│ Зафиксировать как НЕ инцидент платформы.
└── ДА ──► Перейти к Шагу 2
```
**Контрольные параметры окружения:**
- ОЗУ: запас ≥ 20% в штатном режиме
- Диск: ≥ 20 Гб свободно на каждом разделе записи
- БД, процессы, индексы: актуальная версия
- Резервные копии: ≥ 3 консистентных, одна — не старше 24 ч
- ИБП и корректное выключение: настроено
- Мониторинг ресурсов: подключён
---
### Шаг 2 — Первичная локализация по слою
```
Определить слой проблемы:
├──► ИНФРАСТРУКТУРА
│ Симптомы: недостаток ресурсов сервера, аварийные выключения,
│ нехватка диска/ОЗУ
│ Инструмент: htop, системные логи, мониторинг
├──► СУБД (MySQL)
│ Симптомы: зависание запросов, ошибки соединения, медленные операции
│ Инструмент: information_schema.processlist, /var/log/mysql
├──► ХРАНИЛИЩЕ / ИНДЕКСЫ (Cassandra / Elasticsearch)
│ Симптомы: ошибки индексации, отказ поиска, rejected execution
│ Инструмент: /var/log/cassandra, /var/log/elasticsearch
├──► ПРИЛОЖЕНИЕ (JBoss / Платформа)
│ Симптомы: ошибки в логах, stack trace, зависание процессов
│ Инструмент: /var/log/synergy/server.log, JBoss CLI
└──► IDE / CORE (логика приложения на платформе)
Симптомы: ошибки в конкретных реестрах, маршрутах, скриптах
Инструмент: SQL-запросы к БД, анализ app_objects
```
---
### Шаг 3 — Диагностика по типу проблемы
#### 3.1 — Проблема с производительностью / зависание
```
Высокая нагрузка CPU или ОЗУ?
├── CPU ──► Снять thread dump (kill -3 <pid>)
│ Перевести PID нагруженного потока в HEX
│ Найти поток по nid в дампе
│ → Определить: GC, бизнес-логика, deadlock?
└── ОЗУ ──► Снять heap dump (jmap -dump:...)
Загрузить в VisualVM / heaphero.io
→ Определить: утечка памяти, какие объекты занимают память?
```
#### 3.2 — Ошибка в логах
```
Есть stack trace в логах?
├── ДА ──► Определить класс и метод источника ошибки
│ Сопоставить с версией платформы
│ Проверить известные проблемы (см. раздел ниже)
└── НЕТ ──► Проверить логи смежных компонентов:
MySQL → /var/log/mysql
Cassandra → /var/log/cassandra
Elasticsearch → /var/log/elasticsearch
```
#### 3.3 — Ошибка после обновления платформы
```
Проблема появилась после обновления?
└── ДА
Проверить:
1. Актуальность версий БД, процессов и индексов
2. Конфигурационные файлы на изменения:
/opt/synergy/jboss/standalone/configuration/
/opt/synergy/jboss/standalone/deployments/
3. Логи с момента запуска после обновления
4. Совместимость сторонних компонентов (ES, Cassandra, LibreOffice)
```
#### 3.4 — Проблема воспроизводится не везде
```
Воспроизводится на другом экземпляре платформы той же версии?
├── ДА ──► Вероятно инцидент платформы.
│ Зафиксировать минимальный сценарий.
│ Передать в разработку.
└── НЕТ ──► Проблема в конфигурации или данных конкретного стенда.
Экспортировать конфигурацию объекта с ошибкой.
Анализировать различия между стендами.
```
---
### Шаг 4 — Сопоставление с известными проблемами
| Симптом | Вероятная причина | Действие |
|---|---|---|
| `no office manager available` | Падение инстанса LibreOffice | Перезапустить LibreOffice и платформу |
| Бесконечные `cancelRouteItems` в логах | Зацикленный условный переход | Исправить маршрут в Configurator; остановить через REST API |
| `Access denied` при сохранении формы | Фрагментация данных файлов (asf_attachment) | POST `/Synergy/rest/asforms/form/attachments/clear` |
| `Cannot get pdf pages info` + GhostScript exit code 1 | Неподходящая версия GhostScript | Установить версию `9.27~dfsg-2+deb10u5` |
| `NullPointerException` в `arta.reports` + NULL в `compiledbinary` | Битая печатка IReport | Найти и удалить/заменить `.jrxml` в Configurator |
| `ES rejected execution exception` | Переполнение bulk-очередей Elasticsearch | Увеличить `thread_pool.bulk.queue_size` в `elasticsearch.yml` |
| `Access denied for user 'root'@'localhost'` при старте | Тип аутентификации MySQL — `auth_socket` | `ALTER USER ... IDENTIFIED WITH mysql_native_password` |
---
### Шаг 5 — Определение обходного пути
Перед закрытием инцидента обязательно:
```
Найден обходной путь?
├── ДА ──► Зафиксировать. Передать заявителю.
│ Параллельно передать дефект в разработку (если подтверждён).
└── НЕТ ──► Зафиксировать отсутствие обходного пути.
Оценить критичность.
При критической ошибке — запросить доступ к окружению:
security_ctkdrt@arta.pro
```
---
## Уровень 3-Б — Диагностика консультации
```
Тип консультации?
├──► Локализация и диагностика производительности
│ → Применить: Diagnostic Decision Tree (данный документ)
│ Synergy Health, Synergy Benchmark, Synergy Profiler
├──► Архитектура и разработка приложения
│ → Проверить официальную документацию TDD
│ Дать архитектурные рекомендации и паттерны использования
│ Разобрать типовые ошибки проектирования
├──► Сопровождение обновлений
│ → Проверить совместимость версий компонентов
│ Рекомендации по миграции данных и приложений
│ Диагностика постобновленческих проблем
└──► Консультационное обучение
→ Разъяснение технических решений
Демонстрация типовых сценариев
Ссылки на документацию и учебные материалы
```
---
## Итоговая схема принятия решений
```
ВХОДЯЩИЙ ЗАПРОС
[1] Есть описание проблемы? ──НЕТ──► ОТКЛОНИТЬ
│ ДА
[2] Это ошибка штатного функционала? ──НЕТ──► [КОНСУЛЬТАЦИЯ]
│ ДА │
▼ ▼
[ИНЦИДЕНТ] Есть часы поддержки?
│ НЕТ ──► Уведомить, приостановить
▼ ДА ──► Диагностика консультации
[3] Предоставлены все данные? ──НЕТ──► Запросить, приостановить
│ ДА
[4] Окружение соответствует требованиям? ──НЕТ──► Проблема инфраструктуры
│ ДА
[5] Локализация по слою:
Инфраструктура / MySQL / ES+Cassandra / JBoss / Core
[6] Анализ логов + дампы (thread / heap)
[7] Сопоставление с известными проблемами
[8] Воспроизводится на чистом стенде? ──НЕТ──► Проблема конфигурации/данных
│ ДА
[9] Зафиксировать дефект + обходной путь ──► ЗАКРЫТЬ / ПЕРЕДАТЬ В РАЗРАБОТКУ
```
---
> **Примечание.** Дерево принятия решений является живым документом и должно дополняться по мере выявления новых типовых проблем и паттернов диагностики.
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment