0
This commit is contained in:
@@ -46,6 +46,20 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Именование
|
||||||
|
|
||||||
|
Имена должны быть **уникальными и осмысленными по всему проекту**:
|
||||||
|
- имена файлов
|
||||||
|
- имена функций/методов
|
||||||
|
- имена переменных/констант
|
||||||
|
- имена ресурсов (Terraform, Kubernetes и т.д.)
|
||||||
|
|
||||||
|
Цель: чтобы поиск по проекту находил нужные сущности без неоднозначности, а имя сразу отражало назначение.
|
||||||
|
|
||||||
|
Запрещены безликие и повторяющиеся имена вида `handler.py`, `handle`, `data`, `value`, `temp` без контекста.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Git
|
## Git
|
||||||
|
|
||||||
Коммитить и пушить после каждого завершённого этапа.
|
Коммитить и пушить после каждого завершённого этапа.
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ examples/*/dist/
|
|||||||
**/handler.zip
|
**/handler.zip
|
||||||
test.token
|
test.token
|
||||||
*.tfvars
|
*.tfvars
|
||||||
|
*.tfplan
|
||||||
|
plan.out
|
||||||
|
sless-plan
|
||||||
.e2e-logs/
|
.e2e-logs/
|
||||||
.stress-logs/
|
.stress-logs/
|
||||||
|
|
||||||
@@ -57,4 +60,7 @@ test.token
|
|||||||
**/dist/
|
**/dist/
|
||||||
# дополнительные вариации переменных/файлов конфигурации
|
# дополнительные вариации переменных/файлов конфигурации
|
||||||
*.tfvars.json
|
*.tfvars.json
|
||||||
|
*.tfplan
|
||||||
|
plan.out
|
||||||
|
sless-plan
|
||||||
examples/.git
|
examples/.git
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ rules:
|
|||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- secrets
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- get
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
|
|||||||
+7
-7
@@ -6,21 +6,21 @@ import json
|
|||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
|
||||||
def handle(event):
|
def event_cleaner_handle(event_cleaner_event):
|
||||||
"""Принимает delete_n и возвращает подтверждение обработки."""
|
"""Принимает 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))
|
event_cleaner_delete_n = int(event_cleaner_payload.get("delete_n", 10))
|
||||||
delete_n = max(1, min(delete_n, 100))
|
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 имитируем очистку, чтобы показать реакцию на входные параметры.
|
# Здесь intentionally имитируем очистку, чтобы показать реакцию на входные параметры.
|
||||||
return json.dumps(
|
return json.dumps(
|
||||||
{
|
{
|
||||||
"ok": True,
|
"ok": True,
|
||||||
"accepted_delete_n": delete_n,
|
"accepted_delete_n": event_cleaner_delete_n,
|
||||||
"status": "simulated-cleanup",
|
"status": "simulated-cleanup",
|
||||||
"generated_at": now,
|
"generated_at": event_cleaner_generated_at,
|
||||||
}
|
}
|
||||||
), 200, {"Content-Type": "application/json"}
|
), 200, {"Content-Type": "application/json"}
|
||||||
+7
-7
@@ -7,19 +7,19 @@ import os
|
|||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
|
||||||
THRESHOLD = 50
|
EVENT_MONITOR_THRESHOLD = 50
|
||||||
|
|
||||||
|
|
||||||
def handle(request):
|
def event_monitor_handle(event_monitor_event):
|
||||||
"""Отдаёт heartbeat для cron-запуска и видимой проверки после apply."""
|
"""Отдаёт heartbeat для cron-запуска и видимой проверки после apply."""
|
||||||
rabbitmq_url = os.environ.get("RABBITMQ_URL", "not-set")
|
event_monitor_rabbitmq_url = os.environ.get("RABBITMQ_URL", "not-set")
|
||||||
now = datetime.now(timezone.utc).isoformat()
|
event_monitor_generated_at = datetime.now(timezone.utc).isoformat()
|
||||||
return json.dumps(
|
return json.dumps(
|
||||||
{
|
{
|
||||||
"ok": True,
|
"ok": True,
|
||||||
"monitor": "alive",
|
"monitor": "alive",
|
||||||
"threshold": THRESHOLD,
|
"threshold": EVENT_MONITOR_THRESHOLD,
|
||||||
"rabbitmq_configured": rabbitmq_url != "not-set",
|
"rabbitmq_configured": event_monitor_rabbitmq_url != "not-set",
|
||||||
"generated_at": now,
|
"generated_at": event_monitor_generated_at,
|
||||||
}
|
}
|
||||||
), 200, {"Content-Type": "application/json"}
|
), 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" {
|
resource "sless_function" "event_writer" {
|
||||||
name = "event-writer"
|
name = "event-writer"
|
||||||
runtime = "python3.11"
|
runtime = "python3.11"
|
||||||
entrypoint = "handler.handle"
|
entrypoint = "event_writer_handler.event_writer_handle"
|
||||||
memory_mb = 128
|
memory_mb = 128
|
||||||
timeout_sec = 20
|
timeout_sec = 20
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ resource "sless_trigger" "event_writer_http" {
|
|||||||
resource "sless_function" "event_monitor" {
|
resource "sless_function" "event_monitor" {
|
||||||
name = "event-monitor"
|
name = "event-monitor"
|
||||||
runtime = "python3.11"
|
runtime = "python3.11"
|
||||||
entrypoint = "handler.handle"
|
entrypoint = "event_monitor_handler.event_monitor_handle"
|
||||||
memory_mb = 128
|
memory_mb = 128
|
||||||
timeout_sec = 20
|
timeout_sec = 20
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ resource "sless_trigger" "event_monitor_cron" {
|
|||||||
resource "sless_function" "event_cleaner" {
|
resource "sless_function" "event_cleaner" {
|
||||||
name = "event-cleaner"
|
name = "event-cleaner"
|
||||||
runtime = "python3.11"
|
runtime = "python3.11"
|
||||||
entrypoint = "handler.handle"
|
entrypoint = "event_cleaner_handler.event_cleaner_handle"
|
||||||
memory_mb = 128
|
memory_mb = 128
|
||||||
timeout_sec = 20
|
timeout_sec = 20
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user