Requêtes¶
Les requêtes Mercator permettent d'explorer et de visualiser les données de votre cartographie de manière flexible, sans passer par l'interface standard. Elles s'écrivent dans un langage déclaratif inspiré du SQL et peuvent produire une liste ou un graphe.
Format d'une requête¶
Une requête Mercator suit la syntaxe suivante :
FROM <Modèle>
FIELDS <champ1>, <champ2>, <relation.champ>, ...
WHERE (<condition1>) AND|OR (<condition2>)
WITH <relation1>, <relation2>, ...
OUTPUT list | graph
LIMIT <n>
| Clause | Obligatoire | Description |
|---|---|---|
FROM |
✅ | Modèle de données cible (voir Modèles disponibles) |
FIELDS |
➖ | Liste des champs à afficher, y compris les champs de relations (relation.champ) |
WHERE |
➖ | Filtre sur les données (voir Conditions) |
WITH |
➖ | Relations à charger en eager loading |
OUTPUT |
➖ | Format de sortie : list ou graph (list par défaut) |
LIMIT |
➖ | Nombre maximum d'enregistrements retournés (défaut : 100) |
Modèles disponibles¶
Les modèles correspondent aux entités de l'API Mercator et sont en kebab-case.
| Modèle | Description |
|---|---|
logical-servers |
Serveurs logiques |
physical-servers |
Serveurs physiques |
applications |
Applications |
databases |
Bases de données |
certificates |
Certificats SSL/TLS |
networks |
Réseaux / sous-réseaux |
storage-devices |
Dispositifs de stockage |
sites |
Sites physiques |
bays |
Baies d'hébergement |
| … | Tous les modèles de l'API |
Champs disponibles
Les champs utilisables dans FIELDS et WHERE sont ceux exposés par l'API Mercator.
Consultez le modèle de données pour connaître l'ensemble des attributs de chaque modèle.
Clause FIELDS¶
La clause FIELDS liste les attributs à afficher dans le résultat. Elle accepte :
- Les champs directs du modèle :
name,cpu,environment,end_validity, … - Les champs de relations au format
relation.champ:applications.name,site.name,databases.name, …
FIELDS name, operating_system, cpu, memory, applications.name
Champs protégés
Les champs marqués comme cachés dans les modèles ($hidden Eloquent), tels que password ou remember_token, ne sont jamais retournés par le moteur de requêtes, même s'ils sont explicitement listés dans FIELDS.
Cohérence avec WITH
Si vous référencez un champ de relation dans FIELDS (ex. applications.name), la relation correspondante doit être déclarée dans WITH (ex. WITH applications), sans quoi les données ne seront pas chargées.
Clause WHERE¶
La clause WHERE filtre les enregistrements selon des conditions sur les champs du modèle principal.
Opérateurs supportés¶
| Opérateur | Syntaxe | Exemple |
|---|---|---|
| Égalité | = |
environment = "production" |
| Inégalité | != |
type != "virtual" |
| Comparaison | <, >, <=, >= |
memory >= 16 |
| Recherche | LIKE |
operating_system LIKE "%Linux%" |
| Liste de valeurs | IN |
environment IN ("production", "staging") |
| Existence de relation | EXISTS |
EXISTS applications |
| Absence de relation | NOT EXISTS |
NOT EXISTS certificates |
Combinaisons logiques¶
Les conditions peuvent être combinées avec AND et OR. Chaque condition doit être encadrée par des parenthèses :
WHERE (environment = "production") AND (operating_system LIKE "%Linux%")
WHERE (environment IN ("production", "staging")) AND (operating_system LIKE "%Windows%")
Opérateur EXISTS¶
L'opérateur EXISTS filtre les enregistrements selon qu'une relation est présente ou absente. Il s'applique au nom de la relation Eloquent (tel que déclaré dans WITH).
WHERE (EXISTS applications)
WHERE (NOT EXISTS certificates)
EXISTS peut être combiné avec d'autres conditions :
WHERE (environment = "production") AND (EXISTS certificates)
EXISTS et eager loading
L'opérateur EXISTS n'implique pas le chargement des données de la relation.
Si vous souhaitez également afficher les champs de cette relation dans FIELDS, déclarez-la explicitement dans WITH.
Clause WITH¶
La clause WITH déclare les relations à charger (eager loading). Elle est indispensable pour accéder aux champs d'objets liés dans FIELDS.
WITH applications, databases, certificates
Les noms de relations correspondent aux noms des méthodes de relation des modèles Eloquent, en snake_case :
WITH logical_servers, databases, sites, bays
Nœuds intermédiaires masqués¶
Par défaut, chaque segment d'un chemin WITH crée un nœud dans le graphe. Il est possible de masquer un niveau intermédiaire en l'entourant de parenthèses : le niveau est alors traversé pour accéder aux niveaux suivants, mais il n'apparaît ni comme nœud ni comme arête dans le graphe résultant.
WITH (subnetworks).vlan
Dans cet exemple, les sous-réseaux servent uniquement de pivot de traversée. Le graphe affiche directement des arêtes networks → vlan, sans représenter les subnetworks.
La syntaxe se généralise à plusieurs niveaux masqués :
-- Masquer un niveau sur deux
WITH (subnetworks).routers.(interfaces).vlan
-- Masquer plusieurs niveaux consécutifs
WITH (subnetworks).(routers).vlan
Les règles à respecter :
- Un chemin entièrement masqué (tous les segments entre parenthèses) est sans effet.
- Le dernier segment d'un chemin ne peut pas être masqué.
- Les parenthèses imbriquées
((rel))sont interdites.
Quand masquer un niveau ?
Masquez un intermédiaire lorsque la relation pivot n'a pas de valeur sémantique dans la visualisation — par exemple, les sous-réseaux entre un réseau et ses VLANs, ou les interfaces entre un serveur et ses VLANs.
Format de sortie (OUTPUT)¶
OUTPUT list¶
Génère un tableau avec une ligne par enregistrement. C'est le format adapté pour les inventaires, les exports, ou les vues tabulaires.
OUTPUT list
OUTPUT graph¶
Génère un graphe de relations entre les entités retournées. C'est le format adapté pour visualiser les dépendances, les cartographies applicatives ou les relations réseau.
OUTPUT graph
Quand utiliser graph ?
Préférez OUTPUT graph dès que votre requête charge des relations avec WITH et que vous souhaitez visualiser les liens entre entités (applications ↔ serveurs, réseaux ↔ serveurs, etc.).
Sauvegarde des requêtes¶
Il est possible de sauvegarder des requêtes dans l'interface pour les retrouver et les réexécuter sans les ressaisir. Les requêtes sauvegardées peuvent être rendues publiques (visibles par tous les utilisateurs) ou privées (visibles uniquement par leur auteur).
Exemples¶
Serveurs Linux en production avec leurs applications¶
FROM logical-servers
FIELDS name, operating_system, environment, cpu, memory, applications.name
WHERE (environment = "production") AND (operating_system LIKE "%Linux%")
WITH applications
Retourne la liste des serveurs logiques sous Linux en environnement de production, avec le nom des applications hébergées.
Toutes les applications et leurs bases de données¶
FROM applications
FIELDS name, description, databases.name, logical_servers.name
WITH databases, logical_servers
OUTPUT graph
Génère un graphe reliant les applications à leurs bases de données et serveurs logiques.
Inventaire des serveurs physiques¶
FROM physical-servers
FIELDS name, type, cpu, memory, site.name, bay.name
WITH site, bay
Liste complète des serveurs physiques avec leur localisation (site et baie).
Réseaux, sous-réseaux et VLANs¶
FROM networks
FIELDS name, subnetworks.name, subnetworks.vlan.id, subnetworks.vlan.name
WITH subnetworks, subnetworks.vlan
Visualise les réseaux, sous-réseaux et leurs VLANs.
Réseaux et VLANs sans les sous-réseaux intermédiaires¶
FROM networks
WITH (subnetworks).vlan
OUTPUT graph
Génère un graphe reliant directement chaque réseau à ses VLANs. Les sous-réseaux servent de pivot de traversée mais n'apparaissent pas dans le graphe — utile pour obtenir une vue synthétique lorsque les sous-réseaux n'apportent pas d'information supplémentaire dans la visualisation.
Filtres multiples avec IN¶
FROM logical-servers
FIELDS applications.name, certificates.name
WHERE (environment IN ("production", "staging")) AND (operating_system LIKE "%Windows%")
WITH applications, certificates
Liste les applications et certificats installés sur les serveurs Windows en production ou en staging.
Certificats SSL avec date d'expiration et périmètre d'installation¶
FROM certificates
FIELDS name, type, end_validity, domains, logical_servers.name, applications.name
WITH logical_servers, applications
Inventaire des certificats SSL/TLS avec leur date d'expiration et les serveurs/applications sur lesquels ils sont déployés. Utile pour anticiper les renouvellements.
Applications critiques avec leurs serveurs et bases de données¶
FROM applications
FIELDS name, security_need_c, description, responsible, logical_servers.name, databases.name
WHERE (security_need_c IN ("3", "4"))
WITH logical_servers, databases
OUTPUT graph
Cartographie des applications à fort besoin de confidentialité (niveaux 3 et 4), avec leurs dépendances d'infrastructure.
Serveurs sans certificat SSL¶
FROM logical-servers
FIELDS name, environment, operating_system
WHERE (environment = "production") AND (NOT EXISTS certificates)
WITH certificates
Identifie les serveurs de production sur lesquels aucun certificat SSL/TLS n'est enregistré. Utile pour détecter des angles morts dans la gestion des certificats.
Serveurs en production sans plans de backups avec une application¶
FROM logical-servers
FIELDS name, applications.name
WHERE environment = "production"
AND NOT EXISTS backups
AND EXISTS applications
OUTPUT list
Identifier les serveurs et le nom des applications en production qui n'ont pas de plans de backups et au moins une application.
Applications sans serveur logique associé¶
FROM applications
FIELDS name, responsible, security_need_c
WHERE (NOT EXISTS logical_servers)
WITH logical_servers
Liste les applications non rattachées à un serveur logique, symptôme possible d'une cartographie incomplète.
Bonnes pratiques¶
- Limitez le
LIMITà la valeur nécessaire : des requêtes trop larges peuvent être lentes sur de grands référentiels. - Utilisez
OUTPUT graphuniquement lorsque les relations sont déclarées dansWITH; un graphe sans relations ne sera composé que de nœuds isolés. - Vérifiez les noms de champs dans la référence API — une faute de frappe dans un champ n'affiche simplement rien, sans message d'erreur.
- Avec
EXISTS, déclarez la relation dansWITHuniquement si vous avez besoin d'afficher ses champs dansFIELDS; sinon,EXISTSseul suffit à filtrer sans surcharge. - Sauvegardez les requêtes récurrentes pour faciliter le travail en équipe et garantir la reproductibilité des cartographies.