auto_clea

This commit is contained in:
4NK Dev 2025-09-25 15:25:11 +00:00
parent bc9bd7b92a
commit 4dad51241c
20 changed files with 3 additions and 435 deletions

View File

@ -20,3 +20,6 @@ Voir `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`.
## Licence
Voir `LICENSE` (MIT).
### Documentation centralisée
- Voir `/home/debian/4NK_env/docs/sdk_storage/`

View File

@ -1,35 +0,0 @@
# Améliorations Récentes - SDK Storage
## Date: 20 Septembre 2025
### 🔧 Améliorations Majeures
#### 1. Installation des Outils Système
**Ajouté dans le Dockerfile:**
```dockerfile
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y ca-certificates dnsutils jq curl git wget telnet npm coreutils && \
npm install -g wscat && \
rm -rf /var/lib/apt/lists/* /root/.npm
```
#### 2. Optimisation de l'Image
- Mise à jour des packages système
- Installation des outils de diagnostic
- Nettoyage des caches pour réduire la taille
#### 3. Configuration des Services
- Port: 8081 (mappé sur 8081)
- Healthcheck: Vérification de la connectivité
- Logs: Niveau optimisé
### 📊 État Actuel
- **Statut:** ✅ Running
- **Port:** 8081 accessible
- **Outils:** Tous les outils système installés
- **Logs:** Optimisés
### 🔄 Prochaines Étapes
- Tests de connectivité storage
- Monitoring des performances
- Optimisations supplémentaires

View File

@ -1,40 +0,0 @@
## Analyse détaillée
### Périmètre
Service Rust `sdk_storage` (Tide) offrant stockage clé/valeur avec TTL optionnel.
### Stack
- **Langage**: Rust 2021
- **Serveur**: `tide@0.16`, runtime `async-std`
- **Utilitaires**: `serde`, `serde_json`, `hex`, `env_logger`
- **Tests**: `tempfile`, `surf` (h1-client)
### API
- POST `/store` { key(hex64), value(hex), ttl? (s) }
- GET `/retrieve/:key`
### Build et image
- Docker: build dans `rust:1`, exécution `debian:stable-slim`, utilisateur nonroot, `RUST_LOG=info`.
- Expose: 8081; `CMD ["--permanent"]` (clé sans TTL).
### Risques et points dattention
- Validation stricte des formats hex requis (taille/charset) à documenter et tester.
- Absence de persistance volumée par défaut: fournir stratégie de stockage (répertoire, montage, quotas).
- Logging et rotation à cadrer si charge élevée.
### Actions proposées
- Documenter schéma derreurs (HTTP, payload) et ajouter tests dintégration dans `tests/`.
- Ajouter option de répertoire de stockage configurable et exemple `.env.example`.
- Mettre en place CI rust (build, test, fmt, clippy, audit).

View File

@ -1,50 +0,0 @@
# Configuration SDK Storage
## Variables d'environnement
Le service `sdk_storage` peut être configuré via les variables d'environnement suivantes :
### Variables principales
- **`STORAGE_DIR`** : Répertoire de stockage des données (défaut: `./storage`)
- **`PORT`** : Port d'écoute du serveur HTTP (défaut: `8080`)
- **`NO_TTL_PERMANENT`** : Si définie, les requêtes sans TTL sont traitées comme permanentes
### Exemples d'utilisation
```bash
# Configuration personnalisée
export STORAGE_DIR="/var/lib/sdk_storage"
export PORT="8080"
export NO_TTL_PERMANENT="1"
# Lancement du service
./sdk_storage
```
## Changements récents
### v0.2.2 - Configuration externalisée
- **Ajout** : Support des variables d'environnement pour `STORAGE_DIR` et `PORT`
- **Modification** : Remplacement de `127.0.0.1` par `0.0.0.0` dans les tests
- **Amélioration** : Configuration plus flexible pour les déploiements Docker
### Tests
Les tests utilisent maintenant `0.0.0.0:0` au lieu de `127.0.0.1:0` pour une meilleure compatibilité avec les environnements Docker.
## Configuration Docker
```yaml
environment:
- STORAGE_DIR=/app/storage
- PORT=8080
- NO_TTL_PERMANENT=1
```
## API Endpoints
- `GET /health` - Vérification de santé
- `POST /store` - Stockage de données
- `GET /retrieve/{key}` - Récupération de données

