Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions plugins/ProxmoxVE/v1/configValidation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"steps": [
{
"displayName": "Authenticate",
"dataStream": { "name": "apiVersion" },
"required": true,
"error": "Could not connect to Proxmox VE. Check your Host URL is reachable, and that your Token ID and Token Secret are correct.",
"success": "Connected to Proxmox VE successfully."
}
]
}
23 changes: 23 additions & 0 deletions plugins/ProxmoxVE/v1/custom_types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[
{
"name": "Proxmox Node",
"sourceType": "Proxmox Node",
"icon": "server",
"singular": "Node",
"plural": "Nodes"
},
{
"name": "Proxmox VM",
"sourceType": "Proxmox VM",
"icon": "display",
"singular": "VM",
"plural": "VMs"
},
{
"name": "Proxmox Container",
"sourceType": "Proxmox Container",
"icon": "box",
"singular": "Container",
"plural": "Containers"
}
]
18 changes: 18 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/apiVersion.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "apiVersion",
"displayName": "API Version",
"description": "Proxmox VE API version and release information",
"tags": ["Info"],
"baseDataSourceName": "httpRequestUnscoped",
"config": {
"httpMethod": "get",
"endpointPath": "/version",
"pathToData": "data"
},
"matches": "none",
"visibility": { "type": "hidden" },
"metadata": [
{ "pattern": ".*" }
],
"timeframes": false
}
30 changes: 30 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/clusterResources.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "clusterResources",
"displayName": "Cluster Resources",
"description": "All nodes, VMs, and containers across the cluster with current resource utilisation",
"tags": ["Cluster", "Resources"],
"baseDataSourceName": "httpRequestUnscoped",
"config": {
"httpMethod": "get",
"endpointPath": "/cluster/resources",
"postRequestScript": "clusterResources.js"
},
"matches": "none",
"metadata": [
{ "name": "sourceId", "displayName": "Source ID", "shape": "string", "visible": false },
{ "name": "sourceType", "displayName": "Type", "shape": "string" },
{ "name": "name", "displayName": "Name", "shape": "string", "role": "label" },
{ "name": "node", "displayName": "Node", "shape": "string" },
{ "name": "vmid", "displayName": "VM ID", "shape": "number" },
{ "name": "status", "displayName": "Status", "shape": ["state", { "map": { "success": ["running", "online"], "error": ["stopped", "offline"], "warning": ["paused", "unknown"] } }] },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }] },
{ "name": "maxcpu", "displayName": "CPU Cores", "shape": "number" },
{ "name": "mem", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "maxmem", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "disk", "displayName": "Disk Used", "shape": "bytes" },
{ "name": "maxdisk", "displayName": "Disk Total", "shape": "bytes" },
{ "name": "uptime", "displayName": "Uptime", "shape": "seconds" },
{ "name": "type", "displayName": "API Type", "shape": "string", "visible": false }
],
"timeframes": false
}
34 changes: 34 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/containerMetrics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "containerMetrics",
"displayName": "Container Metrics",
"description": "Historical CPU, memory, and network metrics for an LXC container",
"tags": ["Container", "Metrics"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.node}}/lxc/{{object.rawId}}/rrddata",
"getArgs": [
{
"key": "timeframe",
"value": "{{timeframe.enum === 'last1hour' ? 'hour' : timeframe.enum === 'last7days' ? 'week' : timeframe.enum === 'last30days' ? 'month' : 'day'}}"
},
{
"key": "cf",
"value": "AVERAGE"
}
],
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox Container"] } },
"metadata": [
{ "name": "time", "displayName": "Time", "shape": "timestamp", "role": "timestamp" },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }], "role": "value" },
{ "name": "mem", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "maxmem", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "netin", "displayName": "Network In", "shape": "bytespersecondbinary" },
{ "name": "netout", "displayName": "Network Out", "shape": "bytespersecondbinary" },
{ "name": "diskread", "displayName": "Disk Read", "shape": "bytespersecondbinary" },
{ "name": "diskwrite", "displayName": "Disk Write", "shape": "bytespersecondbinary" }
],
"timeframes": ["last1hour", "last24hours", "last7days", "last30days"]
}
28 changes: 28 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/containerStatus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "containerStatus",
"displayName": "Container Status",
"description": "Current CPU, memory, disk, and uptime for an LXC container",
"tags": ["Container", "Status"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.node}}/lxc/{{object.rawId}}/status/current",
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox Container"] } },
"metadata": [
{ "name": "name", "displayName": "Name", "shape": "string", "role": "label" },
{ "name": "status", "displayName": "Status", "shape": ["state", { "map": { "success": ["running"], "error": ["stopped"], "warning": ["paused", "unknown"] } }], "role": "value" },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }] },
{ "name": "cpus", "displayName": "CPU Cores", "shape": "number" },
{ "name": "mem", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "maxmem", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "swap", "displayName": "Swap Used", "shape": "bytes" },
{ "name": "maxswap", "displayName": "Swap Total", "shape": "bytes" },
{ "name": "disk", "displayName": "Disk Used", "shape": "bytes" },
{ "name": "maxdisk", "displayName": "Disk Total", "shape": "bytes" },
{ "name": "uptime", "displayName": "Uptime", "shape": "seconds" },
{ "name": "containerid", "displayName": "Container ID", "shape": "number" }
],
"timeframes": false
}
34 changes: 34 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/nodeMetrics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "nodeMetrics",
"displayName": "Node Metrics",
"description": "Historical CPU, memory, and network metrics for a node",
"tags": ["Node", "Metrics"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.rawId}}/rrddata",
"getArgs": [
{
"key": "timeframe",
"value": "{{timeframe.enum === 'last1hour' ? 'hour' : timeframe.enum === 'last7days' ? 'week' : timeframe.enum === 'last30days' ? 'month' : 'day'}}"
},
{
"key": "cf",
"value": "AVERAGE"
}
],
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox Node"] } },
"metadata": [
{ "name": "time", "displayName": "Time", "shape": "timestamp", "role": "timestamp" },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }], "role": "value" },
{ "name": "maxcpu", "displayName": "CPU Cores", "shape": "number" },
{ "name": "memused", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "memtotal", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "netin", "displayName": "Network In", "shape": "bytespersecondbinary" },
{ "name": "netout", "displayName": "Network Out", "shape": "bytespersecondbinary" },
{ "name": "iowait", "displayName": "I/O Wait", "shape": ["percent", { "asZeroToOne": true }] }
],
"timeframes": ["last1hour", "last24hours", "last7days", "last30days"]
}
25 changes: 25 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/nodeStatus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "nodeStatus",
"displayName": "Node Status",
"description": "Current CPU, memory, disk, and uptime for a node",
"tags": ["Node", "Status"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.rawId}}/status",
"pathToData": "data",
"expandInnerObjects": true
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox Node"] } },
"metadata": [
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }], "role": "value" },
{ "name": "memory.used", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "memory.total", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "rootfs.used", "displayName": "Disk Used", "shape": "bytes" },
{ "name": "rootfs.total", "displayName": "Disk Total", "shape": "bytes" },
{ "name": "uptime", "displayName": "Uptime", "shape": "seconds" },
{ "name": "kversion", "displayName": "Kernel Version", "shape": "string" },
{ "name": "pveversion", "displayName": "PVE Version", "shape": "string" }
],
"timeframes": false
}
22 changes: 22 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/nodeUpdates.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "nodeUpdates",
"displayName": "Node Updates",
"description": "Pending OS package updates available for a node",
"tags": ["Node", "Updates"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.rawId}}/apt/update",
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox Node"] } },
"metadata": [
{ "name": "Package", "displayName": "Package Name", "shape": "string", "role": "label" },
{ "name": "Version", "displayName": "New Version", "shape": "string" },
{ "name": "OldVersion", "displayName": "Current Version", "shape": "string" },
{ "name": "Priority", "displayName": "Priority", "shape": "string" },
{ "name": "Origin", "displayName": "Origin", "shape": "string" },
{ "name": "Description", "displayName": "Description", "shape": "string" }
],
"timeframes": false
}
28 changes: 28 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/scripts/clusterResources.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const resources = (data && data.data) || [];

