TerminalTelemetry


NameTerminalTelemetry JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/scottpeterman/terminaltelemetry
SummaryA PyQt6 terminal emulator with SSH and telemetry capabilities
upload_time2025-10-29 02:34:34
maintainerNone
docs_urlNone
authorScott Peterman
requires_python>=3.12
licenseNone
keywords terminal ssh telemetry network monitoring pyqt6 netmiko textfsm
VCS
bugtrack_url
requirements backports.tarfile bcrypt certifi cffi charset-normalizer click colorama cryptography diff-match-patch docutils future id idna importlib_metadata jaraco.classes jaraco.context jaraco.functools Jinja2 junos-eznc keyring logicmonitor-sdk lxml markdown-it-py MarkupSafe mdurl more-itertools napalm ncclient netaddr netmiko netutils nh3 ntc_templates packaging paramiko pkginfo pycparser pyeapi Pygments PyNaCl pynetbox pyparsing PyQt6 PyQt6-Charts PyQt6-Charts-Qt6 PyQt6-Qt6 PyQt6-WebEngine PyQt6-WebEngine-Qt6 PyQt6_sip pyserial python-dateutil pywin32-ctypes PyYAML qasync readme_renderer requests requests-toolbelt rfc3986 rich ruamel.yaml ruamel.yaml.clib scp setuptools six textfsm transitions ttp ttp-templates twine typing_extensions urllib3 yamlordereddictloader zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TerminalTelemetry

