0
This commit is contained in:
@@ -46,6 +46,20 @@
|
||||
|
||||
---
|
||||
|
||||
## Именование
|
||||
|
||||
Имена должны быть **уникальными и осмысленными по всему проекту**:
|
||||
- имена файлов
|
||||
- имена функций/методов
|
||||
- имена переменных/констант
|
||||
- имена ресурсов (Terraform, Kubernetes и т.д.)
|
||||
|
||||
Цель: чтобы поиск по проекту находил нужные сущности без неоднозначности, а имя сразу отражало назначение.
|
||||
|
||||
Запрещены безликие и повторяющиеся имена вида `handler.py`, `handle`, `data`, `value`, `temp` без контекста.
|
||||
|
||||
---
|
||||
|
||||
## Git
|
||||
|
||||
Коммитить и пушить после каждого завершённого этапа.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -20,6 +20,13 @@ rules:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
|
||||
+7
-7
@@ -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
-7
@@ -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,
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user