Smartscape: New Entity Model
Tutorial3 exercises
Classic Entities vs Smartscape
Gen2 used classic entities with IDs like HOST-ABC123, queried via entity selectors. Gen3 introduces Smartscape โ a new topology model where entities are nodes and relationships are edges.
GEN2 Entity Model GEN3 Smartscape Model
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Entity selectors: DQL smartscapeNodes:
type(HOST),tag(prod) smartscapeNodes "HOST"
| filter matchesValue(dt.tags, "prod")
Entity API v2: DQL queries:
GET /api/v2/entities?selector=... smartscapeNodes "SERVICE"
| fields name, id
Relationships via entity properties: Relationships via traverse:
entity.fromRelationships.isInstanceOf smartscapeNodes "HOST"
| traverse "runs_on", "SERVICE"
Entity Type Mapping
Every classic entity type has a Smartscape equivalent:
Classic (Gen2) Smartscape (Gen3)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
dt.entity.host dt.smartscape.host โ HOST
dt.entity.service dt.smartscape.service โ SERVICE
dt.entity.process_group_instance dt.smartscape.process โ PROCESS
dt.entity.application dt.smartscape.frontend โ FRONTEND
dt.entity.kubernetes_cluster dt.smartscape.k8s_cluster โ K8S_CLUSTER
dt.entity.cloud_application_instance dt.smartscape.k8s_pod โ K8S_POD
dt.entity.aws_lambda_function dt.smartscape.aws.lambda_function โ AWS_LAMBDA_FUNCTION
Function Migration
Classic Function Smartscape Replacement
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
entityName(entityId) name (on node) or getNodeName(id)
entityAttr(entityId, "attr") direct field or getNodeField(id, "attr")
classicEntitySelector("type(HOST)") smartscapeNodes "HOST" | filter ...
belongs_to[...], runs[...] traverse "edge_type", "TARGET_TYPE"
dt.entity.host (in DQL dimensions) dt.smartscape.host
affected_entity_ids smartscape.affected_entity.ids
Special Cases
Some classic entities don't have a direct 1:1 mapping:
- Host group โ no standalone Smartscape entity. Use fields on HOST nodes instead.
- Process group โ no standalone entity. Use fields on PROCESS nodes.
- Container group โ no standalone entity. Use CONTAINER nodes.
- Classic entity IDs โ don't assume they carry over. Use
toSmartscapeId()for conversion.
Relationship Traversal
In Gen2, you accessed relationships through entity properties. In Gen3, you use traverse:
// Find all services running on a specific host
smartscapeNodes "HOST"
| filter name == "my-host"
| traverse "runs_on", "SERVICE", direction: backward
| fields name, id
Common traversal pairs:
HOST โ SERVICE: traverse "runs_on", "SERVICE", direction: backward
SERVICE โ PROCESS: traverse "runs_on", "PROCESS"
HOST โ CONTAINER: traverse "runs_on", "CONTAINER", direction: backward
K8S_POD โ CONTAINER: traverse "is_part_of", "CONTAINER", direction: backward
LB โ TARGET_GROUP: traverse "balanced_by", direction: backward
TARGET_GROUP โ INSTANCE: traverse "balances"