Python SDK for NanoLink monitoring system
Project description
NanoLink Python SDK
Python SDK for NanoLink monitoring system.
Installation
pip install kkape-nanolink
Or install from source:
cd sdk/python
pip install -e .
Quick Start
import asyncio
from nanolink import NanoLinkServer, ServerConfig, Metrics, AgentConnection
async def main():
# Create server
server = NanoLinkServer(ServerConfig(port=9100))
# Handle agent connections
@server.on_agent_connect
async def handle_connect(agent: AgentConnection):
print(f"Agent connected: {agent.hostname}")
print(f" OS: {agent.os}/{agent.arch}")
print(f" Version: {agent.version}")
# Handle agent disconnections
@server.on_agent_disconnect
async def handle_disconnect(agent: AgentConnection):
print(f"Agent disconnected: {agent.hostname}")
# Handle metrics
@server.on_metrics
async def handle_metrics(metrics: Metrics):
if metrics.cpu:
print(f"CPU: {metrics.cpu.usage_percent:.1f}%")
if metrics.cpu.model:
print(f" Model: {metrics.cpu.model}")
if metrics.memory:
print(f"Memory: {metrics.memory.usage_percent:.1f}%")
for gpu in metrics.gpus:
print(f"GPU: {gpu.name} - {gpu.usage_percent:.1f}%")
# Start server
await server.run_forever()
if __name__ == "__main__":
asyncio.run(main())
Token Validation
from nanolink import NanoLinkServer, ServerConfig, ValidationResult
def my_token_validator(token: str) -> ValidationResult:
if token == "admin-token":
return ValidationResult(valid=True, permission_level=3)
elif token == "read-token":
return ValidationResult(valid=True, permission_level=0)
else:
return ValidationResult(valid=False, error_message="Invalid token")
config = ServerConfig(
port=9100,
token_validator=my_token_validator,
)
server = NanoLinkServer(config)
Sending Commands
from nanolink import Command
# Get agent
agent = server.get_agent_by_hostname("my-server")
# List processes
result = await agent.send_command(Command.process_list())
print(result.output)
# Restart a service
result = await agent.send_command(Command.service_restart("nginx"))
if result.success:
print("Service restarted successfully")
else:
print(f"Error: {result.error}")
# Execute shell command (requires SuperToken)
result = await agent.send_command(
Command.shell_execute("df -h", super_token="your-super-token")
)
Permission Levels
| Level | Name | Allowed Operations |
|---|---|---|
| 0 | READ_ONLY | View metrics, process list, logs |
| 1 | BASIC_WRITE | Download files, clear temp files |
| 2 | SERVICE_CONTROL | Restart services, Docker containers, kill processes |
| 3 | SYSTEM_ADMIN | System reboot, execute shell commands |
TLS Configuration
config = ServerConfig(
port=9100,
tls_cert_path="/path/to/cert.pem",
tls_key_path="/path/to/key.pem",
)
server = NanoLinkServer(config)
Development
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check .
black --check .
mypy .
License
Apache 2.0 License - see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
kkape_nanolink-0.3.4.tar.gz
(30.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kkape_nanolink-0.3.4.tar.gz.
File metadata
- Download URL: kkape_nanolink-0.3.4.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e307c90d1331d67e306a9cac27f0646b8a90b43a7cede545f1897f5f3004e12
|
|
| MD5 |
dd468371a1e0e7f24a93ec7a352139b0
|
|
| BLAKE2b-256 |
ea0ecc3aedc97f07d364a2d7eebcb71bc4b4598182c78b58ee45a81221c65d13
|
File details
Details for the file kkape_nanolink-0.3.4-py3-none-any.whl.
File metadata
- Download URL: kkape_nanolink-0.3.4-py3-none-any.whl
- Upload date:
- Size: 34.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cb4bb0063e40464dd6f6ddcb9bc2057e51b7c006faa6f1bce46d23552f10310
|
|
| MD5 |
c261d1e8a3d4109061b587fa82b5a212
|
|
| BLAKE2b-256 |
66a2a7db79460a4d89ea944df7e99fb68e27f442d65d734875e1d3983d1e5410
|