# hakimizz-tech/diakoptis architecture

> Architecture diagram of the GitHub repository hakimizz-tech/diakoptis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hakimizz-tech/diakoptis
- Repository: https://github.com/hakimizz-tech/diakoptis

## Overview

Diakoptis is an interactive, multi-vendor switch troubleshooting CLI. An operator selects switches by name, list, or inventory tags/groups, connects over SSH, then runs friendly commands that map to native commands. Results are parsed, optionally diagnosed, aggregated across switches, and rendered for comparison. The graph follows the README’s documented workflow and sampled module responsibilities; command-handler wiring not shown in excerpts is represented only where the README documents it.

Main entry points: [`src/diakoptis/cli/commands/check.py`](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/check.py) (Check Command), [`src/diakoptis/cli/shell.py`](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/shell.py) (Interactive Shell), [`src/diakoptis/cli/commands/show.py`](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/show.py) (Show Command), [`src/diakoptis/connection/pool.py`](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/connection/pool.py) (Concurrent Session Pool)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and Targeting"]
  node_shell["Interactive Shell<br/>[shell.py]"]
  node_connect_cmd["Connect Command<br/>[connect.py]"]
  node_show_cmd["Show Command<br/>[show.py]"]
  node_check_cmd["Check Command<br/>[check.py]"]
  node_target_parser["Target Parser<br/>[target_parser.py]"]
end

subgraph group_config["Inventory and Commands"]
  node_inventory["Switch Inventory<br/>[inventory.py]"]
  node_credentials["Credential Resolver<br/>[credentials.py]"]
  node_command_map["Vendor Command Maps<br/>[command_map.py]"]
  node_resolver["Command Resolver<br/>[resolver.py]"]
end

subgraph group_execution["SSH Execution"]
  node_pool["Concurrent Session Pool<br/>[pool.py]"]
  node_factory["Driver Factory<br/>[factory.py]"]
  node_driver_base["Driver Interface<br/>[base.py]"]
  node_asterfusion["Asterfusion Driver<br/>[asterfusion.py]"]
  node_huawei["Huawei Driver<br/>[huawei.py]"]
end

subgraph group_analysis["Results and Diagnostics"]
  node_parser["Output Parser<br/>[parser.py]"]
  node_local_templates["Local TextFSM Templates"]
  node_diagnostics["Diagnostics Engine<br/>[engine.py]"]
  node_playbooks["Diagnostic Playbooks"]
  node_aggregator["Result Aggregator<br/>[aggregator.py]"]
  node_renderer["Terminal Renderer<br/>[renderer.py]"]
end

subgraph group_integration["External Systems"]
  node_switches(("Network Switches"))
  node_ntc["ntc-templates"]
end

node_operator(("Network Operator"))

node_operator -->|"enters commands"| node_shell
node_shell -->|"dispatches connect"| node_connect_cmd
node_shell -->|"dispatches show"| node_show_cmd
node_shell -->|"dispatches check"| node_check_cmd
node_shell -->|"loads inventory"| node_inventory
node_shell -->|"loads mappings"| node_command_map
node_connect_cmd -->|"parses targets"| node_target_parser
node_target_parser -->|"matches hosts"| node_inventory
node_connect_cmd -->|"opens sessions"| node_pool
node_pool -->|"resolves credentials"| node_credentials
node_pool -->|"requests driver"| node_factory
node_factory -->|"creates driver"| node_asterfusion
node_factory -->|"creates driver"| node_huawei
node_asterfusion -->|"implements interface"| node_driver_base
node_huawei -->|"implements interface"| node_driver_base
node_asterfusion -->|"connects via SSH"| node_switches
node_huawei -->|"connects via SSH"| node_switches
node_show_cmd -->|"resolves command"| node_resolver
node_check_cmd -->|"resolves command"| node_resolver
node_resolver -->|"looks up mapping"| node_command_map
node_show_cmd -->|"runs commands"| node_pool
node_check_cmd -->|"runs commands"| node_pool
node_pool -->|"sends native commands"| node_switches
node_show_cmd -->|"parses output"| node_parser
node_check_cmd -->|"parses output"| node_parser
node_parser -->|"tries local template"| node_local_templates
node_parser -.->|"falls back to community templates"| node_ntc
node_check_cmd -->|"analyzes results"| node_diagnostics
node_diagnostics -->|"dispatches playbook"| node_playbooks
node_show_cmd -->|"aggregates results"| node_aggregator
node_check_cmd -->|"aggregates results"| node_aggregator
node_show_cmd -->|"renders output"| node_renderer
node_check_cmd -->|"renders findings"| node_renderer