![Screenshot](https://raw.githubusercontent.com/scottpeterman/terminaltelemetry/refs/heads/main/screenshots/v2/slides3.gif)
![License](https://img.shields.io/badge/license-GPL--3.0-blue.svg)
![Python](https://img.shields.io/badge/python-3.12+-blue.svg)
![PyPI](https://img.shields.io/badge/pip-installable-green.svg)

**TerminalTelemetry** is a modern, cyberpunk-inspired terminal emulator and network telemetry platform built with PyQt6. It combines powerful SSH terminal capabilities with real-time network device monitoring in a sleek, themeable interface.

---

## πŸ–₯️ Platform Requirements

**TerminalTelemetry is a native desktop application** - requires a graphical desktop environment (not for headless servers or web browsers).

### Quick Installation

#### Application Entry Points
TerminalTelemetry provides two launcher commands:
- **`termtel`** - Standard GUI launch (Windows: `termtel.exe`)
- **`termtel-con`** - Launch with console output (for debugging and troubleshooting)

---

**Windows & macOS:**
```bash
pip install TerminalTelemetry
termtel
```

**Linux & WSL2:**

⚠️ **Linux requires Qt6 system libraries first.** Quick install for Ubuntu/Debian:
```bash
sudo apt install -y libqt6gui6t64 libqt6widgets6t64 libqt6core6t64 qt6-base-dev \
    libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \
    libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 \
    libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libx11-xcb1 libgl1 libglib2.0-0t64

pip install TerminalTelemetry
termtel
```

**πŸ“˜ For other Linux distributions, WSL2 setup, and troubleshooting:** [Linux Installation Guide](README_Linux_Desktops.md)

> **Looking for a web-based tool?** See [Velociterm](https://github.com/scottpeterman/velociterm) instead.

---

## πŸš€ Current Features

### 🎨 **Advanced Theme System**
- **24+ built-in themes** (Cyberpunk, Nord, Gruvbox, Doom, Borland, Amiga, CRT-Green/Amber, and more)
- **Dynamic JSON-based themes** with hot-reload capability
- **Live theme switching** across all components without restart
- **Per-tab theme customization** via right-click context menu
- **Individual terminal theming** - different theme for each tab
- **Theme editor** with real-time preview and custom theme creation
- **Consistent theming** across terminals, telemetry widgets, and UI components
- **Tab management** with rename functionality and clean context menus

### πŸ–₯️ **Multi-Session Terminal Environment**
- **Tabbed SSH terminals** with xterm.js backend
- **Session management** with YAML-based configuration
- **Per-tab customization** - individual themes and renamed tab labels
- **Context menu controls** - close, rename, and theme individual tabs
- **Quick Connect** interface for rapid device access
- **Cross-platform terminal support** (Windows, macOS, Linux)

### πŸ“Š **Real-Time Network Telemetry**
- **Live device monitoring** via SSH (no SNMP required)
- **Multi-vendor support** (Cisco IOS/IOS-XE/NX-OS, Arista EOS, Linux)
- **Real-time data collection**:
  - System information (hostname, version, uptime, hardware)
  - CPU and memory utilization with progress bars
  - CDP/LLDP neighbor discovery
  - ARP table monitoring
  - Routing table with VRF support
  - Live system log streaming
- **Threaded data collection** keeps UI responsive
- **Template-based parsing** with 200+ TextFSM templates
- **CSV export** for all telemetry data tables

### πŸ”§ **Template System & Customization**
- **Built-in template editor** with syntax highlighting
- **200+ pre-configured TextFSM templates** for network devices
- **Live template testing** against real device output
- **Field mapping validation** with coverage reports
- **Template debugging** with detailed error reporting
- **Package resource management** - templates included in installation

### πŸ”’ **Enterprise Security**
- **Encrypted credential storage** with Fernet (AES-128-CBC) + HMAC
- **PBKDF2-HMAC-SHA256** key derivation (480,000 iterations)
- 
- **SSH key authentication** πŸ†•
  - Automatic private key detection from `~/.ssh/`
  - Support for RSA, ED25519, ECDSA, DSS key types
  - Config-based key management (`~/.ssh_manager/keys.json`)
  - Per-session key preferences with persistent settings
- **Platform-specific secure storage** locations
- **Machine-specific credential binding**
- **Rate-limited authentication** prevents brute force
- **Zero plaintext storage** of sensitive data

![Screenshot](https://raw.githubusercontent.com/scottpeterman/terminaltelemetry/refs/heads/main/screenshots/v2/key_auth_sessions.png)
### πŸš€ **Session Import Tools**
- **NetBox Integration**:
  - Import devices directly from NetBox instances
  - Site-based organization and grouping
  - Automatic credential mapping
- **LogicMonitor Integration**:
  - SDK-based device discovery
  - Progress feedback and error handling
  - SSL certificate validation support

### 🧰 **Built-in Tools**
- **Text Editor** with syntax highlighting
- **Diff Tool** for configuration comparison
- **Serial Terminal** for console connections
- **Space Debris & Doom** - Demonstrates the framework's capability as a general-purpose tool delivery platform. The terminal application's architecture is designed to host any PyQt6 or web-based component, making it easy to extend with custom tools and utilities.

---

## πŸ—οΈ Architecture Highlights

### **SSH-Only Monitoring**
- Works with any SSH-accessible device
- No agent installation required on target devices
- Leverages existing SSH credentials
- Zero infrastructure - no monitoring servers or databases needed

### **Template-Driven Parsing**
- 200+ TextFSM templates packaged with the application
- Live template editing with syntax highlighting and testing
- Field normalization across different vendors
- Package resource system - templates accessible in any environment
- User-customizable - fix parsing issues yourself

### **Extensible Desktop Platform**
- Qt6-based UI with native performance
- Threaded data collection prevents UI blocking
- Signal-based communication between components
- Modular widget system - easily add new tools and features
- Package-aware resource management for pip installations
- Tab-based interface can host any PyQt6 widget or web content

---

## 🎯 Getting Started

### Quick Start
1. **Install via pip**: `pip install TerminalTelemetry`
2. **Launch**: `termtel`
3. **Create SSH sessions** via File β†’ Open Sessions or use Quick Connect
4. **Open Telemetry Dashboard** via Tools β†’ Telemetry Dashboard
5. **Connect to devices** and view real-time monitoring data
6. **Customize themes** via View β†’ Theme menu and Theme Editor

**Note for Windows users:** After installation, you can create a desktop shortcut to `venv\Scripts\termtel.exe` for easier access.

### First Device Connection
1. Click **"Quick Connect"** in the bottom panel
2. Enter device IP, credentials, and select platform (cisco_ios, arista_eos, etc.)
3. Click **"Connect"** - terminal tab opens automatically
4. Open **Tools β†’ Telemetry Dashboard** to see real-time monitoring
5. Use the **gear buttons** in widgets to customize TextFSM templates

### Theme Customization
- **Global themes**: Use View β†’ Theme menu to change all components
- **Individual tab themes**: Right-click any tab label β†’ Terminal Theme β†’ select theme
- **Custom themes**: Use View β†’ Theme β†’ Theme Editor to create new themes
- **Theme files**: Drop JSON theme files in the `~/.termtel/themes/` directory for instant availability

### Template Customization
1. Connect to a device and open telemetry dashboard
2. Click the **βš™οΈ gear button** on any widget (neighbors, routes, etc.)
3. **Template editor opens** with current template and sample data
4. **Edit template** using TextFSM syntax
5. **Click "RUN TEST"** to validate against live device output
6. **Save template** - changes apply immediately

---

## πŸ“‘ Supported Platforms

### **Full Support (Complete Telemetry Dashboard)**
- **Cisco IOS/IOS-XE**: System info, CDP neighbors, ARP table, routing table, CPU/memory utilization, system logs, VRF support

### **Partial Support (Basic Telemetry)**
- **Cisco NX-OS**: System info, CDP neighbors, ARP table, routing table, VRF support *(missing CPU/memory/logs)*
- **Arista EOS**: System info, LLDP neighbors, ARP table, routing table, CPU/memory, temperature, logs, VRF support *(uses LLDP instead of CDP)*

### **Basic Support (Limited Telemetry)**
- **Aruba AOS-S/CX**: System info, LLDP neighbors, ARP table, routing table *(missing CPU/memory/logs)*
- **HP ProCurve**: System info, LLDP neighbors, ARP table, routing table *(legacy switch support)*
- **Juniper JunOS**: System info, LLDP neighbors, ARP table *(minimal support)*
- **Linux**: System info, ARP table, routing table *(basic networking commands)*

### **Template Coverage**
Based on your actual TextFSM template library:
- **200+ templates total** across all vendors
- **Cisco IOS**: 100+ templates (most comprehensive)
- **Arista EOS**: 45+ templates (good coverage)
- **Cisco NX-OS**: 15+ templates (basic coverage)
- **HP ProCurve**: 7 templates (legacy support)
- **Juniper JunOS**: 3 templates (minimal)
- **Linux**: Basic networking templates
- **Aruba**: Basic switch templates

---

## ⚠️ Known Issues & Limitations

### **Known Platform Limitations**
- **Cisco NX-OS**: Missing CPU/memory utilization and system log templates
- **Aruba platforms**: No CPU/memory monitoring templates available  
- **HP ProCurve**: Legacy platform with limited template coverage
- **Juniper JunOS**: Minimal template support (contributions welcome)
- **Linux**: Basic networking only (no system monitoring templates)

### **Template Coverage Notes**
- **Cisco IOS/IOS-XE** has the most comprehensive template coverage
- **Arista EOS** has good coverage but uses LLDP instead of CDP for neighbors
- Other platforms have basic connectivity but may lack advanced telemetry features
- Missing templates can be created using the built-in template editor

### **Current Application Limitations**
- Single-device monitoring per telemetry tab (multi-device dashboard planned)
- No historical data storage (trending features planned)
- Template editor requires platform connection for live testing

---

## πŸ—ΊοΈ Planned Features & Roadmap

### **Near Term (v0.16-0.17)**
- Multi-device dashboards for network-wide monitoring
- Historical data collection with basic trending graphs
- Enhanced error handling and automatic reconnection
- Template sharing and import/export functionality
- Custom command execution with ad-hoc template creation

### **Medium Term (v0.18-0.20)**
- Network topology discovery and visualization
- Configuration backup and change detection
- Alert system for threshold monitoring
- Plugin architecture for community extensions
- REST API for external integrations

### **Long Term (v1.0+)**
- Distributed monitoring across multiple instances
- Community template repository with automatic updates
- Advanced analytics and machine learning insights
- Mobile companion app for alerts and basic monitoring

---

## πŸ”§ Technical Architecture

### **Data Flow**
```
SSH Connection β†’ Command Execution β†’ TextFSM Parsing β†’ Field Normalization β†’ UI Display
     ↓                ↓                    ↓                   ↓              ↓
 netmiko         show commands      Package Templates    Platform Maps    PyQt6 Widgets
```

### **Key Components**
- **Resource Manager**: Package-aware template and config loading
- **Platform Config Manager**: JSON-driven platform definitions
- **Threaded Telemetry Controller**: Non-blocking data collection
- **Template Editor**: Live template editing and testing
- **Theme System**: JSON-based UI customization
- **Modular Tab System**: Extensible framework for hosting custom tools and widgets

### **Security Architecture**
- **Credential encryption** using Fernet with PBKDF2 key derivation
- **SSH key authentication** with automatic key detection
- **No network exposure** - purely SSH client connections
- **Local data storage** with machine-specific encryption keys
- **Memory-safe** credential handling with automatic cleanup

---

## 🀝 Contributing

### **Bug Reports**
Found an issue? Please report it with:
- Device platform and software version
- Command output that failed to parse
- Steps to reproduce the issue
- Expected vs actual behavior

### **Template Contributions**
- Use the built-in template editor to create/fix templates
- Test against multiple software versions when possible
- Follow TextFSM best practices for field naming
- Submit templates for new platforms or commands

### **Development Setup**
```bash
git clone https://github.com/scottpeterman/terminaltelemetry.git
cd terminaltelemetry
pip install -e .
# Edit code, templates, themes
python -m pytest tests/  # Run tests
```

---

## πŸ“Έ Screenshots

### Main Interface with Cyberpunk Theme
*Terminal sessions alongside real-time telemetry monitoring*

### Multi-Vendor Telemetry Dashboard
*Live monitoring of Cisco devices showing neighbors, ARP, routing, and system metrics*

### Template Editor
*Real-time template customization with live preview*

---

## πŸ“„ License

TerminalTelemetry is licensed under the GPLv3 License. See the LICENSE file for details.

---

## πŸ™ Acknowledgments

- Built on PyQt6 and the Python ecosystem
- Network automation powered by netmiko and TextFSM
- Terminal functionality via xterm.js
- Template system inspired by ntc-templates
- Packaging system using modern Python setuptools
- Inspired by cyberpunk aesthetics and retro computing

---

## πŸ“š Support & Community

- **GitHub Issues**: Bug reports and feature requests
- **GitHub Repository**: https://github.com/scottpeterman/terminaltelemetry
- **Documentation**: Comprehensive guides and API reference  
- **Template Library**: Community-contributed TextFSM templates

---

## πŸ“‹ Version History

### v0.15.0 (Current - October 2025)
- βœ… **SSH key authentication** - Passwordless authentication with auto-detection
- βœ… **24+ themes** - Expanded theme library with vintage and retro options
- βœ… **Package resource system** - pip installable with embedded templates
- βœ… **Template editor integration** - live editing and testing
- βœ… **CSV export functionality** for all telemetry tables
- βœ… **Enhanced platform support** with JSON configuration
- βœ… **Threaded telemetry collection** for responsive UI
- βœ… **Improved error handling** and connection management

---

*"The best network monitoring tool is the one that gets out of your way and shows you what you need to know."*

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/scottpeterman/terminaltelemetry",
    "name": "TerminalTelemetry",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "terminal ssh telemetry network monitoring pyqt6 netmiko textfsm",
    "author": "Scott Peterman",
    "author_email": "scottpeterman@gmail.com",
    "download_url": null,
    "platform": null,
    "description": "# TerminalTelemetry\r\n\r\n![Screenshot](https://raw.githubusercontent.com/scottpeterman/terminaltelemetry/refs/heads/main/screenshots/v2/slides3.gif)\r\n![License](https://img.shields.io/badge/license-GPL--3.0-blue.svg)\r\n![Python](https://img.shields.io/badge/python-3.12+-blue.svg)\r\n![PyPI](https://img.shields.io/badge/pip-installable-green.svg)\r\n\r\n**TerminalTelemetry** is a modern, cyberpunk-inspired terminal emulator and network telemetry platform built with PyQt6. It combines powerful SSH terminal capabilities with real-time network device monitoring in a sleek, themeable interface.\r\n\r\n---\r\n\r\n## \ud83d\udda5\ufe0f Platform Requirements\r\n\r\n**TerminalTelemetry is a native desktop application** - requires a graphical desktop environment (not for headless servers or web browsers).\r\n\r\n### Quick Installation\r\n\r\n#### Application Entry Points\r\nTerminalTelemetry provides two launcher commands:\r\n- **`termtel`** - Standard GUI launch (Windows: `termtel.exe`)\r\n- **`termtel-con`** - Launch with console output (for debugging and troubleshooting)\r\n\r\n---\r\n\r\n**Windows & macOS:**\r\n```bash\r\npip install TerminalTelemetry\r\ntermtel\r\n```\r\n\r\n**Linux & WSL2:**\r\n\r\n\u26a0\ufe0f **Linux requires Qt6 system libraries first.** Quick install for Ubuntu/Debian:\r\n```bash\r\nsudo apt install -y libqt6gui6t64 libqt6widgets6t64 libqt6core6t64 qt6-base-dev \\\r\n    libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \\\r\n    libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 \\\r\n    libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libx11-xcb1 libgl1 libglib2.0-0t64\r\n\r\npip install TerminalTelemetry\r\ntermtel\r\n```\r\n\r\n**\ud83d\udcd8 For other Linux distributions, WSL2 setup, and troubleshooting:** [Linux Installation Guide](README_Linux_Desktops.md)\r\n\r\n> **Looking for a web-based tool?** See [Velociterm](https://github.com/scottpeterman/velociterm) instead.\r\n\r\n---\r\n\r\n## \ud83d\ude80 Current Features\r\n\r\n### \ud83c\udfa8 **Advanced Theme System**\r\n- **24+ built-in themes** (Cyberpunk, Nord, Gruvbox, Doom, Borland, Amiga, CRT-Green/Amber, and more)\r\n- **Dynamic JSON-based themes** with hot-reload capability\r\n- **Live theme switching** across all components without restart\r\n- **Per-tab theme customization** via right-click context menu\r\n- **Individual terminal theming** - different theme for each tab\r\n- **Theme editor** with real-time preview and custom theme creation\r\n- **Consistent theming** across terminals, telemetry widgets, and UI components\r\n- **Tab management** with rename functionality and clean context menus\r\n\r\n### \ud83d\udda5\ufe0f **Multi-Session Terminal Environment**\r\n- **Tabbed SSH terminals** with xterm.js backend\r\n- **Session management** with YAML-based configuration\r\n- **Per-tab customization** - individual themes and renamed tab labels\r\n- **Context menu controls** - close, rename, and theme individual tabs\r\n- **Quick Connect** interface for rapid device access\r\n- **Cross-platform terminal support** (Windows, macOS, Linux)\r\n\r\n### \ud83d\udcca **Real-Time Network Telemetry**\r\n- **Live device monitoring** via SSH (no SNMP required)\r\n- **Multi-vendor support** (Cisco IOS/IOS-XE/NX-OS, Arista EOS, Linux)\r\n- **Real-time data collection**:\r\n  - System information (hostname, version, uptime, hardware)\r\n  - CPU and memory utilization with progress bars\r\n  - CDP/LLDP neighbor discovery\r\n  - ARP table monitoring\r\n  - Routing table with VRF support\r\n  - Live system log streaming\r\n- **Threaded data collection** keeps UI responsive\r\n- **Template-based parsing** with 200+ TextFSM templates\r\n- **CSV export** for all telemetry data tables\r\n\r\n### \ud83d\udd27 **Template System & Customization**\r\n- **Built-in template editor** with syntax highlighting\r\n- **200+ pre-configured TextFSM templates** for network devices\r\n- **Live template testing** against real device output\r\n- **Field mapping validation** with coverage reports\r\n- **Template debugging** with detailed error reporting\r\n- **Package resource management** - templates included in installation\r\n\r\n### \ud83d\udd12 **Enterprise Security**\r\n- **Encrypted credential storage** with Fernet (AES-128-CBC) + HMAC\r\n- **PBKDF2-HMAC-SHA256** key derivation (480,000 iterations)\r\n- \r\n- **SSH key authentication** \ud83c\udd95\r\n  - Automatic private key detection from `~/.ssh/`\r\n  - Support for RSA, ED25519, ECDSA, DSS key types\r\n  - Config-based key management (`~/.ssh_manager/keys.json`)\r\n  - Per-session key preferences with persistent settings\r\n- **Platform-specific secure storage** locations\r\n- **Machine-specific credential binding**\r\n- **Rate-limited authentication** prevents brute force\r\n- **Zero plaintext storage** of sensitive data\r\n\r\n![Screenshot](https://raw.githubusercontent.com/scottpeterman/terminaltelemetry/refs/heads/main/screenshots/v2/key_auth_sessions.png)\r\n### \ud83d\ude80 **Session Import Tools**\r\n- **NetBox Integration**:\r\n  - Import devices directly from NetBox instances\r\n  - Site-based organization and grouping\r\n  - Automatic credential mapping\r\n- **LogicMonitor Integration**:\r\n  - SDK-based device discovery\r\n  - Progress feedback and error handling\r\n  - SSL certificate validation support\r\n\r\n### \ud83e\uddf0 **Built-in Tools**\r\n- **Text Editor** with syntax highlighting\r\n- **Diff Tool** for configuration comparison\r\n- **Serial Terminal** for console connections\r\n- **Space Debris & Doom** - Demonstrates the framework's capability as a general-purpose tool delivery platform. The terminal application's architecture is designed to host any PyQt6 or web-based component, making it easy to extend with custom tools and utilities.\r\n\r\n---\r\n\r\n## \ud83c\udfd7\ufe0f Architecture Highlights\r\n\r\n### **SSH-Only Monitoring**\r\n- Works with any SSH-accessible device\r\n- No agent installation required on target devices\r\n- Leverages existing SSH credentials\r\n- Zero infrastructure - no monitoring servers or databases needed\r\n\r\n### **Template-Driven Parsing**\r\n- 200+ TextFSM templates packaged with the application\r\n- Live template editing with syntax highlighting and testing\r\n- Field normalization across different vendors\r\n- Package resource system - templates accessible in any environment\r\n- User-customizable - fix parsing issues yourself\r\n\r\n### **Extensible Desktop Platform**\r\n- Qt6-based UI with native performance\r\n- Threaded data collection prevents UI blocking\r\n- Signal-based communication between components\r\n- Modular widget system - easily add new tools and features\r\n- Package-aware resource management for pip installations\r\n- Tab-based interface can host any PyQt6 widget or web content\r\n\r\n---\r\n\r\n## \ud83c\udfaf Getting Started\r\n\r\n### Quick Start\r\n1. **Install via pip**: `pip install TerminalTelemetry`\r\n2. **Launch**: `termtel`\r\n3. **Create SSH sessions** via File \u2192 Open Sessions or use Quick Connect\r\n4. **Open Telemetry Dashboard** via Tools \u2192 Telemetry Dashboard\r\n5. **Connect to devices** and view real-time monitoring data\r\n6. **Customize themes** via View \u2192 Theme menu and Theme Editor\r\n\r\n**Note for Windows users:** After installation, you can create a desktop shortcut to `venv\\Scripts\\termtel.exe` for easier access.\r\n\r\n### First Device Connection\r\n1. Click **\"Quick Connect\"** in the bottom panel\r\n2. Enter device IP, credentials, and select platform (cisco_ios, arista_eos, etc.)\r\n3. Click **\"Connect\"** - terminal tab opens automatically\r\n4. Open **Tools \u2192 Telemetry Dashboard** to see real-time monitoring\r\n5. Use the **gear buttons** in widgets to customize TextFSM templates\r\n\r\n### Theme Customization\r\n- **Global themes**: Use View \u2192 Theme menu to change all components\r\n- **Individual tab themes**: Right-click any tab label \u2192 Terminal Theme \u2192 select theme\r\n- **Custom themes**: Use View \u2192 Theme \u2192 Theme Editor to create new themes\r\n- **Theme files**: Drop JSON theme files in the `~/.termtel/themes/` directory for instant availability\r\n\r\n### Template Customization\r\n1. Connect to a device and open telemetry dashboard\r\n2. Click the **\u2699\ufe0f gear button** on any widget (neighbors, routes, etc.)\r\n3. **Template editor opens** with current template and sample data\r\n4. **Edit template** using TextFSM syntax\r\n5. **Click \"RUN TEST\"** to validate against live device output\r\n6. **Save template** - changes apply immediately\r\n\r\n---\r\n\r\n## \ud83d\udce1 Supported Platforms\r\n\r\n### **Full Support (Complete Telemetry Dashboard)**\r\n- **Cisco IOS/IOS-XE**: System info, CDP neighbors, ARP table, routing table, CPU/memory utilization, system logs, VRF support\r\n\r\n### **Partial Support (Basic Telemetry)**\r\n- **Cisco NX-OS**: System info, CDP neighbors, ARP table, routing table, VRF support *(missing CPU/memory/logs)*\r\n- **Arista EOS**: System info, LLDP neighbors, ARP table, routing table, CPU/memory, temperature, logs, VRF support *(uses LLDP instead of CDP)*\r\n\r\n### **Basic Support (Limited Telemetry)**\r\n- **Aruba AOS-S/CX**: System info, LLDP neighbors, ARP table, routing table *(missing CPU/memory/logs)*\r\n- **HP ProCurve**: System info, LLDP neighbors, ARP table, routing table *(legacy switch support)*\r\n- **Juniper JunOS**: System info, LLDP neighbors, ARP table *(minimal support)*\r\n- **Linux**: System info, ARP table, routing table *(basic networking commands)*\r\n\r\n### **Template Coverage**\r\nBased on your actual TextFSM template library:\r\n- **200+ templates total** across all vendors\r\n- **Cisco IOS**: 100+ templates (most comprehensive)\r\n- **Arista EOS**: 45+ templates (good coverage)\r\n- **Cisco NX-OS**: 15+ templates (basic coverage)\r\n- **HP ProCurve**: 7 templates (legacy support)\r\n- **Juniper JunOS**: 3 templates (minimal)\r\n- **Linux**: Basic networking templates\r\n- **Aruba**: Basic switch templates\r\n\r\n---\r\n\r\n## \u26a0\ufe0f Known Issues & Limitations\r\n\r\n### **Known Platform Limitations**\r\n- **Cisco NX-OS**: Missing CPU/memory utilization and system log templates\r\n- **Aruba platforms**: No CPU/memory monitoring templates available  \r\n- **HP ProCurve**: Legacy platform with limited template coverage\r\n- **Juniper JunOS**: Minimal template support (contributions welcome)\r\n- **Linux**: Basic networking only (no system monitoring templates)\r\n\r\n### **Template Coverage Notes**\r\n- **Cisco IOS/IOS-XE** has the most comprehensive template coverage\r\n- **Arista EOS** has good coverage but uses LLDP instead of CDP for neighbors\r\n- Other platforms have basic connectivity but may lack advanced telemetry features\r\n- Missing templates can be created using the built-in template editor\r\n\r\n### **Current Application Limitations**\r\n- Single-device monitoring per telemetry tab (multi-device dashboard planned)\r\n- No historical data storage (trending features planned)\r\n- Template editor requires platform connection for live testing\r\n\r\n---\r\n\r\n## \ud83d\uddfa\ufe0f Planned Features & Roadmap\r\n\r\n### **Near Term (v0.16-0.17)**\r\n- Multi-device dashboards for network-wide monitoring\r\n- Historical data collection with basic trending graphs\r\n- Enhanced error handling and automatic reconnection\r\n- Template sharing and import/export functionality\r\n- Custom command execution with ad-hoc template creation\r\n\r\n### **Medium Term (v0.18-0.20)**\r\n- Network topology discovery and visualization\r\n- Configuration backup and change detection\r\n- Alert system for threshold monitoring\r\n- Plugin architecture for community extensions\r\n- REST API for external integrations\r\n\r\n### **Long Term (v1.0+)**\r\n- Distributed monitoring across multiple instances\r\n- Community template repository with automatic updates\r\n- Advanced analytics and machine learning insights\r\n- Mobile companion app for alerts and basic monitoring\r\n\r\n---\r\n\r\n## \ud83d\udd27 Technical Architecture\r\n\r\n### **Data Flow**\r\n```\r\nSSH Connection \u2192 Command Execution \u2192 TextFSM Parsing \u2192 Field Normalization \u2192 UI Display\r\n     \u2193                \u2193                    \u2193                   \u2193              \u2193\r\n netmiko         show commands      Package Templates    Platform Maps    PyQt6 Widgets\r\n```\r\n\r\n### **Key Components**\r\n- **Resource Manager**: Package-aware template and config loading\r\n- **Platform Config Manager**: JSON-driven platform definitions\r\n- **Threaded Telemetry Controller**: Non-blocking data collection\r\n- **Template Editor**: Live template editing and testing\r\n- **Theme System**: JSON-based UI customization\r\n- **Modular Tab System**: Extensible framework for hosting custom tools and widgets\r\n\r\n### **Security Architecture**\r\n- **Credential encryption** using Fernet with PBKDF2 key derivation\r\n- **SSH key authentication** with automatic key detection\r\n- **No network exposure** - purely SSH client connections\r\n- **Local data storage** with machine-specific encryption keys\r\n- **Memory-safe** credential handling with automatic cleanup\r\n\r\n---\r\n\r\n## \ud83e\udd1d Contributing\r\n\r\n### **Bug Reports**\r\nFound an issue? Please report it with:\r\n- Device platform and software version\r\n- Command output that failed to parse\r\n- Steps to reproduce the issue\r\n- Expected vs actual behavior\r\n\r\n### **Template Contributions**\r\n- Use the built-in template editor to create/fix templates\r\n- Test against multiple software versions when possible\r\n- Follow TextFSM best practices for field naming\r\n- Submit templates for new platforms or commands\r\n\r\n### **Development Setup**\r\n```bash\r\ngit clone https://github.com/scottpeterman/terminaltelemetry.git\r\ncd terminaltelemetry\r\npip install -e .\r\n# Edit code, templates, themes\r\npython -m pytest tests/  # Run tests\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udcf8 Screenshots\r\n\r\n### Main Interface with Cyberpunk Theme\r\n*Terminal sessions alongside real-time telemetry monitoring*\r\n\r\n### Multi-Vendor Telemetry Dashboard\r\n*Live monitoring of Cisco devices showing neighbors, ARP, routing, and system metrics*\r\n\r\n### Template Editor\r\n*Real-time template customization with live preview*\r\n\r\n---\r\n\r\n## \ud83d\udcc4 License\r\n\r\nTerminalTelemetry is licensed under the GPLv3 License. See the LICENSE file for details.\r\n\r\n---\r\n\r\n## \ud83d\ude4f Acknowledgments\r\n\r\n- Built on PyQt6 and the Python ecosystem\r\n- Network automation powered by netmiko and TextFSM\r\n- Terminal functionality via xterm.js\r\n- Template system inspired by ntc-templates\r\n- Packaging system using modern Python setuptools\r\n- Inspired by cyberpunk aesthetics and retro computing\r\n\r\n---\r\n\r\n## \ud83d\udcda Support & Community\r\n\r\n- **GitHub Issues**: Bug reports and feature requests\r\n- **GitHub Repository**: https://github.com/scottpeterman/terminaltelemetry\r\n- **Documentation**: Comprehensive guides and API reference  \r\n- **Template Library**: Community-contributed TextFSM templates\r\n\r\n---\r\n\r\n## \ud83d\udccb Version History\r\n\r\n### v0.15.0 (Current - October 2025)\r\n- \u2705 **SSH key authentication** - Passwordless authentication with auto-detection\r\n- \u2705 **24+ themes** - Expanded theme library with vintage and retro options\r\n- \u2705 **Package resource system** - pip installable with embedded templates\r\n- \u2705 **Template editor integration** - live editing and testing\r\n- \u2705 **CSV export functionality** for all telemetry tables\r\n- \u2705 **Enhanced platform support** with JSON configuration\r\n- \u2705 **Threaded telemetry collection** for responsive UI\r\n- \u2705 **Improved error handling** and connection management\r\n\r\n---\r\n\r\n*\"The best network monitoring tool is the one that gets out of your way and shows you what you need to know.\"*\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A PyQt6 terminal emulator with SSH and telemetry capabilities",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://github.com/scottpeterman/terminaltelemetry",
        "Source": "https://github.com/scottpeterman/terminaltelemetry"
    },
    "split_keywords": [
        "terminal",
        "ssh",
        "telemetry",
        "network",
        "monitoring",
        "pyqt6",
        "netmiko",
        "textfsm"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1a1ec4561ababbbe99e99fde6f747b5a28f75d2104f1a15f84e323b4240c857b",
                "md5": "3d26988f6972ed4fc4b392f43267b6fe",
                "sha256": "bad7d99b1d6b6b154832f2528cdf3810b30ed78bbd4a7ef76f4cb7a0346488ac"
            },
            "downloads": -1,
            "filename": "terminaltelemetry-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3d26988f6972ed4fc4b392f43267b6fe",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 23953403,
            "upload_time": "2025-10-29T02:34:34",
            "upload_time_iso_8601": "2025-10-29T02:34:34.721142Z",
            "url": "https://files.pythonhosted.org/packages/1a/1e/c4561ababbbe99e99fde6f747b5a28f75d2104f1a15f84e323b4240c857b/terminaltelemetry-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-29 02:34:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "scottpeterman",
    "github_project": "terminaltelemetry",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "backports.tarfile",
            "specs": [
                [
                    ">=",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "bcrypt",
            "specs": [
                [
                    ">=",
                    "4.2.1"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    ">=",
                    "2025.1.31"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    ">=",
                    "1.17.1"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    ">=",
                    "3.4.1"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    ">=",
                    "8.1.8"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    ">=",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    ">=",
                    "44.0.1"
                ]
            ]
        },
        {
            "name": "diff-match-patch",
            "specs": [
                [
                    ">=",
                    "20241021"
                ]
            ]
        },
        {
            "name": "docutils",
            "specs": [
                [
                    ">=",
                    "0.21.2"
                ]
            ]
        },
        {
            "name": "future",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "id",
            "specs": [
                [
                    ">=",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    ">=",
                    "3.10"
                ]
            ]
        },
        {
            "name": "importlib_metadata",
            "specs": [
                [
                    ">=",
                    "8.6.1"
                ]
            ]
        },
        {
            "name": "jaraco.classes",
            "specs": [
                [
                    ">=",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "jaraco.context",
            "specs": [
                [
                    ">=",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "jaraco.functools",
            "specs": [
                [
                    ">=",
                    "4.1.0"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    ">=",
                    "3.1.5"
                ]
            ]
        },
        {
            "name": "junos-eznc",
            "specs": [
                [
                    ">=",
                    "2.7.2"
                ]
            ]
        },
        {
            "name": "keyring",
            "specs": [
                [
                    ">=",
                    "25.6.0"
                ]
            ]
        },
        {
            "name": "logicmonitor-sdk",
            "specs": [
                [
                    ">=",
                    "3.0.222"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    ">=",
                    "5.3.1"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    ">=",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    ">=",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    ">=",
                    "10.6.0"
                ]
            ]
        },
        {
            "name": "napalm",
            "specs": [
                [
                    ">=",
                    "5.0.0"
                ]
            ]
        },
        {
            "name": "ncclient",
            "specs": [
                [
                    ">=",
                    "0.6.15"
                ]
            ]
        },
        {
            "name": "netaddr",
            "specs": [
                [
                    ">=",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "netmiko",
            "specs": [
                [
                    ">=",
                    "4.5.0"
                ]
            ]
        },
        {
            "name": "netutils",
            "specs": [
                [
                    ">=",
                    "1.12.0"
                ]
            ]
        },
        {
            "name": "nh3",
            "specs": [
                [
                    ">=",
                    "0.2.20"
                ]
            ]
        },
        {
            "name": "ntc_templates",
            "specs": [
                [
                    ">=",
                    "7.7.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    ">=",
                    "24.2"
                ]
            ]
        },
        {
            "name": "paramiko",
            "specs": [
                [
                    ">=",
                    "3.5.1"
                ]
            ]
        },
        {
            "name": "pkginfo",
            "specs": [
                [
                    ">=",
                    "1.12.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    ">=",
                    "2.22"
                ]
            ]
        },
        {
            "name": "pyeapi",
            "specs": [
                [
                    ">=",
                    "1.0.4"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    ">=",
                    "2.19.1"
                ]
            ]
        },
        {
            "name": "PyNaCl",
            "specs": [
                [
                    ">=",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "pynetbox",
            "specs": [
                [
                    ">=",
                    "7.4.1"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    ">=",
                    "3.2.1"
                ]
            ]
        },
        {
            "name": "PyQt6",
            "specs": [
                [
                    ">=",
                    "6.8.1"
                ]
            ]
        },
        {
            "name": "PyQt6-Charts",
            "specs": [
                [
                    ">=",
                    "6.8.0"
                ]
            ]
        },
        {
            "name": "PyQt6-Charts-Qt6",
            "specs": [
                [
                    ">=",
                    "6.8.2"
                ]
            ]
        },
        {
            "name": "PyQt6-Qt6",
            "specs": [
                [
                    ">=",
                    "6.8.2"
                ]
            ]
        },
        {
            "name": "PyQt6-WebEngine",
            "specs": [
                [
                    ">=",
                    "6.8.0"
                ]
            ]
        },
        {
            "name": "PyQt6-WebEngine-Qt6",
            "specs": [
                [
                    ">=",
                    "6.8.2"
                ]
            ]
        },
        {
            "name": "PyQt6_sip",
            "specs": [
                [
                    ">=",
                    "13.10.0"
                ]
            ]
        },
        {
            "name": "pyserial",
            "specs": [
                [
                    ">=",
                    "3.5"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    ">=",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "pywin32-ctypes",
            "specs": [
                [
                    ">=",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    ">=",
                    "6.0.2"
                ]
            ]
        },
        {
            "name": "qasync",
            "specs": [
                [
                    ">=",
                    "0.27.1"
                ]
            ]
        },
        {
            "name": "readme_renderer",
            "specs": [
                [
                    ">=",
                    "44.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.32.3"
                ]
            ]
        },
        {
            "name": "requests-toolbelt",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "rfc3986",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "13.9.4"
                ]
            ]
        },
        {
            "name": "ruamel.yaml",
            "specs": [
                [
                    ">=",
                    "0.18.10"
                ]
            ]
        },
        {
            "name": "ruamel.yaml.clib",
            "specs": [
                [
                    ">=",
                    "0.2.12"
                ]
            ]
        },
        {
            "name": "scp",
            "specs": [
                [
                    ">=",
                    "0.15.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "75.8.0"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    ">=",
                    "1.17.0"
                ]
            ]
        },
        {
            "name": "textfsm",
            "specs": [
                [
                    ">=",
                    "1.1.3"
                ]
            ]
        },
        {
            "name": "transitions",
            "specs": [
                [
                    ">=",
                    "0.9.2"
                ]
            ]
        },
        {
            "name": "ttp",
            "specs": [
                [
                    ">=",
                    "0.9.5"
                ]
            ]
        },
        {
            "name": "ttp-templates",
            "specs": [
                [
                    ">=",
                    "0.3.7"
                ]
            ]
        },
        {
            "name": "twine",
            "specs": [
                [
                    ">=",
                    "6.1.0"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    ">=",
                    "4.12.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    ">=",
                    "2.3.0"
                ]
            ]
        },
        {
            "name": "yamlordereddictloader",
            "specs": [
                [
                    ">=",
                    "0.4.2"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    ">=",
                    "3.21.0"
                ]
            ]
        }
    ],
    "lcname": "terminaltelemetry"
}
        
Elapsed time: 4.37534s