FabrikFabrik
FabrikClass Browser

Class detail panel

The right-hand pane of the Class Browser — five tabs covering identity with meta badges, properties bucketed by role, the full Rs* relationship graph, DN/REST shortcuts with live examples, and operational fault and event codes.

When you click a class in the Class Browser's left list, the right-hand pane fills with everything Fabrik knows about it — pulled from Neo4j as a single round-trip and laid out across five tabs. The tabs are designed for an ACI engineer's actual workflow:

  • Glance for the basics on a class you're considering.
  • Drill into properties when designing a query filter.
  • Follow relationships when troubleshooting how objects wire up.
  • Copy DN templates when reaching for the REST API directly.
  • Cross-reference fault and event codes when correlating Time Machine snapshots with live APIC logs.

The pane remembers which tab you opened last (per browser, persisted to localStorage), so the next time you open the Browser it takes you back to the same view.

At-a-glance header

Every tab shares the same header at the top:

  • Class name in a large monospace font (fvAEPg).
  • Cisco label below it when one exists ("Application Endpoint Group").
  • Package chip (fv).
  • Meta badges — colour-coded chips reflecting MIM flags. Multiple can stack:
BadgeToneMeaning
deprecatedRedCisco has marked this class for removal. Avoid in new queries; OK to read in legacy ones.
abstractAmberNo direct instances exist — only concrete subclasses. Querying it usually returns 0 rows.
rootBlueContext root. Can be queried without a parent DN — fvTenant, polUni, fabricInst.
hiddenGreyMIM internal. Filter chip hides these by default; they only appear when hide hidden is off.

Both deprecated and abstract get a one-line banner below the header explaining what the flag means in practice — so a novice doesn't pick one without knowing.

Overview tab

The default view. Three blocks, in this order:

  • Description — Cisco's prose for the class. Long descriptions collapse to three lines with a Show more toggle.
  • Contained by — A breadcrumb of immediate parents. Each parent is a clickable chip; clicking drills into that class's detail without leaving the dialog.
  • Child classes — The classes this one contains, split into:
    • Structural children — the useful ones. EPGs under a tenant, subnets under a BD, interfaces under a node.
    • Monitoring & stats children — collapsed behind a Show monitoring classes toggle. Anything matching the unified pattern (stats, ag15min, ag1h, ag5min, fault, health, trend, threshold, event, record, mon, count). Popular classes like fvAEPg have hundreds of these — the toggle keeps the list scannable.

The monitoring regex lives in one place (frontend/src/lib/classFilters.ts) and is shared with the search filter chip — so when you toggle monitoring/stats off in search, the same set of classes is what gets revealed under Show monitoring classes here.

Properties tab

Every queryable property the class declares, bucketed by role so you can see at a glance which fields you'd actually set in a config:

BucketWhat it means
Naming (DN keys)Properties that form part of the DN — e.g. name on fvTenant. Required at create time, immutable thereafter.
Required on createmandatory + createOnly. You must supply these on POST; you can't change them later.
ConfigurableWritable any time. Most policy fields land here.
Operational (read-only)Runtime state. APIC sets these; you read them.
DeprecatedCisco has marked them for removal. Avoid in new queries.

A search box at the top of the tab filters across name, label, and baseType. Each property row shows:

  • Name in monospace.
  • Type (baseType like string:Basic, int, enum).
  • Default value if Cisco published one.
  • Enum values as inline chips (first 8 shown; rest summarised as +N).
  • Validator summary when present — length range, regex pattern.
  • Copy button that puts propertyName= on the clipboard so you can paste it into a filter.

Properties marked secure get a small secure badge — these are credential-bearing fields APIC redacts on read.

The properties endpoint filters out CHILD_ACTION, RN, childAction, and monPolDn — they're internal, never useful as query filters.

Relationships tab

The graph view of who connects to whom. Three sub-blocks, plus the containment summary repeated from Overview so you have the full picture in one place.

  • Inherits from — Direct super-classes (one level). Click any chip to drill into the parent's detail.
  • Points to (Rs* outbound) — Classes this one references via Rs* helper objects. For fvAEPg this includes:
    • fvBD via fvRsBd — the bridge domain the EPG binds to
    • vzBrCP via fvRsCons / fvRsProv — contracts consumed and provided
    • vnsLDevCtx via fvRsProv — service graph references
    • … and several more Each row shows the destination class name, the Rs* class that wires it, the destination's package, and a clickable chip to drill into the destination.
  • Referenced by (Rs* inbound) — The reverse view: every class that points at this one. For fvBD you'll see fvRsBd (EPGs binding to this BD), l3extRsEctx (L3 outs binding their VRF), and dozens more — the most leverage-y view in the panel for "what wires up to my object?"

