This commit is contained in:
“Naeel”
2026-03-15 09:38:27 +04:00
parent 8dd5b676c0
commit 1294ad993f
8 changed files with 72 additions and 45 deletions
+14
View File
@@ -46,6 +46,20 @@
---
## Именование
Имена должны быть **уникальными и осмысленными по всему проекту**:
- имена файлов
- имена функций/методов
- имена переменных/констант
- имена ресурсов (Terraform, Kubernetes и т.д.)
Цель: чтобы поиск по проекту находил нужные сущности без неоднозначности, а имя сразу отражало назначение.
Запрещены безликие и повторяющиеся имена вида `handler.py`, `handle`, `data`, `value`, `temp` без контекста.
---
## Git
Коммитить и пушить после каждого завершённого этапа.
+6
View File
@@ -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
+7
View File
@@ -20,6 +20,13 @@ rules:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- create
- get
- apiGroups:
- ""
resources:
@@ -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"}
@@ -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"}
@@ -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,
}
@@ -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,
}
+3 -3
View File
@@ -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