Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
717 lines
26 KiB
Markdown
717 lines
26 KiB
Markdown
# Documentation du Modèle de Données (Base de Données)
|
|
|
|
Cette documentation a été générée automatiquement à partir des modèles SQLAlchemy.
|
|
|
|
## 1. Diagramme Entité-Association (ERD)
|
|
|
|
Le schéma ci-dessous montre l'architecture des tables et leurs relations :
|
|
|
|
```mermaid
|
|
erDiagram
|
|
alerts {
|
|
INTEGER id PK
|
|
INTEGER user_id FK "nullable"
|
|
VARCHAR category
|
|
VARCHAR level "nullable"
|
|
VARCHAR title "nullable"
|
|
TEXT message
|
|
VARCHAR source "nullable"
|
|
JSON details "nullable"
|
|
DATETIME read_at "nullable"
|
|
DATETIME created_at
|
|
}
|
|
app_settings {
|
|
VARCHAR key PK
|
|
TEXT value "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
}
|
|
bootstrap_status {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR status
|
|
VARCHAR automation_user "nullable"
|
|
DATETIME last_attempt "nullable"
|
|
TEXT error_message "nullable"
|
|
DATETIME created_at
|
|
}
|
|
container_customizations {
|
|
INTEGER id PK
|
|
INTEGER user_id FK "nullable"
|
|
VARCHAR host_id FK
|
|
VARCHAR container_id
|
|
VARCHAR icon_key "nullable"
|
|
VARCHAR icon_color "nullable"
|
|
VARCHAR bg_color "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
}
|
|
docker_alerts {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR container_name
|
|
VARCHAR severity
|
|
VARCHAR state
|
|
TEXT message "nullable"
|
|
DATETIME opened_at
|
|
DATETIME closed_at "nullable"
|
|
DATETIME acknowledged_at "nullable"
|
|
VARCHAR acknowledged_by "nullable"
|
|
DATETIME last_notified_at "nullable"
|
|
}
|
|
docker_containers {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR container_id
|
|
VARCHAR name
|
|
VARCHAR image "nullable"
|
|
VARCHAR state
|
|
VARCHAR status "nullable"
|
|
VARCHAR health "nullable"
|
|
DATETIME created_at "nullable"
|
|
JSON ports "nullable"
|
|
JSON labels "nullable"
|
|
VARCHAR compose_project "nullable"
|
|
DATETIME last_update_at
|
|
}
|
|
docker_images {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR image_id
|
|
JSON repo_tags "nullable"
|
|
BIGINT size "nullable"
|
|
DATETIME created "nullable"
|
|
DATETIME last_update_at
|
|
}
|
|
docker_volumes {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR name
|
|
VARCHAR driver "nullable"
|
|
TEXT mountpoint "nullable"
|
|
VARCHAR scope "nullable"
|
|
DATETIME last_update_at
|
|
}
|
|
favorite_containers {
|
|
INTEGER id PK
|
|
INTEGER user_id FK "nullable"
|
|
INTEGER docker_container_id FK
|
|
INTEGER group_id FK "nullable"
|
|
DATETIME created_at
|
|
}
|
|
favorite_groups {
|
|
INTEGER id PK
|
|
INTEGER user_id FK "nullable"
|
|
VARCHAR name
|
|
INTEGER sort_order
|
|
VARCHAR color "nullable"
|
|
VARCHAR icon_key "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
}
|
|
host_metrics {
|
|
INTEGER id PK
|
|
VARCHAR host_id FK
|
|
VARCHAR metric_type
|
|
INTEGER cpu_count "nullable"
|
|
VARCHAR cpu_model "nullable"
|
|
INTEGER cpu_cores "nullable"
|
|
INTEGER cpu_threads "nullable"
|
|
INTEGER cpu_threads_per_core "nullable"
|
|
INTEGER cpu_sockets "nullable"
|
|
FLOAT cpu_mhz "nullable"
|
|
FLOAT cpu_max_mhz "nullable"
|
|
FLOAT cpu_min_mhz "nullable"
|
|
FLOAT cpu_load_1m "nullable"
|
|
FLOAT cpu_load_5m "nullable"
|
|
FLOAT cpu_load_15m "nullable"
|
|
FLOAT cpu_usage_percent "nullable"
|
|
FLOAT cpu_temperature "nullable"
|
|
INTEGER memory_total_mb "nullable"
|
|
INTEGER memory_used_mb "nullable"
|
|
INTEGER memory_free_mb "nullable"
|
|
FLOAT memory_usage_percent "nullable"
|
|
INTEGER swap_total_mb "nullable"
|
|
INTEGER swap_used_mb "nullable"
|
|
FLOAT swap_usage_percent "nullable"
|
|
JSON disk_info "nullable"
|
|
JSON disk_devices
|
|
FLOAT disk_root_total_gb "nullable"
|
|
FLOAT disk_root_used_gb "nullable"
|
|
FLOAT disk_root_usage_percent "nullable"
|
|
JSON lvm_info "nullable"
|
|
JSON zfs_info "nullable"
|
|
JSON storage_details "nullable"
|
|
VARCHAR os_name "nullable"
|
|
VARCHAR os_version "nullable"
|
|
VARCHAR kernel_version "nullable"
|
|
VARCHAR hostname "nullable"
|
|
INTEGER uptime_seconds "nullable"
|
|
VARCHAR uptime_human "nullable"
|
|
JSON network_info "nullable"
|
|
JSON raw_data "nullable"
|
|
VARCHAR collection_source "nullable"
|
|
INTEGER collection_duration_ms "nullable"
|
|
TEXT error_message "nullable"
|
|
DATETIME collected_at
|
|
DATETIME created_at
|
|
}
|
|
hosts {
|
|
VARCHAR id PK
|
|
VARCHAR name
|
|
VARCHAR ip_address
|
|
VARCHAR status
|
|
VARCHAR ansible_group "nullable"
|
|
DATETIME last_seen "nullable"
|
|
BOOLEAN reachable
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
DATETIME deleted_at "nullable"
|
|
BOOLEAN docker_enabled
|
|
VARCHAR docker_version "nullable"
|
|
VARCHAR docker_status "nullable"
|
|
DATETIME docker_last_collect_at "nullable"
|
|
}
|
|
logs {
|
|
INTEGER id PK
|
|
VARCHAR level
|
|
VARCHAR source "nullable"
|
|
TEXT message
|
|
JSON details "nullable"
|
|
VARCHAR host_id "nullable"
|
|
VARCHAR task_id "nullable"
|
|
VARCHAR schedule_id "nullable"
|
|
DATETIME created_at
|
|
}
|
|
playbook_lint_results {
|
|
INTEGER id PK
|
|
VARCHAR filename
|
|
INTEGER quality_score
|
|
INTEGER total_issues
|
|
INTEGER errors_count
|
|
INTEGER warnings_count
|
|
INTEGER execution_time_ms
|
|
TEXT issues_json "nullable"
|
|
TEXT raw_output "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
}
|
|
schedule_runs {
|
|
INTEGER id PK
|
|
VARCHAR schedule_id FK
|
|
VARCHAR task_id FK "nullable"
|
|
VARCHAR status
|
|
DATETIME started_at
|
|
DATETIME completed_at "nullable"
|
|
FLOAT duration "nullable"
|
|
INTEGER hosts_impacted "nullable"
|
|
TEXT error_message "nullable"
|
|
TEXT output "nullable"
|
|
DATETIME created_at
|
|
}
|
|
schedules {
|
|
VARCHAR id PK
|
|
VARCHAR name
|
|
TEXT description "nullable"
|
|
VARCHAR playbook
|
|
VARCHAR target_type "nullable"
|
|
VARCHAR target
|
|
JSON extra_vars "nullable"
|
|
VARCHAR schedule_type
|
|
DATETIME schedule_time "nullable"
|
|
VARCHAR recurrence_type "nullable"
|
|
VARCHAR recurrence_time "nullable"
|
|
TEXT recurrence_days "nullable"
|
|
VARCHAR cron_expression "nullable"
|
|
VARCHAR timezone "nullable"
|
|
DATETIME start_at "nullable"
|
|
DATETIME end_at "nullable"
|
|
BOOLEAN enabled
|
|
TEXT tags "nullable"
|
|
DATETIME next_run "nullable"
|
|
DATETIME last_run "nullable"
|
|
VARCHAR last_status "nullable"
|
|
INTEGER retry_on_failure "nullable"
|
|
INTEGER timeout "nullable"
|
|
VARCHAR notification_type "nullable"
|
|
INTEGER run_count "nullable"
|
|
INTEGER success_count "nullable"
|
|
INTEGER failure_count "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
DATETIME deleted_at "nullable"
|
|
}
|
|
tasks {
|
|
VARCHAR id PK
|
|
VARCHAR action
|
|
VARCHAR target
|
|
VARCHAR status
|
|
VARCHAR playbook "nullable"
|
|
DATETIME started_at "nullable"
|
|
DATETIME completed_at "nullable"
|
|
TEXT error_message "nullable"
|
|
JSON result_data "nullable"
|
|
DATETIME created_at
|
|
}
|
|
terminal_command_logs {
|
|
INTEGER id PK
|
|
DATETIME created_at
|
|
VARCHAR host_id FK
|
|
INTEGER user_id FK "nullable"
|
|
VARCHAR terminal_session_id "nullable"
|
|
TEXT command
|
|
VARCHAR command_hash
|
|
VARCHAR source
|
|
BOOLEAN is_pinned
|
|
BOOLEAN is_blocked
|
|
VARCHAR blocked_reason "nullable"
|
|
VARCHAR username "nullable"
|
|
VARCHAR host_name "nullable"
|
|
}
|
|
terminal_sessions {
|
|
VARCHAR id PK
|
|
VARCHAR host_id
|
|
VARCHAR host_name
|
|
VARCHAR host_ip
|
|
INTEGER user_id "nullable"
|
|
VARCHAR username "nullable"
|
|
VARCHAR token_hash
|
|
INTEGER ttyd_port
|
|
INTEGER ttyd_pid "nullable"
|
|
VARCHAR mode
|
|
VARCHAR status
|
|
VARCHAR reason_closed "nullable"
|
|
DATETIME created_at
|
|
DATETIME last_seen_at
|
|
DATETIME expires_at
|
|
DATETIME closed_at "nullable"
|
|
}
|
|
users {
|
|
INTEGER id PK
|
|
VARCHAR username
|
|
VARCHAR email "nullable"
|
|
VARCHAR hashed_password
|
|
VARCHAR role
|
|
BOOLEAN is_active
|
|
BOOLEAN is_superuser
|
|
VARCHAR display_name "nullable"
|
|
DATETIME created_at
|
|
DATETIME updated_at
|
|
DATETIME last_login "nullable"
|
|
DATETIME password_changed_at "nullable"
|
|
DATETIME deleted_at "nullable"
|
|
}
|
|
users ||--o{ alerts : "user_id"
|
|
hosts ||--o{ bootstrap_status : "host_id"
|
|
users ||--o{ container_customizations : "user_id"
|
|
hosts ||--o{ container_customizations : "host_id"
|
|
hosts ||--o{ docker_alerts : "host_id"
|
|
hosts ||--o{ docker_containers : "host_id"
|
|
hosts ||--o{ docker_images : "host_id"
|
|
hosts ||--o{ docker_volumes : "host_id"
|
|
users ||--o{ favorite_containers : "user_id"
|
|
docker_containers ||--o{ favorite_containers : "docker_container_id"
|
|
favorite_groups ||--o{ favorite_containers : "group_id"
|
|
users ||--o{ favorite_groups : "user_id"
|
|
hosts ||--o{ host_metrics : "host_id"
|
|
schedules ||--o{ schedule_runs : "schedule_id"
|
|
tasks ||--o{ schedule_runs : "task_id"
|
|
hosts ||--o{ terminal_command_logs : "host_id"
|
|
users ||--o{ terminal_command_logs : "user_id"
|
|
```
|
|
|
|
## 2. Dictionnaire de Données (Tables)
|
|
|
|
### Table : `alerts`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | 🔗 `users.id` | Oui | - |
|
|
| `category` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `level` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `title` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `message` | `TEXT` | - | - | **Non** | - |
|
|
| `source` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `details` | `JSON` | - | - | Oui | - |
|
|
| `read_at` | `DATETIME` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `app_settings`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `key` | `VARCHAR(100)` | ✅ Oui | - | **Non** | - |
|
|
| `value` | `TEXT` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `bootstrap_status`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `status` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `automation_user` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `last_attempt` | `DATETIME` | - | - | Oui | - |
|
|
| `error_message` | `TEXT` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `container_customizations`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | 🔗 `users.id` | Oui | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `container_id` | `VARCHAR(64)` | - | - | **Non** | - |
|
|
| `icon_key` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `icon_color` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `bg_color` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `docker_alerts`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `container_name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `severity` | `VARCHAR(20)` | - | - | **Non** | `warning` |
|
|
| `state` | `VARCHAR(20)` | - | - | **Non** | `open` |
|
|
| `message` | `TEXT` | - | - | Oui | - |
|
|
| `opened_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `closed_at` | `DATETIME` | - | - | Oui | - |
|
|
| `acknowledged_at` | `DATETIME` | - | - | Oui | - |
|
|
| `acknowledged_by` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `last_notified_at` | `DATETIME` | - | - | Oui | - |
|
|
|
|
|
|
### Table : `docker_containers`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `container_id` | `VARCHAR(64)` | - | - | **Non** | - |
|
|
| `name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `image` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `state` | `VARCHAR(20)` | - | - | **Non** | `unknown` |
|
|
| `status` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `health` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | Oui | - |
|
|
| `ports` | `JSON` | - | - | Oui | - |
|
|
| `labels` | `JSON` | - | - | Oui | - |
|
|
| `compose_project` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `last_update_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `docker_images`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `image_id` | `VARCHAR(64)` | - | - | **Non** | - |
|
|
| `repo_tags` | `JSON` | - | - | Oui | - |
|
|
| `size` | `BIGINT` | - | - | Oui | - |
|
|
| `created` | `DATETIME` | - | - | Oui | - |
|
|
| `last_update_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `docker_volumes`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `driver` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `mountpoint` | `TEXT` | - | - | Oui | - |
|
|
| `scope` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `last_update_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `favorite_containers`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | 🔗 `users.id` | Oui | - |
|
|
| `docker_container_id` | `INTEGER` | - | 🔗 `docker_containers.id` | **Non** | - |
|
|
| `group_id` | `INTEGER` | - | 🔗 `favorite_groups.id` | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `favorite_groups`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | 🔗 `users.id` | Oui | - |
|
|
| `name` | `VARCHAR(100)` | - | - | **Non** | - |
|
|
| `sort_order` | `INTEGER` | - | - | **Non** | `0` |
|
|
| `color` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `icon_key` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `host_metrics`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `metric_type` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `cpu_count` | `INTEGER` | - | - | Oui | - |
|
|
| `cpu_model` | `VARCHAR(200)` | - | - | Oui | - |
|
|
| `cpu_cores` | `INTEGER` | - | - | Oui | - |
|
|
| `cpu_threads` | `INTEGER` | - | - | Oui | - |
|
|
| `cpu_threads_per_core` | `INTEGER` | - | - | Oui | - |
|
|
| `cpu_sockets` | `INTEGER` | - | - | Oui | - |
|
|
| `cpu_mhz` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_max_mhz` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_min_mhz` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_load_1m` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_load_5m` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_load_15m` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_usage_percent` | `FLOAT` | - | - | Oui | - |
|
|
| `cpu_temperature` | `FLOAT` | - | - | Oui | - |
|
|
| `memory_total_mb` | `INTEGER` | - | - | Oui | - |
|
|
| `memory_used_mb` | `INTEGER` | - | - | Oui | - |
|
|
| `memory_free_mb` | `INTEGER` | - | - | Oui | - |
|
|
| `memory_usage_percent` | `FLOAT` | - | - | Oui | - |
|
|
| `swap_total_mb` | `INTEGER` | - | - | Oui | - |
|
|
| `swap_used_mb` | `INTEGER` | - | - | Oui | - |
|
|
| `swap_usage_percent` | `FLOAT` | - | - | Oui | - |
|
|
| `disk_info` | `JSON` | - | - | Oui | - |
|
|
| `disk_devices` | `JSON` | - | - | **Non** | - |
|
|
| `disk_root_total_gb` | `FLOAT` | - | - | Oui | - |
|
|
| `disk_root_used_gb` | `FLOAT` | - | - | Oui | - |
|
|
| `disk_root_usage_percent` | `FLOAT` | - | - | Oui | - |
|
|
| `lvm_info` | `JSON` | - | - | Oui | - |
|
|
| `zfs_info` | `JSON` | - | - | Oui | - |
|
|
| `storage_details` | `JSON` | - | - | Oui | - |
|
|
| `os_name` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `os_version` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `kernel_version` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `hostname` | `VARCHAR(200)` | - | - | Oui | - |
|
|
| `uptime_seconds` | `INTEGER` | - | - | Oui | - |
|
|
| `uptime_human` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `network_info` | `JSON` | - | - | Oui | - |
|
|
| `raw_data` | `JSON` | - | - | Oui | - |
|
|
| `collection_source` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `collection_duration_ms` | `INTEGER` | - | - | Oui | - |
|
|
| `error_message` | `TEXT` | - | - | Oui | - |
|
|
| `collected_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `hosts`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `VARCHAR(50)` | ✅ Oui | - | **Non** | - |
|
|
| `name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `ip_address` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `status` | `VARCHAR(50)` | - | - | **Non** | `'unknown'` |
|
|
| `ansible_group` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `last_seen` | `DATETIME` | - | - | Oui | - |
|
|
| `reachable` | `BOOLEAN` | - | - | **Non** | `0` |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `deleted_at` | `DATETIME` | - | - | Oui | - |
|
|
| `docker_enabled` | `BOOLEAN` | - | - | **Non** | `0` |
|
|
| `docker_version` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `docker_status` | `VARCHAR(20)` | - | - | Oui | - |
|
|
| `docker_last_collect_at` | `DATETIME` | - | - | Oui | - |
|
|
|
|
|
|
### Table : `logs`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `level` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `source` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `message` | `TEXT` | - | - | **Non** | - |
|
|
| `details` | `JSON` | - | - | Oui | - |
|
|
| `host_id` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `task_id` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `schedule_id` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `playbook_lint_results`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `filename` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `quality_score` | `INTEGER` | - | - | **Non** | `100` |
|
|
| `total_issues` | `INTEGER` | - | - | **Non** | `0` |
|
|
| `errors_count` | `INTEGER` | - | - | **Non** | `0` |
|
|
| `warnings_count` | `INTEGER` | - | - | **Non** | `0` |
|
|
| `execution_time_ms` | `INTEGER` | - | - | **Non** | `0` |
|
|
| `issues_json` | `TEXT` | - | - | Oui | - |
|
|
| `raw_output` | `TEXT` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | *(auto generate)* |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | *(auto generate)* |
|
|
|
|
|
|
### Table : `schedule_runs`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `schedule_id` | `VARCHAR(50)` | - | 🔗 `schedules.id` | **Non** | - |
|
|
| `task_id` | `VARCHAR(50)` | - | 🔗 `tasks.id` | Oui | - |
|
|
| `status` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `started_at` | `DATETIME` | - | - | **Non** | - |
|
|
| `completed_at` | `DATETIME` | - | - | Oui | - |
|
|
| `duration` | `FLOAT` | - | - | Oui | - |
|
|
| `hosts_impacted` | `INTEGER` | - | - | Oui | `0` |
|
|
| `error_message` | `TEXT` | - | - | Oui | - |
|
|
| `output` | `TEXT` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `schedules`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `VARCHAR(50)` | ✅ Oui | - | **Non** | - |
|
|
| `name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `description` | `TEXT` | - | - | Oui | - |
|
|
| `playbook` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `target_type` | `VARCHAR(50)` | - | - | Oui | `group` |
|
|
| `target` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `extra_vars` | `JSON` | - | - | Oui | - |
|
|
| `schedule_type` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `schedule_time` | `DATETIME` | - | - | Oui | - |
|
|
| `recurrence_type` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `recurrence_time` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `recurrence_days` | `TEXT` | - | - | Oui | - |
|
|
| `cron_expression` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `timezone` | `VARCHAR(100)` | - | - | Oui | `America/Montreal` |
|
|
| `start_at` | `DATETIME` | - | - | Oui | - |
|
|
| `end_at` | `DATETIME` | - | - | Oui | - |
|
|
| `enabled` | `BOOLEAN` | - | - | **Non** | `True` |
|
|
| `tags` | `TEXT` | - | - | Oui | - |
|
|
| `next_run` | `DATETIME` | - | - | Oui | - |
|
|
| `last_run` | `DATETIME` | - | - | Oui | - |
|
|
| `last_status` | `VARCHAR(50)` | - | - | Oui | `never` |
|
|
| `retry_on_failure` | `INTEGER` | - | - | Oui | `0` |
|
|
| `timeout` | `INTEGER` | - | - | Oui | `3600` |
|
|
| `notification_type` | `VARCHAR(50)` | - | - | Oui | `all` |
|
|
| `run_count` | `INTEGER` | - | - | Oui | `0` |
|
|
| `success_count` | `INTEGER` | - | - | Oui | `0` |
|
|
| `failure_count` | `INTEGER` | - | - | Oui | `0` |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `deleted_at` | `DATETIME` | - | - | Oui | - |
|
|
|
|
|
|
### Table : `tasks`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `VARCHAR(50)` | ✅ Oui | - | **Non** | - |
|
|
| `action` | `VARCHAR(100)` | - | - | **Non** | - |
|
|
| `target` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `status` | `VARCHAR(50)` | - | - | **Non** | `'pending'` |
|
|
| `playbook` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `started_at` | `DATETIME` | - | - | Oui | - |
|
|
| `completed_at` | `DATETIME` | - | - | Oui | - |
|
|
| `error_message` | `TEXT` | - | - | Oui | - |
|
|
| `result_data` | `JSON` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
|
|
|
|
### Table : `terminal_command_logs`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `host_id` | `VARCHAR(50)` | - | 🔗 `hosts.id` | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | 🔗 `users.id` | Oui | - |
|
|
| `terminal_session_id` | `VARCHAR(64)` | - | - | Oui | - |
|
|
| `command` | `TEXT` | - | - | **Non** | - |
|
|
| `command_hash` | `VARCHAR(64)` | - | - | **Non** | - |
|
|
| `source` | `VARCHAR(20)` | - | - | **Non** | `'terminal'` |
|
|
| `is_pinned` | `BOOLEAN` | - | - | **Non** | `0` |
|
|
| `is_blocked` | `BOOLEAN` | - | - | **Non** | `0` |
|
|
| `blocked_reason` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `username` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `host_name` | `VARCHAR(100)` | - | - | Oui | - |
|
|
|
|
|
|
### Table : `terminal_sessions`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `VARCHAR(50)` | ✅ Oui | - | **Non** | - |
|
|
| `host_id` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `host_name` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `host_ip` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `user_id` | `INTEGER` | - | - | Oui | - |
|
|
| `username` | `VARCHAR(50)` | - | - | Oui | - |
|
|
| `token_hash` | `VARCHAR(128)` | - | - | **Non** | - |
|
|
| `ttyd_port` | `INTEGER` | - | - | **Non** | - |
|
|
| `ttyd_pid` | `INTEGER` | - | - | Oui | - |
|
|
| `mode` | `VARCHAR(20)` | - | - | **Non** | `'embedded'` |
|
|
| `status` | `VARCHAR(20)` | - | - | **Non** | `'active'` |
|
|
| `reason_closed` | `VARCHAR(30)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `last_seen_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `expires_at` | `DATETIME` | - | - | **Non** | - |
|
|
| `closed_at` | `DATETIME` | - | - | Oui | - |
|
|
|
|
|
|
### Table : `users`
|
|
|
|
|
|
| Colonne | Type | Clé Primaire | Clé Étrangère | Nullable | Défaut |
|
|
|---------|------|--------------|---------------|----------|--------|
|
|
| `id` | `INTEGER` | ✅ Oui | - | **Non** | - |
|
|
| `username` | `VARCHAR(50)` | - | - | **Non** | - |
|
|
| `email` | `VARCHAR(255)` | - | - | Oui | - |
|
|
| `hashed_password` | `VARCHAR(255)` | - | - | **Non** | - |
|
|
| `role` | `VARCHAR(20)` | - | - | **Non** | `'admin'` |
|
|
| `is_active` | `BOOLEAN` | - | - | **Non** | `1` |
|
|
| `is_superuser` | `BOOLEAN` | - | - | **Non** | `0` |
|
|
| `display_name` | `VARCHAR(100)` | - | - | Oui | - |
|
|
| `created_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `updated_at` | `DATETIME` | - | - | **Non** | `now()` |
|
|
| `last_login` | `DATETIME` | - | - | Oui | - |
|
|
| `password_changed_at` | `DATETIME` | - | - | Oui | - |
|
|
| `deleted_at` | `DATETIME` | - | - | Oui | - |
|
|
|