These are the same relationsTo and relationsFrom that the search bar's reference targets (read-only) toggle uses — the detail panel just shows them inline without needing a toggle, because here the user has already picked the class deliberately.

DN & REST tab

Everything you need to reach this object from the APIC REST API.

  • DN template — Either the canonical dnFormats[0] from Cisco or a synthesised parent-RN/this-RN chain. Copy button on the right. Example for fvBD: uni/tn-{tenant}/BD-{name}.
  • Live example — The same template with friendly placeholder values substituted ({tnName}TenantName, {epgName}EPGName, etc.). Shown when it differs from the raw template. Example: uni/tn-prod/BD-web-bd.
  • REST · managed object/api/mo/<dn>.json, the URL you'd hit to read or write a specific instance.
  • REST · class query/api/class/<className>.json, fabric-wide list of every instance.
  • RN format — When the local RN differs from the template, shown for completeness.
  • Identified by — Properties that act as the DN keys (often the same set as Naming on the Properties tab).
  • Open in Cisco DevNet docs — Direct link to the pubhub page for this class, useful when you want to read Cisco's official prose.

The DevNet link uses the version key of the MIM you've loaded. If you switch versions (Settings → MIM Management), the link updates to the new release's documentation.

DN search in the search bar (typing uni/tn- or /BD-) is powered by the same dnFormats arrays this tab displays. Senior experts who think in DN paths first and class names second can fluently jump back and forth between the two surfaces.

Faults tab

Operational metadata that helps you correlate Time Machine snapshots and live APIC events with the class:

  • Faults — every Fxxxx code Cisco can raise on this class, with its type and target. The IDs match what you see in faultInst records and in the APIC fault console.
  • EventsExxxx codes used in audit / event records.
  • Statistics — counter classes related via HAS_STAT. For eqptIngrTotalPkts and friends, these are the targets you'd join into for performance investigation. Long lists collapse with a Show all toggle.

Drilling between classes

Most chips in the panel are interactive. Clicking a parent, child, super-class, relation target, or stat target loads that class's detail without closing the Browser. A back button appears at the top to return to the previous class — useful when you've wandered into vzBrCP to check a contract and want to come back to fvAEPg.

The drilldown stack is unbounded — you can chase fvAEPg → fvRsBd → fvBD → fvSubnet → fvCtx and back-button five steps to land where you started.

Copy semantics

Every copy button shows a checkmark for two seconds after a successful copy. The hook (useCopyToClipboard) falls back to a hidden textarea + execCommand('copy') on browsers where the modern clipboard API isn't available, so older Safari and non-secure contexts still work.

Performance

The detail endpoint runs seven Neo4j queries in parallel:

  • parents — direct CONTAINS-parents
  • children — direct CONTAINS-children (paginated; 50 by default, up to 1,000)
  • superClassesDetail — inheritance chain, one level
  • relationsTo / relationsFrom — Rs* outbound and inbound
  • statRelations — HAS_STAT targets
  • faults / events — operational codes (parsed off the Class node JSON)
  • properties — full property bundle with flags and enum values

The result is returned as a single JSON document. Every query is cached at the service layer for 30 minutes; the second time you open a class the response comes back in under 50 ms.

If you switch APIC versions (re-import the MIM), all caches invalidate automatically because the cache key includes the MIM version.

Troubleshooting

  • A tab is empty for a class that should have data — check the import history on Settings → MIM Management. If the class has sourceVersion set to a version different from the requested one, it came from the fallback chain and may have minor metadata differences from Cisco's authoritative copy for your release.
  • No DN template, just an RN — the class is abstract or a root object (top:Root, polUni). It doesn't have a meaningful DN on its own; it only appears as an ancestor segment in other DNs. The abstract or root badge in the header confirms this.
  • Properties tab shows fewer rows than Cisco's docs — Fabrik filters out CHILD_ACTION, RN, childAction, and monPolDn because they're internal. They're never useful as query filters; the docs page lists them for completeness.
  • Relationships tab shows "Points to" but my search-bar reference-targets toggle is empty — the toggle only fires when the dialog was opened in child mode. Open another Class Node, drop a Child Class, and the toggle becomes available.
  • Banner says deprecated but I need to use this class — go ahead. The warning is soft; Confirm still works. The banner is a nudge, not a block. Reference-only classes (different banner, amber, in child mode) are blocked because adding them would produce a wrong query.