feat(web): implement schedule editor in MaintenancePoliciesTab
CI / changes (push) Successful in 8s
CI / commitlint (push) Has been skipped
CI / openapi (push) Has been skipped
CI / web (push) Successful in 31s
CI / go (push) Successful in 51s
CI / bird2 (push) Successful in 15s
CI / release (push) Successful in 3m48s

Enhanced the MaintenancePoliciesTab by integrating a schedule editor for maintenance policies. Users can now select schedule modes, input custom cron expressions, and dynamically update the schedule preview. This update improves the user interface and experience for managing maintenance schedules.
This commit is contained in:
Denozordec
2026-06-12 18:40:22 +07:00
parent 132559cb8e
commit de64374c91
71 changed files with 15643 additions and 4 deletions
+26
View File
@@ -0,0 +1,26 @@
# Memory Bank: Active Context
## Текущий фокус
**VAN-инициализация** — Memory Bank создан, задача не определена.
## Статус
- Memory Bank: создан и заполнен базовым контекстом проекта
- Активная задача: отсутствует (ожидается описание от пользователя)
## Наблюдаемый контекст (git)
Незакоммиченные файлы, вероятно из предыдущей сессии:
- `web/src/lib/components/monitoring/MaintenancePoliciesTab.svelte`
- `web/src/lib/maintenance/policy-schedule.ts`
Область: UI политик обслуживания PostgreSQL (расписание cron, пресеты, CRUD).
## Следующий шаг
Определить задачу и уровень сложности (1–4), затем маршрутизация:
- Level 1 → `/build`
- Level 2–4 → `/plan`
+27
View File
@@ -0,0 +1,27 @@
# Memory Bank: Product Context
## Пользователи
- **Операторы** — CRUD модулей, пиров, ревизий, apply/rollback через API и Web UI
- **Ноды (роль `node`)** — узкие эндпоинты: бандлы, verify, apply на спикере
## Основные сущности
- Модули префиксов (AS_PREFIXES, CDN_CIDRS, DOMAINS, IP_RANGES)
- DoH-профили, BGP communities
- Peers, Speakers
- Ревизии конфигурации (preview, diff, rollback)
- Jobs (асинхронные операции)
- Maintenance policies (мониторинг PostgreSQL)
## Потоки
1. Ingest → Render → Publish revision → Deploy → Node pull/apply bundle
2. Scheduler периодически ставит `module_refresh`
3. Web UI проксирует/вызывает REST API с API-ключом
## Документация
- Обзор: `docs/overview.md`
- Доступ и роли: `docs/access.md`
- API: `docs/api.md`
+16
View File
@@ -0,0 +1,16 @@
# Memory Bank: Progress
## VAN Initialization — 2026-06-12
| Шаг | Статус |
|-----|--------|
| Platform detection | ✅ Windows / PowerShell |
| Memory Bank structure | ✅ Создан |
| Core files populated | ✅ Базовый контекст EvoBGP |
| Task analysis | ⏳ Ожидает описание задачи |
| Complexity determination | ⏳ — |
| Route to workflow | ⏳ — |
## Реализация
_Нет активной реализации._
+28
View File
@@ -0,0 +1,28 @@
# Memory Bank: Project Brief
## Проект
**EvoBGP** — control plane для управления префиксами, модулями ingest, ревизиями конфигурации BIRD и выкладкой на BGP-спикеры.
## Цели
- Описание источников префиксов (модули: AS, CDN, DOMAINS, IP_RANGES)
- Сборка согласованных снимков (ревизии) и генерация конфигурации BIRD
- Доставка подписанных бандлов на BGP-спикеры (`evobgp-node`)
- Операторский веб-интерфейс (SvelteKit) и REST API (Go)
## Ключевые артефакты
| Область | Путь |
|---------|------|
| HTTP-контракт | `docs/openapi.yaml` |
| Архитектура | `docs/architecture.md` |
| Go backend | `internal/`, `cmd/` |
| Web UI | `web/` |
| Деплой | `deploy/compose/` |
## Ограничения
- Persistence только через `store.Backend` (ARCH-01)
- Долгие операции — `jobs.Registry`, ответ `202` + `job_id`
- Web UI — shadcn-svelte / bits-ui экосистема
+27
View File
@@ -0,0 +1,27 @@
# Memory Bank: System Patterns
## Слои
- **Control plane:** `httpapi`, `store`, `repository`, `jobs`, `bundle`, `signing`, `pipeline`, `birdfmt`
- **Data plane:** BIRD2, `evobgp-agent`, `evobgp-node`
- **Web:** SvelteKit, shadcn-svelte (`ui/core`, `ui/patterns`, `ui/app`)
## Паттерны
| Паттерн | Реализация |
|---------|------------|
| Store abstraction | `store.Backend` + `repository` / `store.Memory` |
| Async jobs | `jobs.Registry`, in-process (кроме cross-process HTTP) |
| HTTP errors | `writeProblem` / RFC 9457 problem+json |
| UI forms | sveltekit-superforms + Formsnap |
| UI tables | TanStack Table + `AppDataTable` |
## Процессы (`cmd/`)
- `evobgp-api` — только API
- `evobgp-all` — API + scheduler + ingest + render + deploy
- Отдельные воркеры в reference Compose
## Источник правды
OpenAPI (`docs/openapi.yaml`) → код → `docs/`
+32
View File
@@ -0,0 +1,32 @@
# Memory Bank: Tasks
## Current Task
**[Не определена]** — пользователь вызвал `/van` без описания задачи.
## Status
- [x] VAN: platform detection
- [x] VAN: Memory Bank verification & creation
- [x] VAN: baseline project context
- [ ] Task definition (от пользователя)
- [ ] Complexity determination (Level 1–4)
- [ ] Implementation plan
- [ ] Execution
- [ ] Documentation / reflect
## Candidate Context (из git, не подтверждено)
Возможное продолжение работы над **Maintenance Policies UI**:
- `MaintenancePoliciesTab.svelte` — вкладка политик в мониторинге
- `policy-schedule.ts` — редактор cron-расписания (5-field, UTC)
## Requirements
_Ожидается формулировка задачи от пользователя._
Пример:
```
/van Доработать MaintenancePoliciesTab: валидация cron и тесты
```
+38
View File
@@ -0,0 +1,38 @@
# Memory Bank: Tech Context
## Платформа разработки
- **OS:** Windows 10 (win32 10.0.26200)
- **Shell:** PowerShell
- **Пути:** `deploy\compose`, backslash на Windows
## Backend
- **Go:** 1.24 (`go.mod`)
- **БД:** PostgreSQL (prod), SQLite (modernc, тесты)
- **Миграции:** `migrations/postgres/`, `migrations/sqlite/` (пары .up/.down)
- **Метрики:** Prometheus (`/metrics`)
## Frontend
- **Svelte:** ^5.54 (runes: `$state`, `$derived`, `$effect`)
- **SvelteKit:** ^2.50
- **Vite:** ^7.3.1
- **UI:** shadcn-svelte, bits-ui, Tailwind v4
- **Проверки:** `npm run check`, `npm run lint` (обязательно после правок)
## CI (Gitea)
- `go`: vet, golangci-lint, test -race, build
- `web`: check + lint
- `openapi`: redocly lint
- `bird2`: `bird -p` на scenarios
## Локальные команды
```powershell
go vet ./...
go test ./... -race -count=1
cd web; npm run check; npm run lint
npx @redocly/cli lint docs/openapi.yaml
```