Skip to main content

AI-powered network syslog analyzer with pluggable LLM providers (local Docker Model Runner / Anthropic Claude) and lab adapters.

Project description

netlog-ai โ€” architecture

netlog-ai

๐Ÿ“– Live documentation

netlog-ai โ€” live documentation

๐ŸŒ Live: https://gesh75.github.io/netlog-ai/ โ€” an animated single-page guide: architecture diagrams, data flow, tech stack, and quickstart.

๐Ÿ—‚๏ธ Part of the gesh75 documentation hub โ€” all my network & AI engineering project docs in one place.

Network logs in. Ranked actions out. A local, dark-themed dashboard that classifies syslog events from any vendor (Junos, Arista EOS, FRR), builds a prioritized action list, and lets an LLM write the root-cause analysis with copy-pastable CLI fixes.

CI Tests License Python Stack

๐Ÿ““ Recent changes โ€” cross-source correlation + per-device triage (MCP tools and Device-tab UI) โ€” are in CHANGELOG.md.


Why this exists

Most "AI for ops" tools either ship your data to a SaaS or hide what the model actually saw. netlog-ai runs entirely on your laptop:

  • Configs and logs never leave the host โ€” the LLM only sees pre-sanitized text (passwords, public IPs, SSH keys redacted before any outbound call).
  • Pluggable LLM backend โ€” local Docker Model Runner (Qwen, Llama) or Anthropic Claude. No telemetry, no API keys required for the local path.
  • Every finding ships with executable CLI: Junos set lines, EOS running-config patches, FRR vtysh commands, plus a rollback block and verify steps.
  • Built for multi-vendor reality โ€” not a Cisco-only tool retrofitted with a chatbot.

If you have ever watched an AI dashboard hallucinate a "root cause" with no actionable next step, this is the antidote.

What's new โ€” connectors + MCP server

netlog-ai now ships a pluggable connector layer so it doesn't just analyze pasted logs โ€” it pulls from any common log source (full guide: docs/CONNECTORS.md).

Connector Source One-line setup
kibana Elasticsearch / Kibana NETLOG_SOURCE_kibana_URL=โ€ฆ NETLOG_SOURCE_kibana_API_TOKEN=โ€ฆ
splunk Splunk REST search NETLOG_SOURCE_splunk_URL=โ€ฆ NETLOG_SOURCE_splunk_API_TOKEN=โ€ฆ
loki Grafana Loki NETLOG_SOURCE_loki_URL=โ€ฆ NETLOG_SOURCE_loki_API_TOKEN=โ€ฆ
syslog UDP/TCP listener Zero-config โ€” point any device at port 5514
librenms LibreNMS REST NETLOG_SOURCE_librenms_URL=โ€ฆ NETLOG_SOURCE_librenms_API_TOKEN=โ€ฆ

And the analyzer engine is now agent-callable via a built-in MCP server:

pip install 'netlog-ai[mcp]'
netlog-ai mcp        # stdio transport โ€” wire into Claude Code, Cursor, Continue

Tools exposed: list_sources, add_source, fetch_logs, search_logs, analyze_logs, get_top_offenders, correlate_sources, analyze_device, list_sites, analyze_site, plus healthcheck + connector inventory. See docs/CONNECTORS.md for the full reference.

Features

