Loadify Loadify / Documentation API

API REST de monitoring de charge serveur

← Retour au dashboard

Vue d'ensemble

Loadify expose une petite API REST pour consulter la charge des serveurs surveillés. Elle est consommée par le dashboard temps réel et peut être interrogée directement par des outils tiers (supervision, alerting, scripts).

URL de base : https://loadify.fr

Authentification

Aucune authentification n'est requise sur les endpoints actuels. Loadify est un dashboard public en lecture seule : les valeurs de charge ne sont pas considérées comme sensibles, et l'interface d'administration a été supprimée lors de l'audit sécurité du 2 avril 2026 (gestion des serveurs désormais via base de données uniquement).

Les variables API_KEY et ENCRYPTION_KEY du fichier .env ne servent pas pour l'API HTTP : elles sont utilisées en interne pour chiffrer les mots de passe SSH stockés en base (AES-256-CBC, clé dans .encryption_key).

Conventions

  • Format : toutes les réponses sont en application/json.
  • Encodage : UTF-8.
  • Méthodes : GET uniquement (lecture seule).
  • Horodatage : format YYYY-MM-DD HH:MM:SS. Les dates retournées par /api/status.json et /api/get-current.php sont en fuseau Europe/Paris ; les labels de /api/get-history.php sont décalés de +1 HOUR côté SQL pour s'aligner sur ce fuseau.
  • Précision des floats : /api/status.json arrondit à 2 décimales et émet des nombres natifs (pas de chaînes). Les endpoints /api/get-current.php et /api/get-history.php renvoient les valeurs brutes en float.
  • CORS : non activé. Les appels cross-origin depuis un navigateur ne fonctionneront pas tant qu'aucun header Access-Control-Allow-Origin n'est ajouté.
  • Rate limiting : pas de limite imposée. Usage raisonnable attendu (les mesures sont rafraîchies par cron une fois par minute, inutile d'interroger plus souvent).

Codes d'erreur standards

CodeStatutDescription
200OKRequête traitée avec succès.
400Bad RequestParamètre obligatoire manquant ou invalide.
404Not FoundRoute ou ressource inexistante.
500Internal Server ErrorErreur côté serveur (typiquement base de données). Détails dans les logs Apache/PHP.

Les erreurs /api/get-current.php et /api/get-history.php suivent la forme {"success": false, "error": "..."}. L'endpoint /api/status.json retourne {"error": "Service unavailable"} en cas d'erreur.

Public

GET /api/status.json Public

Charge actuelle de tous les serveurs (endpoint public stable).

Retourne la dernière mesure de charge (load_1min, load_5min, load_15min) pour chaque serveur actif, indexée par nom de serveur. Les valeurs sont arrondies à 2 décimales (numériques, pas chaînes). Réécrit en interne vers /api/status.json.php via .htaccess. Pas de cache HTTP (Cache-Control: no-cache, must-revalidate).

Exemple de réponse (application/json)

{
    "servers": {
        "SRV4": {
            "load_1min": 1.24,
            "load_5min": 1.18,
            "load_15min": 1.05,
            "collected_at": "2026-05-13 09:42:01"
        },
        "SRV5": {
            "load_1min": 0.87,
            "load_5min": 0.91,
            "load_15min": 0.94,
            "collected_at": "2026-05-13 09:42:01"
        }
    },
    "generated_at": "2026-05-13 09:42:14"
}

Réponses d'erreur

  • 500 Erreur base de données. La réponse vaut {"error":"Service unavailable"}.

Exemple cURL

curl "https://loadify.fr/api/status.json"

Dashboard

GET /api/get-current.php Public

Dernière mesure de charge par serveur, format dashboard interne.

Endpoint consommé par le dashboard HTML (assets/js/dashboard.js). Retourne un tableau ordonné (par display_order puis name) avec id numérique, name, les 3 valeurs de charge (float natif, non arrondies), collected_at et un status (online ou no_data si aucune mesure récente). Timezone Europe/Paris pour le champ timestamp.

Exemple de réponse (application/json)

{
    "success": true,
    "data": [
        {
            "id": 1,
            "name": "SRV4",
            "load_1min": 1.24,
            "load_5min": 1.18,
            "load_15min": 1.05,
            "collected_at": "2026-05-13 09:42:01",
            "status": "online"
        },
        {
            "id": 2,
            "name": "SRV5",
            "load_1min": null,
            "load_5min": null,
            "load_15min": null,
            "collected_at": null,
            "status": "no_data"
        }
    ],
    "timestamp": "2026-05-13 09:42:14"
}

Réponses d'erreur

  • 500 Erreur interne. La réponse vaut {"success":false,"error":"Internal server error"} (les détails sont loggés via error_log).

Exemple cURL

curl "https://loadify.fr/api/get-current.php"
GET /api/get-history.php Public

Historique de charge pour un serveur, prêt pour Chart.js.

Retourne la série temporelle de charge d'un serveur sur les 2 dernières heures ou les 24 dernières heures. La structure de la réponse correspond directement au format attendu par Chart.js (labels, datasets). Les labels sont au format HH:MM (Europe/Paris : la requête SQL ajoute +1 HOUR au timestamp UTC).

Paramètres de requête

NomTypeRequisDescription
server_id integer requis Identifiant numérique du serveur (table servers). Renvoyé par /api/get-current.php dans le champ id.
period string optionnel Plage temporelle : 2h (défaut) ou 24h. Toute autre valeur retombe sur 2h (whitelist anti-injection SQL).

Exemple de réponse (application/json)

{
    "success": true,
    "data": {
        "labels": ["08:42", "08:43", "08:44", "08:45"],
        "datasets": [
            {
                "label": "Load 1min",
                "data": [1.24, 1.31, 1.18, 1.22],
                "borderColor": "#3498db",
                "fill": true
            },
            {
                "label": "Load 5min",
                "data": [1.18, 1.20, 1.15, 1.17],
                "borderColor": "#2ecc71",
                "fill": true
            },
            {
                "label": "Load 15min",
                "data": [1.05, 1.06, 1.05, 1.06],
                "borderColor": "#e74c3c",
                "fill": true
            }
        ]
    },
    "period": "2h",
    "count": 4
}

Réponses d'erreur

  • 400 Paramètre server_id manquant. La réponse vaut {"success":false,"error":"server_id is required"}.

Exemple cURL

curl "https://loadify.fr/api/get-history.php?server_id=1&period=24h"