click node_shell "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/shell.py"
click node_connect_cmd "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/connect.py"
click node_show_cmd "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/show.py"
click node_check_cmd "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/check.py"
click node_target_parser "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/targeting/target_parser.py"
click node_inventory "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/inventory.py"
click node_credentials "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/credentials.py"
click node_command_map "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/command_map.py"
click node_resolver "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/resolver/resolver.py"
click node_pool "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/connection/pool.py"
click node_factory "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/factory.py"
click node_driver_base "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/base.py"
click node_asterfusion "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/asterfusion.py"
click node_huawei "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/huawei.py"
click node_parser "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/parsing/parser.py"
click node_local_templates "https://github.com/hakimizz-tech/diakoptis/tree/main/src/diakoptis/parsing/templates"
click node_diagnostics "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/diagnostics/engine.py"
click node_playbooks "https://github.com/hakimizz-tech/diakoptis/tree/main/src/diakoptis/diagnostics/playbooks"
click node_aggregator "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/aggregation/aggregator.py"
click node_renderer "https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/rendering/renderer.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_shell,node_connect_cmd,node_show_cmd,node_check_cmd,node_target_parser toneBlue
class node_inventory,node_credentials,node_command_map,node_resolver toneAmber
class node_pool,node_factory,node_driver_base,node_asterfusion,node_huawei toneMint
class node_parser,node_local_templates,node_diagnostics,node_playbooks,node_aggregator,node_renderer toneRose
class node_switches,node_ntc,node_operator toneIndigo
```

## Components

### CLI and Targeting

- [Interactive Shell](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/shell.py): `src/diakoptis/cli/shell.py`
- [Connect Command](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/connect.py): `src/diakoptis/cli/commands/connect.py`
- [Show Command](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/show.py): `src/diakoptis/cli/commands/show.py`
- [Check Command](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/cli/commands/check.py): `src/diakoptis/cli/commands/check.py`
- [Target Parser](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/targeting/target_parser.py): `src/diakoptis/targeting/target_parser.py`

### Inventory and Commands

- [Switch Inventory](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/inventory.py): `src/diakoptis/config/inventory.py`
- [Credential Resolver](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/credentials.py): `src/diakoptis/config/credentials.py`
- [Vendor Command Maps](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/config/command_map.py): `src/diakoptis/config/command_map.py`
- [Command Resolver](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/resolver/resolver.py): `src/diakoptis/resolver/resolver.py`

### SSH Execution

- [Concurrent Session Pool](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/connection/pool.py): `src/diakoptis/connection/pool.py`
- [Driver Factory](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/factory.py): `src/diakoptis/drivers/factory.py`
- [Driver Interface](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/base.py): `src/diakoptis/drivers/base.py`
- [Asterfusion Driver](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/asterfusion.py): `src/diakoptis/drivers/asterfusion.py`
- [Huawei Driver](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/drivers/huawei.py): `src/diakoptis/drivers/huawei.py`

### Results and Diagnostics

- [Output Parser](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/parsing/parser.py): `src/diakoptis/parsing/parser.py`
- [Local TextFSM Templates](https://github.com/hakimizz-tech/diakoptis/tree/main/src/diakoptis/parsing/templates): `src/diakoptis/parsing/templates`
- [Diagnostics Engine](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/diagnostics/engine.py): `src/diakoptis/diagnostics/engine.py`
- [Diagnostic Playbooks](https://github.com/hakimizz-tech/diakoptis/tree/main/src/diakoptis/diagnostics/playbooks): `src/diakoptis/diagnostics/playbooks`
- [Result Aggregator](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/aggregation/aggregator.py): `src/diakoptis/aggregation/aggregator.py`
- [Terminal Renderer](https://github.com/hakimizz-tech/diakoptis/blob/main/src/diakoptis/rendering/renderer.py): `src/diakoptis/rendering/renderer.py`

### External Systems

- **Network Switches**
- **ntc-templates**

### Other components

- **Network Operator**

## Connections

- Network Operator → Interactive Shell: enters commands
- Interactive Shell → Connect Command: dispatches connect
- Interactive Shell → Show Command: dispatches show
- Interactive Shell → Check Command: dispatches check
- Interactive Shell → Switch Inventory: loads inventory
- Interactive Shell → Vendor Command Maps: loads mappings
- Connect Command → Target Parser: parses targets
- Target Parser → Switch Inventory: matches hosts
- Connect Command → Concurrent Session Pool: opens sessions
- Concurrent Session Pool → Credential Resolver: resolves credentials
- Concurrent Session Pool → Driver Factory: requests driver
- Driver Factory → Asterfusion Driver: creates driver
- Driver Factory → Huawei Driver: creates driver
- Asterfusion Driver → Driver Interface: implements interface
- Huawei Driver → Driver Interface: implements interface
- Asterfusion Driver → Network Switches: connects via SSH
- Huawei Driver → Network Switches: connects via SSH
- Show Command → Command Resolver: resolves command
- Check Command → Command Resolver: resolves command
- Command Resolver → Vendor Command Maps: looks up mapping
- Show Command → Concurrent Session Pool: runs commands
- Check Command → Concurrent Session Pool: runs commands
- Concurrent Session Pool → Network Switches: sends native commands
- Show Command → Output Parser: parses output
- Check Command → Output Parser: parses output
- Output Parser → Local TextFSM Templates: tries local template
- Output Parser → ntc-templates: falls back to community templates
- Check Command → Diagnostics Engine: analyzes results
- Diagnostics Engine → Diagnostic Playbooks: dispatches playbook
- Show Command → Result Aggregator: aggregates results
- Check Command → Result Aggregator: aggregates results
- Show Command → Terminal Renderer: renders output
- Check Command → Terminal Renderer: renders findings