๐Ÿ”Œ Pluggable sources Kibana, Splunk, Loki, LibreNMS, syslog UDP/TCP โ€” one Protocol, one config dict, hot-pluggable
๐Ÿค– MCP server mode Claude Code / Cursor / Continue can call the analyzer directly as agent tools
๐Ÿ”— Cross-source correlation Device tab โ†’ Correlate Sources: scans every registered source and tags each host confirmed (flagged by โ‰ฅ 2 sources) or suspected (1) in a sortable, severity-coded table
๐Ÿ”ฌ Per-device triage Device tab โ†’ Triage Device: one host's verdict + 0โ€“100 health score, severity histogram, top processes, and deduped error patterns in a single panel
๐Ÿ”Ž Classify 50+ regex patterns across Junos, EOS, FRR, IOS, RFC-3164/5424
๐Ÿงญ Prioritize Deduped action items, ranked by severity ร— count, recovery events excluded
๐Ÿง  Deep analyze Top-N items get an LLM-written root-cause + risk + remediation playbook
๐Ÿ›ก๏ธ Sanitize-first Every config/log payload is scrubbed ($6$, $9$, SSH keys, SNMP, RADIUS, public IPs) before LLM call
๐Ÿ“ˆ Health score Weighted formula โ†’ 0โ€“100 + A/B/C/D/F + sparkline trend
๐Ÿ—บ๏ธ Topology (multi-layer) Cytoscape.js + ELK layered renderer โ€” PHYSICAL ยท BGP ยท OSPF ยท VXLAN as separate views over the same fabric, attributes (AS / RID / VTEP) on nodes, speed/area on edges
๐Ÿค– Copilot Ask free-form questions, grounded in the selected site's configs
๐Ÿ” Post-mortem search Grep a pattern across every device in a site in one shot
๐Ÿ“„ Report export Markdown / HTML / CSV / PDF + site documentation in 3 formats
โŒจ๏ธ Keyboard-first 1/2/3 to switch tabs, โŒ˜/Ctrl+โ†ต to run, full ARIA + :focus-visible
๐Ÿ“ฑ PWA-ready Installable on iOS/Android home screen; theme-color tinted dark

Quick start

git clone https://github.com/gesh75/netlog-ai.git
cd netlog-ai
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env

# Run the UI
ai-log-analyzer serve
# โ†’ http://localhost:6060

Open the UI, pick a bundled site (lab-alpha or lab-bravo) under the ๐ŸŒ Site tab, and hit Analyze Whole Site. Without an LLM key the rule-based knowledge base produces the analysis; with ANTHROPIC_API_KEY set, Claude writes a richer narrative.

CLI

# List running FRR-lab containers (optional)
ai-log-analyzer containers

# Analyze a stream from any source
ai-log-analyzer analyze --frr r1 r2 --no-llm | jq .score
ai-log-analyzer analyze --file /var/log/syslog
docker logs my-router 2>&1 | ai-log-analyzer analyze --stdin

# Run the full test suite
pytest --cov=src --cov-report=term-missing

Configure the LLM

Three providers, switchable at runtime from the UI dropdown โ€” or via env / API:

Mode Order
local Local Docker Model Runner โ†’ falls back to Claude if ANTHROPIC_API_KEY is set
claude Claude first โ†’ falls back to local
claude-only Claude only, no fallback
LLM_PROVIDER=claude ANTHROPIC_API_KEY=sk-ant-... ai-log-analyzer serve

# Switch at runtime
curl -X POST localhost:6060/api/llm/provider \
  -H 'content-type: application/json' \
  -d '{"provider": "claude"}'

# Disable LLM entirely (rule-based KB only)
curl -X POST localhost:6060/api/llm/toggle \
  -H 'content-type: application/json' \
  -d '{"enabled": false}'

Local LLM via Docker Model Runner

docker model pull ai/qwen3        # 8B, ~5GB, recommended
# or
docker model pull ai/llama3.2     # 3B, ~2GB, faster
docker model list                 # confirm

Auto-detected via TCP :12434 first, then Unix sockets (~/Library/Containers/com.docker.docker/Data/inference.sock on macOS, /run/docker-model-runner/inference.sock on Linux).

Bundled demo sites

Four fully synthetic site bundles ship in sites/ so you can exercise every feature out of the box. These are not derived from any real network โ€” they're hand-built configs designed to demonstrate the analyzer's full feature set.

Site Devices Vendors What it shows
lab-alpha 5 (2 SRX HA pair + 1 MX router + 2 EOS switches) Junos + EOS Cross-vendor edge, chassis-cluster, MLAG
lab-bravo 6 (1 SRX firewall + 2 MX spines + 3 EX leaves) Junos Spine/leaf fabric, iBGP full mesh
clab-clos-evpn 9 (3 spines + 6 leaves) Nokia SRL + Arista cEOS + FRR Mixed-vendor Clos EVPN-VXLAN fabric, L2/L3 VNIs, route reflectors
dcn-lab 10 (5 cores + 3 edges + 2 dists) FRR Multi-POP backbone (DE-FRA ยท UK-LON ยท NL-AMS ยท US-NYC), eBGP + OSPF area 0