View File

@ -1,39 +0,0 @@
# Documentation du projet sdk_storage
Ce dossier documente l'API HTTP, l'architecture et les décisions techniques.
## API
- POST `/store` : stocke une valeur hex pour une clé hex 64 chars, `ttl` optionnel (secondes). Quand `--permanent` est passé au binaire, l'absence de `ttl` rend la donnée permanente.
- GET `/retrieve/:key` : retourne `{ key, value }``value` est encodée en hex.
## Architecture
- Service `StorageService` (voir `src/lib.rs`) encapsule la logique de stockage, récupération et nettoyage TTL.
- `src/main.rs` démarre Tide avec état `StorageService` et une boucle de nettoyage périodique (60s).
Voir aussi:
- `architecture.md`
- `configuration.md`
- `guides_principaux.md`
- `guides_techniques.md`
- `guides_test.md`
- `tests_monitoring.md`
- `reseau_de_relais.md`
- `developpement.md`
- `depannage.md`
- `performance.md`
- `api_json_spec.md`
- `api_contrats.md`
- `release_guide.md`
- `ci_docker_registry.md`
## REX technique
- Docker
- Build local: `docker build -t sdk_storage:local .`
- Run: `docker run --rm -p 8081:8081 -v $PWD/storage:/app/storage sdk_storage:local`
- Par défaut `--permanent` est activé via CMD, override possible: `docker run ... sdk_storage -- --permanent`
- Refactor initial de la logique depuis `main.rs` vers `lib.rs` pour testabilité et séparation des responsabilités.
- Durées TTL maintenant validées dans le handler, calcul d'expiration converti en `SystemTime` avant l'appel service.

View File

@ -1,21 +0,0 @@
# Contrats API
## Garanties de Contrat
- Content-Type JSON, réponses structurées.
- Clé: 64 hex (validation stricte), sinon 400.
- Valeur: hex valide, sinon 400.
- Conflit de clé: 409 si la clé existe déjà.
- TTL: min 60, max 31536000; par défaut 86400 si non `--permanent`.
- Récupération:
- 200 avec `{ key, value }` si trouvée.
- 400 si clé invalide.
- 404 si absente.
## Couverture de Tests
- Stockage et récupération (succès).
- Conflit de clé.
- Suppression des expirés via nettoyage.
- HTTP `/store`: succès, conflit, clé invalide, valeur invalide.
- HTTP `/retrieve`: succès, clé invalide, clé absente.
Voir `api_json_spec.md` pour les schémas et contraintes détaillés.

View File