const typeMap = {
node: 'Proxmox Node',
qemu: 'Proxmox VM',
lxc: 'Proxmox Container'
};

result = resources
.filter(function(r) { return typeMap[r.type]; })
.map(function(r) {
return {
sourceId: r.type === 'node' ? r.node : String(r.vmid),
sourceType: typeMap[r.type],
name: r.name || r.node,
node: r.node,
vmid: r.vmid != null ? r.vmid : null,
type: r.type,
status: r.status,
cpu: r.cpu || 0,
maxcpu: r.maxcpu || 0,
mem: r.mem || 0,
maxmem: r.maxmem || 0,
disk: r.disk || 0,
maxdisk: r.maxdisk || 0,
uptime: r.uptime || 0

@andrewmumblebee andrewmumblebee Jul 13, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the skill uses a script, it really loves to add every property one by one.

Possibly should add guidance to spread the properties @clarkd?

Granted it also goes in hand with how it loves to define every metadata column, rather than using "pattern": ".*", not sure what best practice here should be

};
});
34 changes: 34 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/vmMetrics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "vmMetrics",
"displayName": "VM Metrics",
"description": "Historical CPU, memory, and network metrics for a QEMU/KVM virtual machine",
"tags": ["VM", "Metrics"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.node}}/qemu/{{object.rawId}}/rrddata",
"getArgs": [
{
"key": "timeframe",
"value": "{{timeframe.enum === 'last1hour' ? 'hour' : timeframe.enum === 'last7days' ? 'week' : timeframe.enum === 'last30days' ? 'month' : 'day'}}"
},
{
"key": "cf",
"value": "AVERAGE"
}
],
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox VM"] } },
"metadata": [
{ "name": "time", "displayName": "Time", "shape": "timestamp", "role": "timestamp" },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }], "role": "value" },
{ "name": "mem", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "maxmem", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "netin", "displayName": "Network In", "shape": "bytespersecondbinary" },
{ "name": "netout", "displayName": "Network Out", "shape": "bytespersecondbinary" },
{ "name": "diskread", "displayName": "Disk Read", "shape": "bytespersecondbinary" },
{ "name": "diskwrite", "displayName": "Disk Write", "shape": "bytespersecondbinary" }
],
"timeframes": ["last1hour", "last24hours", "last7days", "last30days"]
}
28 changes: 28 additions & 0 deletions plugins/ProxmoxVE/v1/dataStreams/vmStatus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "vmStatus",
"displayName": "VM Status",
"description": "Current CPU, memory, disk, and uptime for a QEMU/KVM virtual machine",
"tags": ["VM", "Status"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "/nodes/{{object.node}}/qemu/{{object.rawId}}/status/current",
"pathToData": "data"
},
"matches": { "sourceType": { "type": "oneOf", "values": ["Proxmox VM"] } },
"metadata": [
{ "name": "status", "displayName": "Status", "shape": ["state", { "map": { "success": ["running"], "error": ["stopped"], "warning": ["paused", "unknown"] } }], "role": "value" },
{ "name": "cpu", "displayName": "CPU Usage", "shape": ["percent", { "asZeroToOne": true }] },
{ "name": "cpus", "displayName": "CPU Cores", "shape": "number" },
{ "name": "mem", "displayName": "Memory Used", "shape": "bytes" },
{ "name": "maxmem", "displayName": "Memory Total", "shape": "bytes" },
{ "name": "disk", "displayName": "Disk Used", "shape": "bytes" },
{ "name": "maxdisk", "displayName": "Disk Total", "shape": "bytes" },
{ "name": "uptime", "displayName": "Uptime", "shape": "seconds" },
{ "name": "name", "displayName": "Name", "shape": "string", "role": "label" },
{ "name": "vmid", "displayName": "VM ID", "shape": "number" },
{ "name": "netin", "displayName": "Network In", "shape": "bytes" },
{ "name": "netout", "displayName": "Network Out", "shape": "bytes" }
],
"timeframes": false
}
Loading
Loading