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.4.4.tar.gz
(35.7 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.4.4.tar.gz.
File metadata
- Download URL: kkape_nanolink-0.4.4.tar.gz
- Upload date:
- Size: 35.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a9e46d15857935a0e9942df96439c022169251cbf250731fcda7f0467d3b7e5
|
|
| MD5 |
e6151df0f9f770dd3dd5b02aa3774c1e
|
|
| BLAKE2b-256 |
883e8a7be4df49cd1bdf59622fbb4c7fff79ea9c30065a2824dc5f6e96f4b144
|
File details
Details for the file kkape_nanolink-0.4.4-py3-none-any.whl.
File metadata
- Download URL: kkape_nanolink-0.4.4-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd15f63655d4528be07a139225c28d1641af26627e8192262edfc26566314151
|
|
| MD5 |
bfdc6126d327e11a49fffc4ec641e6e3
|
|
| BLAKE2b-256 |
e0ddf8fc38acd916404cda90d7edba318ef7d6e6b946b280faf0b09ce310c49d
|