Each bundle includes intentional configuration gaps (missing BFD, no LLDP on some access switches, IoT VLAN without an L3 interface) so the analyzer's deep-analysis pipeline produces concrete, actionable findings.

Multi-layer topology

The topology view stacks four protocol overlays over the same fabric โ€” each with the data that's actually relevant to that protocol. Drag a node to pin it; positions persist across layer toggles (BGP, OSPF, VXLAN all follow the L1/L3 layout). Reset Layout reruns ELK from scratch. Full reference: docs/TOPOLOGY.md.

  • PHYSICAL โ€” node label: hostname; edge: Et1 ยท eth3 ยท et1/3 at each end, link speed (e.g. 10G, 100G) at midpoint parallel to the line; IPs revealed via the Show IPs toggle. Solid blue.
  • BGP โ€” node label: hostname ยท AS65001; edge: EBGP / IBGP tag only (AS already on each node). Purple; eBGP solid w/ arrow, iBGP dashed.
  • OSPF โ€” node label: hostname ยท RID 10.0.0.1; edge: area 0 (per-adjacency). Green dashed.
  • VXLAN โ€” node label: hostname ยท VTEP 10.255.1.4; edge: VNI 10010,10020,10030 (only where VNIs differ). Coral dashed.

When a layer has no edges anywhere on the site (e.g. OSPF on a pure-BGP fabric), the view shows the devices as a list with an explicit empty-state banner instead of silently falling back.

Speed inference

Link speed is resolved in this order:

  1. Explicit config directive โ€” EOS/IOS speed 100g, SRL port-speed 100G, Junos gigether-options speed 100g.
  2. Interface-name convention โ€” HundredGigE* โ†’ 100G, TenGig* / xe-* โ†’ 10G, GigabitEthernet* / ge-* โ†’ 1G, et-* โ†’ 40G, mge-* โ†’ 100G. Skipped for ambiguous names like Ethernet1 / eth1.
  3. Site default โ€” manifest.json may declare "default_link_speed": "10G" (used by all four bundled sites for the docker veth links).

The link rate displayed is min(src_speed, dst_speed) โ€” mismatches are surfaced so you can act on them.

Multi-vendor parsing coverage

The topology engine ingests configs from every shipped sample:

  • Junos โ€” set interfaces ... family inet address ..., gigether-options speed, OSPF area, chassis-cluster, BGP local-as / peer-as.
  • Arista EOS โ€” interface EthernetN { ip address ... speed ... }, router bgp, vxlan source-interface, OSPF process.
  • Nokia SRL โ€” interface ethernet-1/X { subinterface 0 { ipv4 { address ... } } }, system0 loopback as implicit VTEP when afi-safi evpn is signaled.
  • FRR โ€” Quagga-style block syntax, interface lo as implicit VTEP when advertise-all-vni is present, vrf X { vni Y } for L3 VNIs.

Auto-detection fallback parser (optional)

For arbitrary show output where the platform isn't known up-front, install the parse extra to enable tfsm_fire โ€” it scores every TextFSM template in a 700-template DB and returns the best match:

pip install -e ".[parse]"
from ai_log_analyzer.adapters.tfsm_auto import auto_parse
result = auto_parse(raw_cli_output, filter_hint="bgp_summary", min_score=40.0)

tfsm_fire auto-detect demo โ€” paste Cisco LLDP, IOS show version, FRR BGP summary; each picks the right template and scores 78โ€“89/100

See docs/TFSM_AUTO_PARSER.md for the API, scoring guide, and filter-hint reference. The full WebM video is demo/tfsm_demo.webm (19s, 311 KB) and the recording is reproducible via demo/record_tfsm_demo.sh.

DCN AI port โ€” correlation, triage, and expanded KB (2026-06-02)

