# pyRetroTerm

A modern terminal emulator built with PyQt6, featuring dynamic themes, real-time telemetry, and advanced terminal capabilities.



## Features
### Core Features
#### Telemetry Interface Features
- Modern terminal emulator with three-pane adaptive layout:
- Left: Session management and device navigation
- Center: Terminal interface with full emulation
- Right: Device telemetry and status panels
- Dynamic theme system with live preview and hot-reload
- Multi-tabbed terminal support with session persistence
- Quick connect functionality for rapid device access
- Session search and filtering capabilities
- Adjustable layouts with resizable panes
#### Device Monitoring
- Real-time interface status monitoring with UP/DOWN indicators
- Live system resource tracking (CPU, Memory, Temperature)
- Environmental monitoring dashboard
- Automatic neighbor discovery via LLDP
- Debug logging with timestamped events
- Default route and network topology visualization
#### Terminal Capabilities
- Full SSH terminal emulation
- Secure credential management with encryption
- Multiple device type support (Linux, Cisco IOS, Arista EOS, etc.)
- Sessions organization and persistence
- Customizable text rendering and display options
- Zoom controls for accessibility
### Dynamic Theming System
- Theme configuration via external JSON files for easy customization
- Rich set of included themes: Cyberpunk, CRT (Amber/Green), Dark/Light, Borland, Gruvbox, Nord, and more
- Simple theme creation and modification without code changes
- Real-time theme switching and reloading
### Real-Time Telemetry
- Live device monitoring and statistics
- Interface status tracking
- Environmental monitoring (CPU, Memory, Temperature, Power, Fans)
- Real-time device information updates
- LLDP neighbor discovery
### Integration Capabilities
#### Netbox Integration
- Bulk export of device configurations, organizing folders by site
- Preserves device metadata (model, serial, vendor info)
- SSL verification options for internal deployments
- Progress tracking for large deployments
#### LogicMonitor Integration
- Automated device import from LogicMonitor monitoring platform
- Geographic site-based organization
- Secure API key authentication
- Support for custom SSL certificates (e.g., Zscaler)
- Intelligent property mapping (model, serial, version)
- Progress tracking and status updates
- Configurable batch processing
- Persistence to YAML file for sessions use
#### Additional Integration Features
- Portable session management with YAML configuration
- Plugin system for extensibility
- Automated credential management
- Bulk import/export capabilities
## Installation
### Via pip
```bash
pip install pyretroterm
pyretroterm
```
### From source
```bash
git clone https://github.com/scottpeterman/pyretroterm.git
cd pyretroterm
pip install -r requirements.txt
python -m pyretroterm.pyretroterm
```
## Quick Start
1. Launch the application:
```bash
pyretroterm
```
2. For console mode:
```bash
pyretroterm-con
```
3. Install theme pack (optional but recommended):
```bash
# Create themes directory in your installation
mkdir themes
# Download and extract theme pack
curl -LO https://raw.githubusercontent.com/scottpeterman/pyretroterm/main/themes.zip
unzip themes.zip -d themes/
```
4. On first launch:
- Set up a master password for credential management
- Configure your session settings
- Choose your preferred theme from the expanded theme collection
- If themes don't appear, ensure theme JSON files are in the 'themes' directory
## Interface Overview
### Main Window Layout
The interface is divided into three main sections:
- **Left Panel**: Session management, search, and quick connect
- **Center Panel**: Active terminal session with full terminal emulation
- **Right Panel**: Device telemetry, controls, and monitoring
### Device Information Display
- Real-time device status and information
- Interface status monitoring with visual indicators
- Environmental metrics (CPU, Memory, Temperature, etc.)
- LLDP neighbor discovery and topology
- Routing table and network information
### Theme System
The application includes several professionally designed themes:
- Cyberpunk (neon blue accents)
- CRT Amber/Green (classic terminal looks)
- Dark/Light modes for different environments
- Borland (nostalgic IDE style)
- Modern themes (Nord, Gruvbox, Solarized)
Each theme provides consistent styling across all panels and includes:
- Custom border designs and panel layouts
- Color-coded status indicators
- Readable typography and contrast ratios
- Live preview and hot-reload capability
## Device Support
### Supported Network Operating Systems
- Cisco IOS
- Arista EOS
- Cisco NXOS (SSH)
- Juniper JUNOS
- Linux/Unix Systems
### Telemetry Support
Each platform supports different levels of telemetry collection:
#### Full SSH Based Telemetry Support
- Interface status monitoring
- CPU and memory statistics
- Environmental monitoring (temperature, power, fans)
- LLDP neighbor discovery
- Routing table information
- Hardware inventory
- System information
#### Platform-Specific Capabilities
- **Linux/Unix**:
- Dynamic hardware detection
- Detailed CPU core monitoring
- Memory usage with buffer/cache analysis
- VMware environment detection
- Temperature sensors with thresholds
- Power supply status
- Fan speed monitoring
- Hardware platform detection
- Enhanced security with sudo support
- **Network Devices** (IOS, EOS, NXOS, JUNOS):
- Interface statistics
- Protocol states
- Hardware health monitoring
- Power and cooling status
- Configuration analysis
- Routing protocol information
## Extensibility
### Driver Architecture
pyRetroTerm features a modular driver architecture that allows easy addition of new device support:
```python
class CustomDriver:
def __init__(self, hostname, username, password, optional_args=None):
self.hostname = hostname
self.username = username
self.password = password
self.optional_args = optional_args or {}
def get_facts(self):
# Implement device fact collection
pass
def get_environment(self):
# Implement environmental monitoring
pass
def get_interfaces(self):
# Implement interface status collection
pass
```
### Adding New Device Support
1. Create a new driver class implementing the standard interface
2. Add device-specific command parsing
3. Implement telemetry collection methods
4. Register the driver with the platform
### Example: Custom Linux Driver Features
- Robust error handling and recovery
- Flexible command execution
- Privilege escalation management
- Dynamic capability detection
- Comprehensive hardware discovery
- Detailed system information collection
## Configuration
### Integration Configuration
#### Netbox Setup
1. Obtain your Netbox API token from your Netbox instance
2. Configure the connection:
- Enter your Netbox URL (e.g., "http://netbox.yourcompany.com")
- Input your API token
- Optionally disable SSL verification for internal deployments
3. Click "Download" to start the import process
4. Save the generated YAML file
#### LogicMonitor Setup
1. Gather your LogicMonitor credentials:
- Company name
- Access ID
- Access Key
2. Optional: Configure SSL certificate path for Zscaler
3. Run the import process
4. Save the generated YAML configuration
### Sessions
Sessions are configured via YAML files. Example configuration:
```yaml
- folder_name: Example
sessions:
- DeviceType: linux
Model: vm
SerialNumber: ''
SoftwareVersion: ''
Vendor: ubuntu
credsid: '1'
display_name: T1000
host: 10.0.0.104
port: '22'
```
### Custom Themes
Themes are defined in JSON files for easy customization and can be installed from the themes pack:
1. Download the official theme pack:
```bash
curl -LO https://raw.githubusercontent.com/scottpeterman/pyretroterm/main/themes.zip
```
2. Extract to your themes directory:
```bash
unzip themes.zip -d themes/
```
3. Themes folder is scanned at startup (or via UI) and dynamically loaded
4. Create new themes by adding JSON files to the themes directory
Example theme structure:
```json
{
"name": "my-custom-theme",
"colors": {
"background": "#1e1e1e",
"text": "#ffffff",
"primary": "#0affff",
"secondary": "#888888",
"border": "#444444"
}
}
```
## Security Features
- Protection of stored secrets
- PBKDF2-HMAC-SHA256 key derivation (480,000 iterations)
- Fernet (AES-128-CBC) encryption with HMAC authentication
- Platform-specific secure
Raw data
{
"_id": null,
"home_page": "https://github.com/scottpeterman/pyretroterm",
"name": "pyRetroTerm",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "terminal, ssh, network, automation, telemetry, monitoring, pyqt6",
"author": "Scott Peterman",
"author_email": "scottpeterman@gmail.com",
"download_url": null,
"platform": null,
"description": "# pyRetroTerm\r\n\r\n\r\nA modern terminal emulator built with PyQt6, featuring dynamic themes, real-time telemetry, and advanced terminal capabilities.\r\n\r\n\r\n\r\n\r\n\r\n## Features\r\n\r\n### Core Features\r\n\r\n#### Telemetry Interface Features\r\n- Modern terminal emulator with three-pane adaptive layout:\r\n - Left: Session management and device navigation\r\n - Center: Terminal interface with full emulation\r\n - Right: Device telemetry and status panels\r\n- Dynamic theme system with live preview and hot-reload\r\n- Multi-tabbed terminal support with session persistence\r\n- Quick connect functionality for rapid device access\r\n- Session search and filtering capabilities\r\n- Adjustable layouts with resizable panes\r\n\r\n#### Device Monitoring\r\n- Real-time interface status monitoring with UP/DOWN indicators\r\n- Live system resource tracking (CPU, Memory, Temperature)\r\n- Environmental monitoring dashboard\r\n- Automatic neighbor discovery via LLDP\r\n- Debug logging with timestamped events\r\n- Default route and network topology visualization\r\n\r\n#### Terminal Capabilities\r\n- Full SSH terminal emulation\r\n- Secure credential management with encryption\r\n- Multiple device type support (Linux, Cisco IOS, Arista EOS, etc.)\r\n- Sessions organization and persistence\r\n- Customizable text rendering and display options\r\n- Zoom controls for accessibility\r\n\r\n### Dynamic Theming System\r\n- Theme configuration via external JSON files for easy customization\r\n- Rich set of included themes: Cyberpunk, CRT (Amber/Green), Dark/Light, Borland, Gruvbox, Nord, and more\r\n- Simple theme creation and modification without code changes\r\n- Real-time theme switching and reloading\r\n\r\n### Real-Time Telemetry\r\n- Live device monitoring and statistics\r\n- Interface status tracking\r\n- Environmental monitoring (CPU, Memory, Temperature, Power, Fans)\r\n- Real-time device information updates\r\n- LLDP neighbor discovery\r\n\r\n### Integration Capabilities\r\n\r\n#### Netbox Integration\r\n\r\n- Bulk export of device configurations, organizing folders by site\r\n- Preserves device metadata (model, serial, vendor info)\r\n- SSL verification options for internal deployments\r\n- Progress tracking for large deployments\r\n\r\n#### LogicMonitor Integration\r\n- Automated device import from LogicMonitor monitoring platform\r\n- Geographic site-based organization\r\n- Secure API key authentication\r\n- Support for custom SSL certificates (e.g., Zscaler)\r\n- Intelligent property mapping (model, serial, version)\r\n- Progress tracking and status updates\r\n- Configurable batch processing\r\n- Persistence to YAML file for sessions use\r\n\r\n#### Additional Integration Features\r\n- Portable session management with YAML configuration\r\n- Plugin system for extensibility\r\n- Automated credential management\r\n- Bulk import/export capabilities\r\n\r\n## Installation\r\n\r\n### Via pip\r\n\r\n```bash\r\npip install pyretroterm\r\npyretroterm\r\n```\r\n\r\n### From source\r\n\r\n```bash\r\ngit clone https://github.com/scottpeterman/pyretroterm.git\r\ncd pyretroterm\r\npip install -r requirements.txt\r\npython -m pyretroterm.pyretroterm\r\n```\r\n\r\n## Quick Start\r\n\r\n1. Launch the application:\r\n```bash\r\npyretroterm\r\n```\r\n\r\n2. For console mode:\r\n```bash\r\npyretroterm-con\r\n```\r\n\r\n3. Install theme pack (optional but recommended):\r\n ```bash\r\n # Create themes directory in your installation\r\n mkdir themes\r\n \r\n # Download and extract theme pack\r\n curl -LO https://raw.githubusercontent.com/scottpeterman/pyretroterm/main/themes.zip\r\n unzip themes.zip -d themes/\r\n ```\r\n \r\n4. On first launch:\r\n - Set up a master password for credential management\r\n - Configure your session settings\r\n - Choose your preferred theme from the expanded theme collection\r\n - If themes don't appear, ensure theme JSON files are in the 'themes' directory\r\n\r\n## Interface Overview\r\n\r\n### Main Window Layout\r\nThe interface is divided into three main sections:\r\n- **Left Panel**: Session management, search, and quick connect\r\n- **Center Panel**: Active terminal session with full terminal emulation\r\n- **Right Panel**: Device telemetry, controls, and monitoring\r\n\r\n### Device Information Display\r\n- Real-time device status and information\r\n- Interface status monitoring with visual indicators\r\n- Environmental metrics (CPU, Memory, Temperature, etc.)\r\n- LLDP neighbor discovery and topology\r\n- Routing table and network information\r\n\r\n### Theme System\r\nThe application includes several professionally designed themes:\r\n- Cyberpunk (neon blue accents)\r\n- CRT Amber/Green (classic terminal looks)\r\n- Dark/Light modes for different environments\r\n- Borland (nostalgic IDE style)\r\n- Modern themes (Nord, Gruvbox, Solarized)\r\nEach theme provides consistent styling across all panels and includes:\r\n- Custom border designs and panel layouts\r\n- Color-coded status indicators\r\n- Readable typography and contrast ratios\r\n- Live preview and hot-reload capability\r\n\r\n## Device Support\r\n\r\n### Supported Network Operating Systems\r\n- Cisco IOS\r\n- Arista EOS\r\n- Cisco NXOS (SSH)\r\n- Juniper JUNOS\r\n- Linux/Unix Systems\r\n\r\n### Telemetry Support\r\nEach platform supports different levels of telemetry collection:\r\n\r\n#### Full SSH Based Telemetry Support\r\n- Interface status monitoring\r\n- CPU and memory statistics\r\n- Environmental monitoring (temperature, power, fans)\r\n- LLDP neighbor discovery\r\n- Routing table information\r\n- Hardware inventory\r\n- System information\r\n\r\n#### Platform-Specific Capabilities\r\n- **Linux/Unix**:\r\n - Dynamic hardware detection\r\n - Detailed CPU core monitoring\r\n - Memory usage with buffer/cache analysis\r\n - VMware environment detection\r\n - Temperature sensors with thresholds\r\n - Power supply status\r\n - Fan speed monitoring\r\n - Hardware platform detection\r\n - Enhanced security with sudo support\r\n \r\n- **Network Devices** (IOS, EOS, NXOS, JUNOS):\r\n - Interface statistics\r\n - Protocol states\r\n - Hardware health monitoring\r\n - Power and cooling status\r\n - Configuration analysis\r\n - Routing protocol information\r\n\r\n## Extensibility\r\n\r\n### Driver Architecture\r\npyRetroTerm features a modular driver architecture that allows easy addition of new device support:\r\n\r\n```python\r\nclass CustomDriver:\r\n def __init__(self, hostname, username, password, optional_args=None):\r\n self.hostname = hostname\r\n self.username = username\r\n self.password = password\r\n self.optional_args = optional_args or {}\r\n \r\n def get_facts(self):\r\n # Implement device fact collection\r\n pass\r\n \r\n def get_environment(self):\r\n # Implement environmental monitoring\r\n pass\r\n \r\n def get_interfaces(self):\r\n # Implement interface status collection\r\n pass\r\n```\r\n\r\n### Adding New Device Support\r\n1. Create a new driver class implementing the standard interface\r\n2. Add device-specific command parsing\r\n3. Implement telemetry collection methods\r\n4. Register the driver with the platform\r\n\r\n### Example: Custom Linux Driver Features\r\n- Robust error handling and recovery\r\n- Flexible command execution\r\n- Privilege escalation management\r\n- Dynamic capability detection\r\n- Comprehensive hardware discovery\r\n- Detailed system information collection\r\n\r\n## Configuration\r\n\r\n### Integration Configuration\r\n\r\n#### Netbox Setup\r\n1. Obtain your Netbox API token from your Netbox instance\r\n2. Configure the connection:\r\n - Enter your Netbox URL (e.g., \"http://netbox.yourcompany.com\")\r\n - Input your API token\r\n - Optionally disable SSL verification for internal deployments\r\n3. Click \"Download\" to start the import process\r\n4. Save the generated YAML file\r\n\r\n#### LogicMonitor Setup\r\n1. Gather your LogicMonitor credentials:\r\n - Company name\r\n - Access ID\r\n - Access Key\r\n2. Optional: Configure SSL certificate path for Zscaler\r\n3. Run the import process\r\n4. Save the generated YAML configuration\r\n\r\n### Sessions\r\nSessions are configured via YAML files. Example configuration:\r\n\r\n```yaml\r\n- folder_name: Example\r\n sessions:\r\n - DeviceType: linux\r\n Model: vm \r\n SerialNumber: ''\r\n SoftwareVersion: ''\r\n Vendor: ubuntu\r\n credsid: '1'\r\n display_name: T1000\r\n host: 10.0.0.104\r\n port: '22'\r\n```\r\n\r\n### Custom Themes\r\nThemes are defined in JSON files for easy customization and can be installed from the themes pack:\r\n\r\n1. Download the official theme pack:\r\n ```bash\r\n curl -LO https://raw.githubusercontent.com/scottpeterman/pyretroterm/main/themes.zip\r\n ```\r\n\r\n2. Extract to your themes directory:\r\n ```bash\r\n unzip themes.zip -d themes/\r\n ```\r\n3. Themes folder is scanned at startup (or via UI) and dynamically loaded\r\n\r\n4. Create new themes by adding JSON files to the themes directory\r\n\r\nExample theme structure:\r\n```json\r\n{\r\n \"name\": \"my-custom-theme\",\r\n \"colors\": {\r\n \"background\": \"#1e1e1e\",\r\n \"text\": \"#ffffff\",\r\n \"primary\": \"#0affff\",\r\n \"secondary\": \"#888888\",\r\n \"border\": \"#444444\"\r\n }\r\n}\r\n```\r\n\r\n## Security Features\r\n- Protection of stored secrets\r\n- PBKDF2-HMAC-SHA256 key derivation (480,000 iterations)\r\n- Fernet (AES-128-CBC) encryption with HMAC authentication\r\n- Platform-specific secure\r\n",
"bugtrack_url": null,
"license": null,
"summary": "pyRetroTerm - A PyQt6 Terminal Emulator with Real-time Telemetry and Retro Themes",
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/scottpeterman/pyretroterm"
},
"split_keywords": [
"terminal",
" ssh",
" network",
" automation",
" telemetry",
" monitoring",
" pyqt6"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "151c335f440162d4e9074b844baaa156c94f8873e40a2ce745789f2d071322f4",
"md5": "0d561d58f76ff1e5f9f6ca0a3f5512fe",
"sha256": "76575bc010b8b381f65e98d1a92bdf932260bb176b00c3553861b0f2a8562b61"
},
"downloads": -1,
"filename": "pyRetroTerm-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0d561d58f76ff1e5f9f6ca0a3f5512fe",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 23430231,
"upload_time": "2025-02-17T02:32:49",
"upload_time_iso_8601": "2025-02-17T02:32:49.625830Z",
"url": "https://files.pythonhosted.org/packages/15/1c/335f440162d4e9074b844baaa156c94f8873e40a2ce745789f2d071322f4/pyRetroTerm-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-17 02:32:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "scottpeterman",
"github_project": "pyretroterm",
"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": [
[
">=",
"2024.12.14"
]
]
},
{
"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.0"
]
]
},
{
"name": "docutils",
"specs": [
[
">=",
"0.21.2"
]
]
},
{
"name": "idna",
"specs": [
[
">=",
"3.10"
]
]
},
{
"name": "importlib_metadata",
"specs": [
[
">=",
"8.5.0"
]
]
},
{
"name": "jaraco.classes",
"specs": [
[
">=",
"3.4.0"
]
]
},
{
"name": "jaraco.context",
"specs": [
[
">=",
"6.0.1"
]
]
},
{
"name": "jaraco.functools",
"specs": [
[
">=",
"4.1.0"
]
]
},
{
"name": "keyring",
"specs": [
[
">=",
"25.6.0"
]
]
},
{
"name": "logicmonitor-sdk",
"specs": [
[
">=",
"3.0.222"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
">=",
"3.0.0"
]
]
},
{
"name": "mdurl",
"specs": [
[
">=",
"0.1.2"
]
]
},
{
"name": "more-itertools",
"specs": [
[
">=",
"10.6.0"
]
]
},
{
"name": "napalm",
"specs": [
[
">=",
"5.0.0"
]
]
},
{
"name": "nh3",
"specs": [
[
">=",
"0.2.20"
]
]
},
{
"name": "packaging",
"specs": [
[
">=",
"24.2"
]
]
},
{
"name": "paramiko",
"specs": [
[
">=",
"3.5.0"
]
]
},
{
"name": "pkginfo",
"specs": [
[
">=",
"1.12.0"
]
]
},
{
"name": "pycparser",
"specs": [
[
">=",
"2.22"
]
]
},
{
"name": "Pygments",
"specs": [
[
">=",
"2.19.1"
]
]
},
{
"name": "PyNaCl",
"specs": [
[
">=",
"1.5.0"
]
]
},
{
"name": "pynetbox",
"specs": [
[
">=",
"7.4.1"
]
]
},
{
"name": "PyQt6",
"specs": [
[
">=",
"6.8.0"
]
]
},
{
"name": "PyQt6-Charts",
"specs": [
[
">=",
"6.8.0"
]
]
},
{
"name": "PyQt6-Charts-Qt6",
"specs": [
[
">=",
"6.8.1"
]
]
},
{
"name": "PyQt6-Qt6",
"specs": [
[
">=",
"6.8.1"
]
]
},
{
"name": "PyQt6-WebEngine",
"specs": [
[
">=",
"6.8.0"
]
]
},
{
"name": "PyQt6-WebEngine-Qt6",
"specs": [
[
">=",
"6.8.1"
]
]
},
{
"name": "PyQt6_sip",
"specs": [
[
">=",
"13.9.1"
]
]
},
{
"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": "six",
"specs": [
[
">=",
"1.17.0"
]
]
},
{
"name": "twine",
"specs": [
[
">=",
"6.0.1"
]
]
},
{
"name": "typing_extensions",
"specs": [
[
">=",
"4.12.2"
]
]
},
{
"name": "urllib3",
"specs": [
[
">=",
"2.3.0"
]
]
},
{
"name": "zipp",
"specs": [
[
">=",
"3.21.0"
]
]
}
],
"lcname": "pyretroterm"
}