From 1294ad993f1ee319140bbffc384cf08ba0c5cce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 15 Mar 2026 09:38:27 +0400 Subject: [PATCH] 0 --- .github/copilot-instructions.md | 14 ++++++++++ .gitignore | 6 ++++ config/rbac/role.yaml | 7 +++++ .../{handler.py => event_cleaner_handler.py} | 14 +++++----- .../{handler.py => event_monitor_handler.py} | 14 +++++----- .../code/event-writer/event_writer_handler.py | 28 +++++++++++++++++++ .../code/event-writer/handler.py | 28 ------------------- examples/demo-managed-functions/function.tf | 6 ++-- 8 files changed, 72 insertions(+), 45 deletions(-) rename examples/demo-managed-functions/code/event-cleaner/{handler.py => event_cleaner_handler.py} (59%) rename examples/demo-managed-functions/code/event-monitor/{handler.py => event_monitor_handler.py} (59%) create mode 100644 examples/demo-managed-functions/code/event-writer/event_writer_handler.py delete mode 100644 examples/demo-managed-functions/code/event-writer/handler.py diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 6e61e90..8dc5852 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -46,6 +46,20 @@ --- +## Именование + +Имена должны быть **уникальными и осмысленными по всему проекту**: +- имена файлов +- имена функций/методов +- имена переменных/констант +- имена ресурсов (Terraform, Kubernetes и т.д.) + +Цель: чтобы поиск по проекту находил нужные сущности без неоднозначности, а имя сразу отражало назначение. + +Запрещены безликие и повторяющиеся имена вида `handler.py`, `handle`, `data`, `value`, `temp` без контекста. + +--- + ## Git Коммитить и пушить после каждого завершённого этапа. diff --git a/.gitignore b/.gitignore index ffb4f38..e30af62 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,9 @@ examples/*/dist/ **/handler.zip test.token *.tfvars +*.tfplan +plan.out +sless-plan .e2e-logs/ .stress-logs/ @@ -57,4 +60,7 @@ test.token **/dist/ # дополнительные вариации переменных/файлов конфигурации *.tfvars.json +*.tfplan +plan.out +sless-plan examples/.git diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 25947f6..f6f10f9 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -20,6 +20,13 @@ rules: - get - list - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - get - apiGroups: - "" resources: diff --git a/examples/demo-managed-functions/code/event-cleaner/handler.py b/examples/demo-managed-functions/code/event-cleaner/event_cleaner_handler.py similarity index 59% rename from examples/demo-managed-functions/code/event-cleaner/handler.py rename to examples/demo-managed-functions/code/event-cleaner/event_cleaner_handler.py index 5eec764..4b2bfcd 100644 --- a/examples/demo-managed-functions/code/event-cleaner/handler.py +++ b/examples/demo-managed-functions/code/event-cleaner/event_cleaner_handler.py @@ -6,21 +6,21 @@ import json from datetime import datetime, timezone -def handle(event): +def event_cleaner_handle(event_cleaner_event): """Принимает delete_n и возвращает подтверждение обработки.""" - payload = event if isinstance(event, dict) else {} + event_cleaner_payload = event_cleaner_event if isinstance(event_cleaner_event, dict) else {} - delete_n = int(payload.get("delete_n", 10)) - delete_n = max(1, min(delete_n, 100)) + event_cleaner_delete_n = int(event_cleaner_payload.get("delete_n", 10)) + event_cleaner_delete_n = max(1, min(event_cleaner_delete_n, 100)) - now = datetime.now(timezone.utc).isoformat() + event_cleaner_generated_at = datetime.now(timezone.utc).isoformat() # Здесь intentionally имитируем очистку, чтобы показать реакцию на входные параметры. return json.dumps( { "ok": True, - "accepted_delete_n": delete_n, + "accepted_delete_n": event_cleaner_delete_n, "status": "simulated-cleanup", - "generated_at": now, + "generated_at": event_cleaner_generated_at, } ), 200, {"Content-Type": "application/json"} diff --git a/examples/demo-managed-functions/code/event-monitor/handler.py b/examples/demo-managed-functions/code/event-monitor/event_monitor_handler.py similarity index 59% rename from examples/demo-managed-functions/code/event-monitor/handler.py rename to examples/demo-managed-functions/code/event-monitor/event_monitor_handler.py index e741ea1..2027cdb 100644 --- a/examples/demo-managed-functions/code/event-monitor/handler.py +++ b/examples/demo-managed-functions/code/event-monitor/event_monitor_handler.py @@ -7,19 +7,19 @@ import os from datetime import datetime, timezone -THRESHOLD = 50 +EVENT_MONITOR_THRESHOLD = 50 -def handle(request): +def event_monitor_handle(event_monitor_event): """Отдаёт heartbeat для cron-запуска и видимой проверки после apply.""" - rabbitmq_url = os.environ.get("RABBITMQ_URL", "not-set") - now = datetime.now(timezone.utc).isoformat() + event_monitor_rabbitmq_url = os.environ.get("RABBITMQ_URL", "not-set") + event_monitor_generated_at = datetime.now(timezone.utc).isoformat() return json.dumps( { "ok": True, "monitor": "alive", - "threshold": THRESHOLD, - "rabbitmq_configured": rabbitmq_url != "not-set", - "generated_at": now, + "threshold": EVENT_MONITOR_THRESHOLD, + "rabbitmq_configured": event_monitor_rabbitmq_url != "not-set", + "generated_at": event_monitor_generated_at, } ), 200, {"Content-Type": "application/json"} diff --git a/examples/demo-managed-functions/code/event-writer/event_writer_handler.py b/examples/demo-managed-functions/code/event-writer/event_writer_handler.py new file mode 100644 index 0000000..ed84b2f --- /dev/null +++ b/examples/demo-managed-functions/code/event-writer/event_writer_handler.py @@ -0,0 +1,28 @@ +# Изменено: 2026-03-14 +# event-writer: простая HTTP функция без внешних зависимостей. +# Правка поля response_tag в коде сразу видна в ответе после terraform apply. + +import json +import os +from datetime import datetime, timezone + + +def event_writer_handle(event_writer_event): + """Возвращает полезный JSON-ответ для визуальной проверки выката кода.""" + writer_default_message = os.environ.get("DEFAULT_MESSAGE", "writer-default") + + writer_payload = event_writer_event if isinstance(event_writer_event, dict) else {} + + writer_message_value = writer_payload.get("message", writer_default_message) + writer_source_name = writer_payload.get("source", "event-writer") + writer_generated_at = datetime.now(timezone.utc).isoformat() + + # response_tag удобно менять для демонстрации hot-update кода через terraform apply. + writer_response_tag = "writer-v2" + return { + "ok": True, + "source": writer_source_name, + "message": writer_message_value, + "response_tag": writer_response_tag, + "generated_at": writer_generated_at, + } diff --git a/examples/demo-managed-functions/code/event-writer/handler.py b/examples/demo-managed-functions/code/event-writer/handler.py deleted file mode 100644 index 5035259..0000000 --- a/examples/demo-managed-functions/code/event-writer/handler.py +++ /dev/null @@ -1,28 +0,0 @@ -# Изменено: 2026-03-14 -# event-writer: простая HTTP функция без внешних зависимостей. -# Правка поля response_tag в коде сразу видна в ответе после terraform apply. - -import json -import os -from datetime import datetime, timezone - - -def handle(event): - """Возвращает полезный JSON-ответ для визуальной проверки выката кода.""" - default_message = os.environ.get("DEFAULT_MESSAGE", "writer-default") - - payload = event if isinstance(event, dict) else {} - - message = payload.get("message", default_message) - source = payload.get("source", "event-writer") - now = datetime.now(timezone.utc).isoformat() - - # response_tag удобно менять для демонстрации hot-update кода через terraform apply. - response_tag = "writer-v2" - return { - "ok": True, - "source": source, - "message": message, - "response_tag": response_tag, - "generated_at": now, - } diff --git a/examples/demo-managed-functions/function.tf b/examples/demo-managed-functions/function.tf index 0e1c1ef..48b5877 100644 --- a/examples/demo-managed-functions/function.tf +++ b/examples/demo-managed-functions/function.tf @@ -5,7 +5,7 @@ resource "sless_function" "event_writer" { name = "event-writer" runtime = "python3.11" - entrypoint = "handler.handle" + entrypoint = "event_writer_handler.event_writer_handle" memory_mb = 128 timeout_sec = 20 @@ -27,7 +27,7 @@ resource "sless_trigger" "event_writer_http" { resource "sless_function" "event_monitor" { name = "event-monitor" runtime = "python3.11" - entrypoint = "handler.handle" + entrypoint = "event_monitor_handler.event_monitor_handle" memory_mb = 128 timeout_sec = 20 @@ -50,7 +50,7 @@ resource "sless_trigger" "event_monitor_cron" { resource "sless_function" "event_cleaner" { name = "event-cleaner" runtime = "python3.11" - entrypoint = "handler.handle" + entrypoint = "event_cleaner_handler.event_cleaner_handle" memory_mb = 128 timeout_sec = 20