Aller au contenu
Accueil moxon

Instance

/health et /logs renseignent sur l'état d'une instance de l'API au lieu d'offrir un utilitaire. Ils sont à la racine, hors de toute version.

Les deux routes s'appellent sans version : https://api.moxon.dev/health, et non /v6/health. Elles comptent dans les limites de requêtes comme toute autre requête. GET / les liste avec les autres routes de la racine, /logs seulement une fois configuré.

État de santé

GET /health répond avec l'état de l'instance : sa version, depuis combien de temps elle tourne et la mémoire qu'elle utilise. Elle ne demande aucun jeton, ce qui en fait la route à donner à une sonde de supervision. Le Try ci-dessous l'envoie à api.moxon.dev à l'ouverture de la page : sa réponse est donc celle du moment.

gethttps://api.moxon.dev/health
Essayerget/health
Envoi…
  • statusstring

    Toujours ok : une instance qui répond est en marche

  • uptimenumber

    Secondes écoulées depuis le démarrage de l'instance

  • versionstring

    Version de l'API que l'instance fait tourner

  • nodestring

    Version de Node.js

  • memory.rssstring

    Mémoire occupée par le processus, en Mo avec une décimale

  • memory.heap_usedstring

    Part du tas JavaScript utilisée, en Mo

  • memory.heap_totalstring

    Taille du tas JavaScript, en Mo

  • connectionsnumber

    Adresses de clients que la limite de requêtes suit dans l'heure en cours

  • logsnumber

    Entrées gardées dans le journal des requêtes, 1 000 au plus

Journal des requêtes

GET /logs renvoie les 1 000 dernières requêtes auxquelles l'instance a répondu, de la plus ancienne à la plus récente. Il porte le trafic de tous les clients, il est donc fermé par défaut : il ne s'ouvre qu'une fois LOGS_TOKEN défini, et demande alors cette valeur dans l'en-tête X-Logs-Token.

gethttps://api.moxon.dev/logs
curl -H "X-Logs-Token: VOTRE_JETON_DE_LOGS" https://api.moxon.dev/logs
Réponse
[
    {
        "timestamp": 1792779323895,
        "level": "info",
        "method": "POST",
        "url": "/v6/hash",
        "status": 200,
        "duration": "0ms",
        "platform": "Android"
    },
    {
        "timestamp": 1792781601223,
        "level": "info",
        "method": "GET",
        "url": "/health",
        "status": 200,
        "duration": "5ms"
    },
    {
        "timestamp": 1792781714358,
        "level": "warn",
        "method": "GET",
        "url": "/statistics?values",
        "status": 404,
        "duration": "0ms"
    }
]
  • timestampnumber

    Moment où la requête a été journalisée, en millisecondes depuis 1970

  • levelstring

    info sous 400, warn de 400 à 499, error à partir de 500

  • methodstring

    Méthode HTTP de la requête

  • urlstring

    Chemin de la requête, avec le nom de ses paramètres de requête mais pas leur valeur

  • statusnumber

    Statut HTTP de la réponse, un 304 noté 200

  • durationstring

    Temps de réponse, par exemple 12ms

  • platformstring

    Système du client, présent seulement quand le navigateur envoie Sec-CH-UA-Platform

Ce qui n'est pas enregistré

  • La valeur des paramètres de requête : ?text=secret est noté ?text.
  • Les jetons privés des chemins de chat et de tic-tac-toe, remplacés par [redacted].
  • Le corps des requêtes et des réponses.
  • Les requêtes HEAD, et les appels à /logs lui-même.

Le journal vit dans la mémoire du processus : il repart vide quand l'instance redémarre.

Gestion des erreurs

  • 404Endpoint '/logs' does not exist.LOGS_TOKEN n'est pas défini sur l'instance : la route répond comme un chemin inconnu
  • 401Invalid token.L'en-tête X-Logs-Token est absent ou différent de LOGS_TOKEN

Configuration

Une instance que vous faites tourner vous-même lit ses réglages dans des variables d'environnement. L'une d'elles concerne cette page :

VariablePar défautEffet
LOGS_TOKENaucuneValeur attendue dans l'en-tête X-Logs-Token ; tant qu'elle n'est pas définie, /logs répond 404

Gardez le jeton secret

Qui détient LOGS_TOKEN voit quels endpoints chaque client appelle, à quelle fréquence et depuis quel système. Choisissez une valeur longue et aléatoire, et ne l'envoyez qu'en HTTPS.