Инструменты пользователя

Инструменты сайта


sharixopen:knowledge:scenarios:report_handler

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

sharixopen:knowledge:scenarios:report_handler [2026/10/28 21:35] – [sharixknowledge] approved package sx_knowledge_api_opensharixopen:knowledge:scenarios:report_handler [2026/10/31 14:26] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open
Строка 13: Строка 13:
             "ShariXKnowledgeOpenKnowledgeModulesHandlers",             "ShariXKnowledgeOpenKnowledgeModulesHandlers",
             "ShariXKnowledgeScenarios"             "ShariXKnowledgeScenarios"
 +        ],
 +        "depends_on": [
 +            "ShariXKnowledgeOpenKnowledgeModulesHandlers"
 +        ],
 +        "verified_by": [
 +            "ShariXKnowledgeVerification"
         ]         ]
     },     },
     "extensions": {     "extensions": {
         "taxonomy": {         "taxonomy": {
-            "domain": "business_processes",+            "domain": "operations",
             "lifecycle": "implemented",             "lifecycle": "implemented",
-            "component": "handlers",+            "component": "handlers_examples, handlers_backend",
             "parents": [             "parents": [
                 "ShariXKnowledgeScenarios"                 "ShariXKnowledgeScenarios"
             ],             ],
             "terms": [             "terms": [
-                "XMPP", +                "audience_developer", 
-                "reports", +                "audience_operator", 
-                "first-party", +                "audience_administrator", 
-                "BPMN"+                "audience_support", 
 +                "audience_ai", 
 +                "product_sharix_open", 
 +                "material_scenario", 
 +                "topic_operations_diagnostics", 
 +                "topic_handlers_blockly", 
 +                "topic_handlers_runtime", 
 +                "first_party_handler", 
 +                "xmpp", 
 +                "handler_reports", 
 +                "bpmn", 
 +                "blockly", 
 +                "generated_python"
             ]             ]
         },         },
Строка 111: Строка 129:
                 "aggregate_handler_reports"                 "aggregate_handler_reports"
             ]             ]
 +        },
 +        "classification": {
 +            "schema": "sharix.knowledge.classification.v1",
 +            "products": [
 +                "sharix_open"
 +            ],
 +            "audiences": [
 +                "developer",
 +                "operator",
 +                "administrator",
 +                "support",
 +                "ai"
 +            ],
 +            "material": "scenario",
 +            "topics": [
 +                "operations/diagnostics",
 +                "handlers/blockly",
 +                "handlers/runtime"
 +            ],
 +            "tag_terms": [
 +                "audience_developer",
 +                "audience_operator",
 +                "audience_administrator",
 +                "audience_support",
 +                "audience_ai",
 +                "product_sharix_open",
 +                "material_scenario",
 +                "topic_operations_diagnostics",
 +                "topic_handlers_blockly",
 +                "topic_handlers_runtime",
 +                "first_party_handler",
 +                "xmpp",
 +                "handler_reports",
 +                "bpmn",
 +                "blockly",
 +                "generated_python"
 +            ],
 +            "registry_document": "ShariXKnowledgeClassification",
 +            "state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
 +        },
 +        "editorial_review": {
 +            "date": "2026-10-31",
 +            "scope": "Конкретизация действий, условий, результатов и диагностики; перечисления; исходные BPMN сохранены",
 +            "current_source_records_verified": 10,
 +            "original_source_evidence_recheck": "После git fetch все исходные commits/SHA-256 совпали; дополнительные функциональные источники включены в source_evidence",
 +            "canonical_regeneration": {
 +                "kind": "first_party",
 +                "compared_python_paths": [
 +                    "handlers/open_report_handler.py"
 +                ],
 +                "generator_sources_verified": 11,
 +                "handler_executed": false
 +            },
 +            "runtime_checked": false
         }         }
     },     },
-    "content_sha256": "c25dde4b69cce3c96bcd0ecb35132018efa4ef07c0ebbe488bbe8c95d347baa7",+    "content_sha256": "3ca60e6210baf10cc92f0d9a5470122c77c819a2f4b52f4217e29f4680e93204",
     "schema": 1     "schema": 1
 } }
Строка 120: Строка 192:
 ~~NOCACHE~~ ~~NOCACHE~~
  
