Add project scaffolding and documentation
Add .env.example with configuration for database, Redis, security, SMTP, workers, and plugins. Add .gitignore for Python, Node.js, Next.js, Docker volumes, and IDE files. Add MIT License. Update README.md with feature overview, quick start guide, architecture description, plugin system documentation, security details, backup/restore instructions, and developer setup. Add Alembic configuration files and placeholder directories for API, web, worker, and plugin components
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"id": "adguard-home",
|
||||
"name": "AdGuard Home",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "DNS statistics, blocked queries, top clients and domains.",
|
||||
"author": "NexaDash",
|
||||
"category": "Network",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"title": "Username"
|
||||
},
|
||||
"password": {
|
||||
"type": "string",
|
||||
"title": "Password",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["username", "password"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "dns-overview",
|
||||
"name": "DNS Overview",
|
||||
"description": "Queries, blocked and block rate",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "block-rate-chart",
|
||||
"name": "Block Rate Chart",
|
||||
"description": "Blocked queries over time",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "top-clients",
|
||||
"name": "Top Clients",
|
||||
"description": "Most active clients",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "top-blocked-domains",
|
||||
"name": "Top Blocked Domains",
|
||||
"description": "Most blocked domains",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"id": "authentik",
|
||||
"name": "authentik",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Users, applications, outposts and login events.",
|
||||
"author": "NexaDash",
|
||||
"category": "Security",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_token": {
|
||||
"type": "string",
|
||||
"title": "API Token",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["api_token"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "auth-overview",
|
||||
"name": "Auth Overview",
|
||||
"description": "Users and applications summary",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "recent-logins",
|
||||
"name": "Recent Logins",
|
||||
"description": "Latest login events",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "app-status",
|
||||
"name": "App Status",
|
||||
"description": "Application health overview",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"id": "beszel",
|
||||
"name": "Beszel",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "System metrics, CPU/RAM/Disk/Network and alerts.",
|
||||
"author": "NexaDash",
|
||||
"category": "Monitoring",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_token": {
|
||||
"type": "string",
|
||||
"title": "API Token",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["api_token"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "system-overview",
|
||||
"name": "System Overview",
|
||||
"description": "List of monitored systems",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "resource-chart",
|
||||
"name": "Resource Chart",
|
||||
"description": "CPU/RAM/Disk/Network chart",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"system_id": {
|
||||
"type": "string",
|
||||
"title": "System ID"
|
||||
}
|
||||
},
|
||||
"required": ["system_id"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "host-cards",
|
||||
"name": "Host Cards",
|
||||
"description": "Cards per host",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"id": "example-plugin",
|
||||
"name": "Example Plugin",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "A minimal example plugin for NexaDash developers.",
|
||||
"author": "NexaDash",
|
||||
"category": "Developer",
|
||||
"permissions": ["network:outbound"],
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"greeting": {
|
||||
"type": "string",
|
||||
"title": "Greeting",
|
||||
"default": "Hello from Example Plugin"
|
||||
}
|
||||
}
|
||||
},
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_key": {
|
||||
"type": "string",
|
||||
"title": "API Key",
|
||||
"format": "password"
|
||||
}
|
||||
}
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "example-card",
|
||||
"name": "Example Card",
|
||||
"description": "Displays a greeting and current timestamp",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"showTimestamp": {
|
||||
"type": "boolean",
|
||||
"title": "Show timestamp",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"hasFrontend": true,
|
||||
"apiRoutes": []
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"id": "generic-http",
|
||||
"name": "Generic HTTP",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "HTTP status checks, JSON API polling, custom headers and auth.",
|
||||
"author": "NexaDash",
|
||||
"category": "Generic",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"bearer_token": {
|
||||
"type": "string",
|
||||
"title": "Bearer Token",
|
||||
"format": "password"
|
||||
},
|
||||
"api_key": {
|
||||
"type": "string",
|
||||
"title": "API Key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "http-status",
|
||||
"name": "HTTP Status",
|
||||
"description": "Status code and latency check",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 1,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"title": "URL",
|
||||
"format": "uri"
|
||||
},
|
||||
"method": {
|
||||
"type": "string",
|
||||
"title": "Method",
|
||||
"enum": ["GET", "POST"],
|
||||
"default": "GET"
|
||||
},
|
||||
"expected_status": {
|
||||
"type": "integer",
|
||||
"title": "Expected Status",
|
||||
"default": 200
|
||||
},
|
||||
"headers": {
|
||||
"type": "object",
|
||||
"title": "Headers"
|
||||
},
|
||||
"json_path": {
|
||||
"type": "string",
|
||||
"title": "JSON Path"
|
||||
},
|
||||
"regex": {
|
||||
"type": "string",
|
||||
"title": "Regex"
|
||||
}
|
||||
},
|
||||
"required": ["url"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"id": "home-assistant",
|
||||
"name": "Home Assistant",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Entity status, sensors, automations and device overview.",
|
||||
"author": "NexaDash",
|
||||
"category": "Smart Home",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"long_lived_token": {
|
||||
"type": "string",
|
||||
"title": "Long-Lived Access Token",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["long_lived_token"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "entity-card",
|
||||
"name": "Entity Card",
|
||||
"description": "Display a single entity",
|
||||
"defaultWidth": 1,
|
||||
"defaultHeight": 1,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"title": "Entity ID"
|
||||
}
|
||||
},
|
||||
"required": ["entity_id"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sensor-chart",
|
||||
"name": "Sensor Chart",
|
||||
"description": "History chart for a sensor",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"title": "Entity ID"
|
||||
}
|
||||
},
|
||||
"required": ["entity_id"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "home-status",
|
||||
"name": "Home Status",
|
||||
"description": "Overview of important entities",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "automation-status",
|
||||
"name": "Automation Status",
|
||||
"description": "Recent automation runs",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"id": "jellyfin",
|
||||
"name": "Jellyfin",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Server status, active streams, users and library stats.",
|
||||
"author": "NexaDash",
|
||||
"category": "Media",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_key": {
|
||||
"type": "string",
|
||||
"title": "API Key",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["api_key"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "jellyfin-overview",
|
||||
"name": "Jellyfin Overview",
|
||||
"description": "Server info and user count",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "active-streams",
|
||||
"name": "Active Streams",
|
||||
"description": "Currently playing sessions",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "library-card",
|
||||
"name": "Library Card",
|
||||
"description": "Library statistics",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"id": "proxmox-backup-server",
|
||||
"name": "Proxmox Backup Server",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Monitor Proxmox Backup Server datastores, jobs and backups.",
|
||||
"author": "NexaDash",
|
||||
"category": "Infrastructure",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_token": {
|
||||
"type": "string",
|
||||
"title": "API Token",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["api_token"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "pbs-overview",
|
||||
"name": "PBS Overview",
|
||||
"description": "Server status and datastore summary",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "backup-job-status",
|
||||
"name": "Backup Job Status",
|
||||
"description": "Latest backup job results",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "datastore-usage",
|
||||
"name": "Datastore Usage",
|
||||
"description": "Storage usage per datastore",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "failed-backups",
|
||||
"name": "Failed Backups",
|
||||
"description": "Recent failed backup jobs",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"id": "proxmox-ve",
|
||||
"name": "Proxmox VE",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Shows Proxmox nodes, VMs, LXCs, storage and cluster health.",
|
||||
"author": "NexaDash",
|
||||
"category": "Infrastructure",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"required": []
|
||||
},
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_token": {
|
||||
"type": "string",
|
||||
"title": "API Token",
|
||||
"format": "password",
|
||||
"description": "Proxmox API token in format user@realm!tokenid=uuid"
|
||||
}
|
||||
},
|
||||
"required": ["api_token"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "cluster-overview",
|
||||
"name": "Cluster Overview",
|
||||
"description": "Cluster status and nodes summary",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "node-card",
|
||||
"name": "Node Card",
|
||||
"description": "CPU/RAM/Disk for a single node",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2,
|
||||
"settingsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"node": {
|
||||
"type": "string",
|
||||
"title": "Node name"
|
||||
}
|
||||
},
|
||||
"required": ["node"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "vm-lxc-list",
|
||||
"name": "VM/LXC List",
|
||||
"description": "List of virtual machines and containers",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 3
|
||||
},
|
||||
{
|
||||
"id": "storage-usage",
|
||||
"name": "Storage Usage",
|
||||
"description": "Storage utilization across the cluster",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "resource-graph",
|
||||
"name": "Resource Graph",
|
||||
"description": "CPU and memory usage chart",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
],
|
||||
"healthcheck": {
|
||||
"method": "GET",
|
||||
"intervalSeconds": 60,
|
||||
"timeoutSeconds": 30
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"id": "zoraxy",
|
||||
"name": "Zoraxy",
|
||||
"version": "1.0.0",
|
||||
"nexadashPluginApi": "1.0",
|
||||
"description": "Reverse proxy hosts, TLS status and backend health.",
|
||||
"author": "NexaDash",
|
||||
"category": "Network",
|
||||
"permissions": ["network:outbound", "secrets:read"],
|
||||
"credentialsSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"api_key": {
|
||||
"type": "string",
|
||||
"title": "API Key",
|
||||
"format": "password"
|
||||
}
|
||||
},
|
||||
"required": ["api_key"]
|
||||
},
|
||||
"widgets": [
|
||||
{
|
||||
"id": "proxy-overview",
|
||||
"name": "Proxy Overview",
|
||||
"description": "List of proxy hosts",
|
||||
"defaultWidth": 3,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "tls-expiry",
|
||||
"name": "TLS Expiry",
|
||||
"description": "TLS certificate expiration dates",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
},
|
||||
{
|
||||
"id": "backend-health",
|
||||
"name": "Backend Health",
|
||||
"description": "Upstream health checks",
|
||||
"defaultWidth": 2,
|
||||
"defaultHeight": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user