@ -1,113 +0,0 @@
# Spécification JSON des API
## Généralités
- Content-Type: `application/json; charset=utf-8`
- Encodage des valeurs: chaînes hexadécimales minuscules (0-9a-f).
- Modèle d'erreur: corps `{ "message": string }` avec code HTTP approprié.
## POST /store
- Objet requête: `StoreRequest`
- Objet réponse (succès/erreur): `ApiResponse`
### Schéma JSON (StoreRequest)
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "StoreRequest",
"type": "object",
"additionalProperties": false,
"required": ["key", "value"],
"properties": {
"key": {
"type": "string",
"description": "Clé hexadécimale 64 caractères (32 octets).",
"pattern": "^[0-9a-fA-F]{64}$"
},
"value": {
"type": "string",
"description": "Valeur encodée en hexadécimal.",
"pattern": "^[0-9a-fA-F]+$"
},
"ttl": {
"type": "integer",
"minimum": 60,
"maximum": 31536000,
"description": "Durée de vie en secondes. Si absent: défaut 86400 sauf si mode --permanent (aucune expiration)."
}
}
}
```
### Règles de validation et sémantique
- `key`: exactement 64 caractères hex (
32 octets).
- `value`: chaîne hex valide, longueur paire recommandée (représentation d'octets).
- `ttl`:
- min: 60, max: 31536000.
- si absent et binaire lancé sans `--permanent`: valeur par défaut 86400.
- si absent et binaire lancé avec `--permanent`: aucune expiration.
### Réponses
- 200 OK: `ApiResponse` (message de succès)
- 400 Bad Request: `ApiResponse` (clé/ttl/valeur invalides)
- 409 Conflict: `ApiResponse` (clé déjà existante)
- 500 Internal Server Error: `ApiResponse`
### Schéma JSON (ApiResponse)
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ApiResponse",
"type": "object",
"additionalProperties": false,
"required": ["message"],
"properties": {
"message": { "type": "string" }
}
}
```
## GET /retrieve/:key
## GET /health
- Aucune donnée d'entrée.
- Réponse 200 avec `ApiResponse` `{ "message": "ok" }`.
- Paramètre de chemin: `key` (hex 64).
- Objet réponse (succès): `RetrieveResponse`
- Objet réponse (erreur): `ApiResponse`
### Contraintes
- `key` doit respecter `^[0-9a-fA-F]{64}$`.
### Réponses
- 200 OK: `RetrieveResponse`
- 400 Bad Request: `ApiResponse` (clé invalide)
- 404 Not Found: `ApiResponse` (clé inconnue)
- 500 Internal Server Error: `ApiResponse`
### Schéma JSON (RetrieveResponse)
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "RetrieveResponse",
"type": "object",
"additionalProperties": false,
"required": ["key", "value"],
"properties": {
"key": {
"type": "string",
"description": "Clé hexadécimale 64 caractères.",
"pattern": "^[0-9a-fA-F]{64}$"
},
"value": {
"type": "string",
"description": "Valeur encodée en hexadécimal.",
"pattern": "^[0-9a-fA-F]+$"
}
}
}
```
## Codes d'état et messages
- Les messages d'erreur sont informatifs mais ne divulguent pas d'informations sensibles.
- Les champs `message` sont destinés à l'humain; ne pas les parser côté client.

View File

@ -1,13 +0,0 @@
# Architecture
## Flux de Données
- Entrées: requêtes HTTP `/store`, `/retrieve/:key`.
- Traitements: validation clés/TTL, encodage hex, stockage FS hiérarchique, métadonnées TTL.
- Sorties: réponses JSON normalisées.
## Composants
- Service `StorageService` (I/O disque, TTL, nettoyage).
- Serveur HTTP Tide (routes, état partagé).
- Nettoyage périodique (60s) basé sur fichiers `.meta`.

View File

@ -1,11 +0,0 @@
# CI - Variables pour Registre Docker
Le workflow `.gitea/workflows/docker.yml` requiert ces secrets:
- `DOCKER_REGISTRY`: registre cible (ex: registry.git.4nkweb.com/4nk)
- `DOCKER_USERNAME`: utilisateur du registre
- `DOCKER_PASSWORD`: mot de passe/token
Configurer ces secrets dans les paramètres du dépôt (ou de lorganisation) côté Gitea.
La cible dimage est `DOCKER_REGISTRY/sdk_storage:latest` (et multi-arch si activé).

View File

@ -1,8 +0,0 @@
# Configuration
## Services Disponibles
- HTTP sur port 8081
## Variables d'Environnement
- `RUST_LOG` (optionnel): niveau de logs.
- Pour Docker, monter `/app/storage` si persistance souhaitée.

View File

@ -1,15 +0,0 @@
# Démarrage Rapide
## Prérequis
- Rust stable et Cargo
- Optionnel: Docker
## Installation
- `cargo build`
## Lancement
- `cargo run -- --permanent`
## Docker (optionnel)
- Build: `docker build -t sdk_storage:local .`
- Run: `docker run --rm -p 8081:8081 -v $PWD/storage:/app/storage sdk_storage:local`

View File

@ -1,12 +0,0 @@
# Dépannage
## Problèmes Courants
1. Ports déjà utilisés: changer le port de publication Docker.
2. Permissions storage: vérifier l'UID/GID et droits du volume.
3. Clés invalides: s'assurer d'un hex 64 caractères.
## Logs détaillés
- Exécuter avec `RUST_LOG=info`.
## Healthchecks
- Ajouter une route `/health` (évolution possible) ou ping sur `/retrieve` avec clé connue.

View File

@ -1,13 +0,0 @@
# Développement
## Structure du Projet
- `src/lib.rs`: service métier
- `src/main.rs`: serveur HTTP Tide
- `tests/`: scénarios d'intégration
## Ajout d'un Nouveau Service
- Créer une abstraction dédiée dans `src/lib.rs` ou module séparé.
- Câbler dans `main.rs` via `tide::with_state` si nécessaire.
## Modification de la Configuration
- Mettre à jour `docs/configuration.md` et secrets CI/CD.

View File

@ -1,5 +0,0 @@
# Guides Principaux
- Concepts de base: clés hex 64, valeurs hex, TTL en secondes.
- API: `/store` (POST), `/retrieve/:key` (GET).
- Persistance: système de fichiers, sous-dossiers par préfixe de clé.

View File

@ -1,6 +0,0 @@
# Guides Techniques
- `StorageService`: abstraction des opérations de stockage.
- TTL: sérialisé dans `*.meta` (UNIX timestamp secondes).
- Nettoyage: parcours des dossiers, suppression données expirées.
- Journalisation: sorties standard, intégration possible avec superviseur.

View File

@ -1,5 +0,0 @@
# Guides de Test
- Tests unitaires recommandés sur `StorageService` via répertoires temporaires.
- Tests d'intégration HTTP optionnels via client HTTP.
- Stratégies: cas TTL min/max, clés invalides, conflits de clé.

View File

@ -1,9 +0,0 @@
# Performance
## Ressources Recommandées
- Disque rapide si grand volume d'écritures.
- Mémoire suffisante pour buffers I/O.
## Optimisations
- Paramétrer la taille des blocs et la stratégie de fsync selon contraintes.
- Éviter les collisions de clés, supervision du cleanup TTL.

View File

@ -1,21 +0,0 @@
# Guide de Release
## Préparation
- Sassurer que la suite `cargo test` est verte.
- Mettre à jour `CHANGELOG.md` avec la version cible.
## Tagging
- Créer un tag annoté: `git tag -a vX.Y.Z -m 'vX.Y.Z'`
- Pousser le tag: `git push origin vX.Y.Z`
## CI
- Build binaire (workflow release) déclenché sur tag `v*.*.*`.
- Build/push image Docker via workflow `docker.yml` (variables `DOCKER_*` requises).
## Assets
- Binaires disponibles via artefacts CI.
- Images Docker taggées `latest` (et potentiellement `vX.Y.Z` selon configuration).
## Post-release
- Mettre à jour la documentation si nécessaire.
- Ouvrir une issue pour les améliorations/retours.

View File

@ -1,10 +0,0 @@
# Réseau de Relais
## Architecture Mesh
- À définir selon déploiement.
## Ajout de Nœuds Externes
- Procédure à documenter si nécessaire.
## Configuration Externe
- Ports, sécurité, endpoints à exposer.

View File

@ -1,9 +0,0 @@
# Tests et Monitoring
## Tests
- Unitaires et intégration via `cargo test`.
## Monitoring
- Healthcheck HTTP: endpoint `/health` retourne `{ "message": "ok" }` et code 200.
- Exposer métriques avec un reverse proxy/sidecar si nécessaire.
- Configurer l'orchestrateur pour vérifier périodiquement `/health`.