Four capabilities backfilled from the closed-source DCN AI Intelligence Center:

  • Multi-source correlation โ€” correlate_sources MCP tool classifies events from every registered source and tags each device confirmed (seen in โ‰ฅ 2 independent sources) or suspected (1 source only). Eliminates single-source noise before escalation.
  • Richer RCA KB โ€” every KB entry (bgp, ospf, interface, lag, hardware, compliance, security, system) now carries a structured rca block: numbered root-cause list, risk sentence, ordered resolution steps, and copy-pastable Junos / EOS CLI commands. Two new categories added: vpn (IKE/IPsec failure) and redundancy (VRRP/HSRP failover); hardware extended with fpc (line-card errors) and chassis (PSU/fan/temperature alarms).
  • Expanded classifier patterns โ€” inetd|xinetd|ftpd added as a low-severity system pattern, positioned after all high-severity patterns so first-match-wins is preserved. Three new unit tests confirm matching and priority ordering.
  • Per-device triage โ€” analyze_device MCP tool pulls one hostname's events from all sources, returns a severity histogram, process breakdown, frequency-deduped error patterns, a KB verdict (e.g. ROUTING, HARDWARE), and a 0โ€“100 health score.

Full details and usage examples: docs/PORTED_FROM_DCN_AI.md.

LOGS pipeline hardening (2026-05-27)