-**Область:** ShariX Open. **Обработчик:** ''open_report_handler'', системный first-party handler без типа/рабочего статуса Ticket. Проверено 29.10.2026: опубликованный Python побайтово совпадает с каноническим first-party Blockly renderer. Фактические runtime config, версия и XMPP-состояние установки проверяются отдельно.+**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]]. 
 + 
 +**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#operator_razvjortyvanija|Оператор развёртывания]] · [[sharixopen:knowledge:classification:audiences#administrator|Администратор]] · [[sharixopen:knowledge:classification:audiences#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]]. 
 + 
 +**Темы:** [[sharixopen:knowledge:classification:topics#diagnostika|Эксплуатация → Диагностика]] · [[sharixopen:knowledge:classification:topics#blockly|Обработчики → Blockly]] · [[sharixopen:knowledge:classification:topics#runtime|Обработчики → Runtime]]. 
 + 
 + 
 + 
 +**Область:** ShariX Open. **Обработчик:** ''open_report_handler'', системный first-party handler без типа/рабочего статуса Ticket. 31.10.2026 исходники повторно получены из Git. First-party Python совпал с каноническим renderer; отдельно проверены операция aggregate_handler_reports и общий launcher. Сам обработчик и его внешние действия не запускались. Выбранная версия и работающая установка проверяются отдельно.
  
 ===== Назначение и канонический контракт ===== ===== Назначение и канонический контракт =====
-Бот принимает разрешённые XMPP-тексты, группирует их по отправителю в памяти и периодически пересылает сводку техническому получателю. Это не постоянный журнал ошибок, не очередь задач Deck, не редакторское согласование и не гарантированная доставка каждому сотруднику.+Сборщик выполняет две независимые части: 
 + 
 +  * входящий callback добавляет разрешённые XMPP-тексты в память по отправителю; 
 +  * длительный цикл периодически пересылает сводку техническому адресату. 
 + 
 +Это не постоянный журнал ошибок, очередь Deck или редакторское согласование. Доставка каждому сотруднику не реализована.
  
 В Blockly зафиксирована typed operation ''aggregate_handler_reports''. Сгенерированный Python вызывает binding; runtime сверяет точную последовательность с каталогом builtin и загружает ''first_party_operations/open_report_handler.py''. При несовпадении контракт отклоняется. В runtime исполняется Python; Blockly JSON не интерпретируется. Код operation и общий launcher включены в закреплённые источники, поскольку wrapper сам по себе не описывает фильтры, память и ошибки пересылки. В Blockly зафиксирована typed operation ''aggregate_handler_reports''. Сгенерированный Python вызывает binding; runtime сверяет точную последовательность с каталогом builtin и загружает ''first_party_operations/open_report_handler.py''. При несовпадении контракт отклоняется. В runtime исполняется Python; Blockly JSON не интерпретируется. Код operation и общий launcher включены в закреплённые источники, поскольку wrapper сам по себе не описывает фильтры, память и ошибки пересылки.
Строка 254: Строка 339:
 </sharix-bpmn> </sharix-bpmn>
  
-Callback принимает только chat/normal. Resource отбрасывается, sender bare JID сопоставляется с listen_to: handler ids из каталога, кроме самого open_report_handler, плюс технический UID 5101 в настроенном EJ_HOST. Состав каталога может включать материализованные contributions установки; произвольный внешний JID не становится разрешённым только из-за текста «ошибка».+Входной фильтр:
  
-Body проверяется на None. При допуске строка добавляется в список отправителя под lock, затем пишется лог recorded. Callback не разбирает severity/JSON, не выполняет команды из текста и не изменяет Ticket. Сообщения не дедуплицируются по event id: повторная доставка может стать ещё одной строкой отчёта.+  - Пропустить только chat/normal. 
 +  - Отбросить resource и получить bare JID. 
 +  - Сверить его с listen_to: handler ids каталога без самого open_report_handler и технический UID 5101 в EJ_HOST. 
 +  - Пропустить body, отличный от None. 
 + 
 +Каталог может включать материализованные contributions установки. Произвольный JID не становится разрешённым из-за слова «ошибка» в тексте. 
 + 
 +После допуска сообщения: 
 + 
 +  - Под lock добавить строку в список отправителя. 
 +  - Записать лог recorded. 
 +  - Позднее включить строку в snapshot сводки. 
 + 
 +Callback не разбирает severity/JSON, не выполняет команды и не меняет Ticket. Event-id дедупликации нет; повторная доставка может стать ещё одной строкой.
  
 Буфер — process memory. Он не хранится в БД или durable outbox; рестарт способен потерять неотправленное. Лог recorded подтверждает запись в локальную память текущего процесса, не пересылку получателю. Буфер — process memory. Он не хранится в БД или durable outbox; рестарт способен потерять неотправленное. Лог recorded подтверждает запись в локальную память текущего процесса, не пересылку получателю.
Строка 466: Строка 564:
 </sharix-bpmn> </sharix-bpmn>
  
-После общего XMPP connection preflight start_handler сразу начинает цикл, а не сначала ждёт полный интервал. На каждой итерации проверяется exit_event, под lock снимается копия reports и исходный буфер очищается. Новые сообщения во время отправки накапливаются отдельно.+Итерация отправки после XMPP connection preflight:
  
-Непустой snapshot форматируется по JID со списками сообщений. Сводка отправляется как XMPP chat каждому proceed_to, кроме собственного JID. В текущей operation proceed_to содержит **фиксированный UID 5101** в EJ_HOST. Это не автоматически вычисляемая METASERVICE-ADMIN/staff-группа, не Ticket.group и не все создатели исходных сообщений. Изменение адресата требует изменения соответствующего контракта/конфигурации, а не правки схемы Wiki.+  - Проверить exit_event. 
 +  - Под lock снять копию reports и очистить исходный буфер. 
 +  - Пока snapshot отправляется, принимать новые сообщения в отдельный текущий буфер. 
 +  - При непустом snapshot сформировать и отправить сводку.
  
-Флаг delivered становится true, когда хотя бы один send-call вернулся без исключения. Это не receipt и не прочтение. Если ни одной такой отправки нет, snapshot под lock возвращается **в начало** текущих списков: более ранние сообщения сохраняются перед прибывшими во время попытки. Если send хотя бы одному адресату успешен, snapshot не восстанавливается для остальных. При нынешнем единственном получателе это один исход; при будущем расширении списка нельзя считать механизм индивидуальным durable retry для каждого адресата.+Первая итерация начинается сразу; полный INTERVAL_TIME_REPORT до неё не ожидается. 
 + 
 +Отправка сводки: 
 + 
 +  * формат — JID и списки сообщений; 
 +  * транспорт — XMPP chat; 
 +  * получатели — proceed_to без собственного JID; 
 +  * в текущей operation единственный адресат — фиксированный 5101@EJ_HOST. 
 + 
 +Этот адресат не вычисляется из METASERVICE-ADMIN/staff, Ticket.group или авторов сообщений. Изменение получателя требует правки соответствующего контракта/конфигурации. 
 + 
 +Результат send обрабатывается так: 
 + 
 +  * хотя бы один вызов без исключения устанавливает delivered=true; 
 +  * если таких вызовов нет, snapshot под lock возвращается в начало текущих списков перед новыми сообщениями; 
 +  * при хотя бы одном успешном вызове snapshot для остальных адресатов не восстанавливается. 
 + 
 +Это не receipt и не прочтение. Сейчас адресат один; алгоритм не является индивидуальным durable retry для будущего списка получателей.
  
 После итерации выполняется ''exit_event.wait(INTERVAL_TIME_REPORT)''. Это прерываемое ожидание: сигнал остановки не обязан ждать весь интервал. Затем цикл повторяется. Пустой snapshot не порождает сообщение «No reports available»: отправка в start_handler выполняется только при непустом наборе, хотя formatter имеет такую строку для отдельного вызова. После итерации выполняется ''exit_event.wait(INTERVAL_TIME_REPORT)''. Это прерываемое ожидание: сигнал остановки не обязан ждать весь интервал. Затем цикл повторяется. Пустой snapshot не порождает сообщение «No reports available»: отправка в start_handler выполняется только при непустом наборе, хотя formatter имеет такую строку для отдельного вызова.
Строка 480: Строка 598:
  
 ===== Диагностика ===== ===== Диагностика =====
-Разделяйте сообщение отправителя, попадание в allowlist, добавление в reports, снятый snapshot, вызов send и фактическое получение. Для отсутствующего отчёта проверяйте тип и bare JID, актуальный каталог, время работы процесса и INTERVAL_TIME_REPORT, затем фиксированного адресата и XMPP-логи.+Порядок диагностики: 
 + 
 +  - Проверить тип сообщения и bare JID по актуальному allowlist. 
 +  - Подтвердить добавление в reports, учитывая время жизни процесса. 
 +  - Найти снятый snapshot и момент итерации INTERVAL_TIME_REPORT. 
 +  - Проверить фиксированного адресата и исход send. 
 +  - Отдельно подтвердить фактическое получение. 
 + 
 +Лог recorded относится к локальной памяти, а наличие строк в файловом журнале другого handler не доказывает отправки агрегатору.
  
 Успешный запуск общего runtime ещё не доказывает, что каждый handler отправляет отчёты в этот JID. Наличие сообщений в обычных файловых логах также не означает, что они были отправлены агрегатору. Для надёжного архива нужны предусмотренные системы журналирования; этот handler не заменяет их. Успешный запуск общего runtime ещё не доказывает, что каждый handler отправляет отчёты в этот JID. Наличие сообщений в обычных файловых логах также не означает, что они были отправлены агрегатору. Для надёжного архива нужны предусмотренные системы журналирования; этот handler не заменяет их.
sharixopen/knowledge/scenarios/report_handler.1793223321.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX