obmp-docker/postgres/scripts/008_obmp_policy_diff.sql

54 lines
2.5 KiB
MySQL
Raw Normal View History

-- 008_obmp_policy_diff.sql
-- Policy Diff feature -- per-router routing-policy retrieval plus per-neighbor
-- received / kept / advertised counts, populated by the obmp-rib-poller
-- service (obmp-rib-poller/poller.py).
--
-- Why a poller and not BMP: on the lab's XRv9000 24.3.1 routers BMP only
-- carries pre-policy Adj-RIB-In. `route-monitoring inbound post-policy`
-- replaces (does not supplement) the pre-policy export and is not flagged
-- distinctly, and adj-rib-out BMP (RFC 8671) is unsupported on that image.
-- So "kept after inbound policy" and "advertised" are pulled directly from
-- the routers over CLI + NETCONF.
--
-- The Policy Diff dashboard joins router_rib_stats against BMP ip_rib
-- (received, pre-policy) to show received vs kept vs discarded vs advertised.
-- Full route-policy (RPL) bodies, one row per policy per router.
CREATE TABLE IF NOT EXISTS route_policies (
router_hash_id uuid NOT NULL,
policy_name varchar(256) NOT NULL,
body text,
retrieved_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (router_hash_id, policy_name)
);
-- Which route-policy is bound inbound/outbound on each neighbor address-family.
CREATE TABLE IF NOT EXISTS neighbor_policy_bind (
router_hash_id uuid NOT NULL,
peer_addr inet NOT NULL,
afi varchar(8) NOT NULL, -- ipv4 / ipv6
direction varchar(4) NOT NULL, -- in / out
policy_name varchar(256),
retrieved_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (router_hash_id, peer_addr, afi, direction)
);
-- Per-neighbor RIB sizes pulled from the router: accepted_count is the
-- post-inbound-policy prefix count (BGP summary PfxRcd), advertised_count is
-- the adj-rib-out size toward that neighbor.
CREATE TABLE IF NOT EXISTS router_rib_stats (
router_hash_id uuid NOT NULL,
peer_addr inet NOT NULL,
afi varchar(8) NOT NULL,
peer_as bigint,
session_state varchar(32),
accepted_count integer,
advertised_count integer,
polled_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (router_hash_id, peer_addr, afi)
);
CREATE INDEX IF NOT EXISTS idx_route_policies_router ON route_policies (router_hash_id);
CREATE INDEX IF NOT EXISTS idx_neighbor_policy_bind_router ON neighbor_policy_bind (router_hash_id);
CREATE INDEX IF NOT EXISTS idx_router_rib_stats_router ON router_rib_stats (router_hash_id);