Three follow-up fixes to the LOGS tab: (1) the Executive Summary LLM call now receives an ALLOWED_HOSTNAMES anchor and a post-validation scrubber so it can no longer emit textbook placeholders like R1-R3 or SW1-SW2, (2) classifier.strip_ansi removes ANSI/VT100 escape codes from every event at the LogEvent โ†’ ClassifiedEvent boundary (no more [0;32m OK [0m garbage in the UI), and (3) containerlab-multivendor/topologies/clos-evpn.clab.yml now caps cEOS / SRL / linux containers via the kinds: block so a runaway control plane can't OOM-cascade the host. Full details and live validation data in docs/LOGS_PIPELINE_HARDENING.md.

Site-Wide Optimization โ€” split scoring + hostname anchoring

The Site-Wide Strategic Optimization widget now returns two independent scores instead of a single ambiguous "maturity" number: fabric_design_score (routing, HA, lifecycle, BGP tuning, overlay) and operational_readiness_score (NTP, syslog, AAA, SNMPv3, monitoring, compliance). This separates architectural gaps from day-2 hygiene so an engineer knows whether to plan a hardware change or just push config. The LLM prompt also injects an explicit ALLOWED_HOSTNAMES inventory and post-validation drops any config_changes key not in that list โ€” no more invented CR-01 / BR-01 placeholders. Full design and validation in docs/SCORING_SPLIT.md.

๐Ÿ›๏ธ Architecture

The analyzer core sits between the operators who drive it (browser, CLI, or AI agents over MCP), the log platforms it pulls from, the LLM runtimes it can call, and the network devices that produce the logs and configs. Every outbound LLM call is gated by the sanitizer. Full diagram set โ€” container map, runtime sequence, data-flow pipeline, provider-fallback state machine, ER model, and module map โ€” lives in docs/ARCHITECTURE.md.

flowchart TB
    OP["NOC Operator - browser and CLI"]
    AGENT["AI Agents - Claude Code and Cursor"]
    NET(["netlog-ai analyzer core"])
    LOGS["Log Platforms - Kibana, Splunk, Loki, LibreNMS, syslog"]
    LLM["LLM Runtimes - Ollama, Docker Model Runner, Claude"]
    DEV["Network Devices - Junos, EOS, SR Linux, FRR"]

    OP -->|HTTP and JSON| NET
    AGENT -->|MCP stdio| NET
    LOGS -->|fetch logs| NET
    DEV -.->|syslog and configs| LOGS
    DEV -.->|docker logs and running-config| NET
    NET -->|sanitized prompt| LLM
    LLM -->|5-phase playbook JSON| NET
    NET -->|ranked actions and CLI fixes| OP
    NET -->|tool results| AGENT

    classDef sys     fill:#7c3aed,stroke:#c4b5fd,color:#fff,stroke-width:2px
    classDef person  fill:#0ea5e9,stroke:#7dd3fc,color:#fff
    classDef ext     fill:#475569,stroke:#94a3b8,color:#fff
    classDef ai      fill:#a16207,stroke:#fbbf24,color:#fff

    class NET sys
    class OP,AGENT person
    class LOGS,DEV ext
    class LLM ai

netlog-ai animated architecture diagram โ€” Sources โ†’ Adapters โ†’ Pipeline โ†’ Intelligence โ†’ Outputs

Flow: any source (Kibana, Splunk, Loki, syslog, LibreNMS, FRR, file) โ†’ SourceManager adapter โ†’ sanitize โ†’ classify โ†’ prioritize โ†’ deep-analyze โ†’ score โ†’ outputs (Web UI, MCP server, reports, topology, copy-pastable CLI). Every byte that touches the LLM is scrubbed first.

ASCII fallback (for terminals / RSS readers)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  Browser (vanilla JS, no build)                     โ”‚
โ”‚                  index.html + app.js                                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚ HTTP / JSON
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                Flask  (port 6060)                                   โ”‚
โ”‚                                                                     โ”‚
โ”‚  Adapters โ†’ Classifier โ†’ Action Items โ†’ Health Score โ†’ AI Summary  โ”‚
โ”‚     โ”‚           โ”‚              โ”‚              โ”‚             โ”‚       โ”‚
โ”‚     โ–ผ           โ–ผ              โ–ผ              โ–ผ             โ–ผ       โ”‚
โ”‚  FRR docker  50+ regex     dedupe by    weighted formula  LLM or    โ”‚
โ”‚  File        patterns      (sev, desc)  โ†’ A/B/C/D/F       KB        โ”‚
โ”‚  Stdin/raw                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Module layout

src/ai_log_analyzer/
  classifier.py        50+ regex patterns + severity/category lookup
  kb.py                Rule-based deep-analysis KB (fallback when LLM is off)
  llm.py               Docker Model Runner (TCP + UDS) + Anthropic Claude
  analyzer.py          End-to-end pipeline: classify โ†’ actions โ†’ score โ†’ summary
  copilot.py           Site-context Q&A with secret-sanitized prompts
  diff.py              Config-diff explainer
  sanitize.py          Pre-LLM redaction (passwords, public IPs, SSH keys)
  site_optimize.py     Site-wide cross-device gap finder + maturity score
  site_diagram.py      Mermaid + Graphviz DOT topology renderer
  topology.py          Build topology graph from device list
  topology_infer.py    Multi-signal edge inference (BGP, MLAG, descriptions, subnets)
  reports.py           MD / HTML / CSV / PDF report exporters
  adapters/
    frr.py             docker logs <container> โ†’ LogEvent stream
    file.py            RFC3164 / RFC5424 / Junos / freeform parser
  web/
    app.py             Flask routes + create_app()
    static/            index.html + app.js (no build step)
  cli.py               `ai-log-analyzer serve | analyze | containers`

API

Method Endpoint Description
GET /api/health Liveness check
GET /api/llm/status Provider + availability for each provider
POST /api/llm/provider {"provider": "local"|"claude"|"claude-only"}
POST /api/llm/toggle {"enabled": true|false}
GET /api/lab/containers Running FRR-lab container names
GET /api/sites List bundled site bundles
POST /api/analyze Full pipeline โ€” see request shapes below
POST /api/optimize Device-level config audit + patches
POST /api/optimize/site Cross-device site analysis
POST /api/optimize/site-wide/<id> Strategic maturity scoring + phased roadmap
POST /api/correlate Cross-source correlation โ€” confirmed (โ‰ฅ 2 sources) vs suspected (1) devices
POST /api/triage Per-device triage โ€” verdict, health score, severity histogram, top processes, patterns
GET /api/topology/<id> Topology graph (JSON / Mermaid / DOT)
GET /api/compliance/<id> Compliance rules pass/fail
POST /api/copilot Free-form Q&A grounded in selected site config
POST /api/postmortem/<id> Pattern search across all devices in a site

/api/analyze request

{
  "source": "frr",
  "containers": ["r1", "r2"],
  "tail": 500,
  "use_llm": true
}
{
  "source": "raw",
  "hostname": "test-router",
  "text": "Mar  3 12:00:01 r1 rpd[1234]: bgp peer 10.0.0.1 down\n..."
}

Security defaults

  • Sanitize-before-LLM โ€” every config/log payload is run through sanitize.py before any outbound call. Coverage:
    • Linux/BSD shadow hashes ($1$, $5$, $6$)
    • Junos $9$ proprietary encoding
    • SSH keys (RSA / Ed25519 / ECDSA / DSS)
    • SNMP communities, RADIUS / TACACS+ keys
    • IPsec pre-shared keys
    • Public IPv4 addresses (mapped to RFC-5737 doc prefixes for the LLM context)
  • Localhost bind by default โ€” set ANALYZER_HOST=0.0.0.0 to expose; the server warns if you bind publicly without an API_TOKEN.
  • API-token gate โ€” set API_TOKEN=... to require Authorization: Bearer ... on every POST.
  • CORS allow-list โ€” ANALYZER_CORS_ORIGINS=https://a.com,https://b.com.
  • No telemetry โ€” outbound calls go only to (a) the LLM provider you select and (b) the local Docker socket if you analyze FRR-lab containers.

Tested & accessible

  • 294 unit + integration tests (pytest)
  • Frontend audited across 8 review rounds:
    • WCAG-AA: :focus-visible rings, aria-live regions, role=tablist/tab/tabpanel, skip-to-main link, prefers-reduced-motion fallback
    • Responsive โ‰ค 1100px, PWA-ready (theme-color, mobile-web-app-capable, SVG favicon)
    • Performance: content-visibility: auto panel culling, contain: layout, deferred scripts, preconnect hint
    • Keyboard: 1/2/3 to switch tabs, โŒ˜/Ctrl+โ†ต to run, semantic <kbd> hints throughout
    • Print stylesheet for hardcopy reports

Roadmap

  • Multi-site comparison view (delta between two sites)
  • Real-time tail mode (websocket stream of new events)
  • Slack / generic-JSON alert webhooks per severity threshold (AI_LOG_ANALYZER_WEBHOOK_URL โ€” see .env.example)
  • More vendor adapters (Nokia SR Linux, Cisco IOS-XE, Cumulus NCLU)
  • Snapshot / replay analysis runs for regression testing
  • Custom rule editor in the UI

Contributing

PRs welcome. See CONTRIBUTING.md for the short version. The whole stack is one pip install -e ".[dev]" && pytest away.

License

MIT โ€” see LICENSE.


Built by @gesh75 as part of a multi-vendor network automation toolkit.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netlog_ai-0.3.0.tar.gz (926.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netlog_ai-0.3.0-py3-none-any.whl (922.3 kB view details)

Uploaded Python 3

File details

Details for the file netlog_ai-0.3.0.tar.gz.

File metadata

  • Download URL: netlog_ai-0.3.0.tar.gz
  • Upload date:
  • Size: 926.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netlog_ai-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ff332c5ec36890b79328a2bb3132575fe9a6639dcad8f7aef625f1c1bff080c6
MD5 ddcef6a20405fc14ec0d3241d87c8b83
BLAKE2b-256 d66ed947ca356e491dae3cfc5e626f5b7faa3ce3080c0cfb8296abe8c97bda6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for netlog_ai-0.3.0.tar.gz:

Publisher: release.yml on gesh75/netlog-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file netlog_ai-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: netlog_ai-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 922.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netlog_ai-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd9db91de93d89ff49dca6def2c3e68d0ef84b10bce7efe96fe043168faffbef
MD5 8ae117182ba4352e91137c132371676f
BLAKE2b-256 86ee412aeaf3fe4df88ee0eb8d740582798fb878f281ad90149f5f1fb3945aa4

See more details on using hashes here.

Provenance

The following attestation bundles were made for netlog_ai-0.3.0-py3-none-any.whl:

Publisher: release.yml on gesh75/netlog-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page