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/VeeamBackupReplication/v1/configValidation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"steps": [
{
"displayName": "Connect to Veeam Backup & Replication",
"dataStream": { "name": "repositoryStates" },
"required": true,
"success": "Successfully connected to Veeam Backup & Replication.",
"error": "Could not connect to Veeam Backup & Replication. Check the Server URL and port, the username and password, and the selected REST API version, and ensure the account has at least the Veeam Backup Viewer role."
}
]
}
16 changes: 16 additions & 0 deletions plugins/VeeamBackupReplication/v1/custom_types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"name": "Veeam Repository",
"sourceType": "Veeam Repository",
"icon": "hard-drive",
"singular": "Repository",
"plural": "Repositories"
},
{
"name": "Veeam Job",
"sourceType": "Veeam Job",
"icon": "clock-rotate-left",
"singular": "Job",
"plural": "Jobs"
}
]
45 changes: 45 additions & 0 deletions plugins/VeeamBackupReplication/v1/dataStreams/jobStates.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"name": "jobStates",
"displayName": "Job Status (All)",
"description": "Status and last result of every Veeam Backup & Replication job",
"baseDataSourceName": "httpRequestUnscoped",
"config": {
"httpMethod": "get",
"endpointPath": "api/v1/jobs/states",
"pathToData": "data",
"paging": {
"mode": "offset",
"pageSize": { "realm": "queryArg", "path": "limit", "value": "500" },
"offset": {
"mode": "row",
"rowCountIn": { "realm": "payloadArraySize", "path": "data" },
"base": 0
},
"out": { "realm": "queryArg", "path": "skip" }
},
"getArgs": [],
"headers": []
},
"matches": "none",
"metadata": [
{ "sourceId": "id", "sourceType": "Veeam Job", "name": "name", "shape": "string", "role": "label" },
{ "name": "id", "displayName": "ID", "shape": "string", "visible": false },
{ "name": "type", "displayName": "Type" },
{ "name": "status", "displayName": "Status" },
{ "name": "lastResult", "displayName": "Last Result", "shape": ["state", { "map": { "success": ["Success"], "warning": ["Warning"], "error": ["Failed"], "unknown": ["None"] } }] },
{ "name": "workload", "displayName": "Workload" },
{ "name": "description", "displayName": "Description" },
{ "name": "lastRun", "displayName": "Last Run" },
{ "name": "nextRun", "displayName": "Next Run" },
{ "name": "nextRunPolicy", "displayName": "Next Run Policy" },
{ "name": "repositoryId", "displayName": "Repository Id" },
{ "name": "repositoryName", "displayName": "Repository Name" },
{ "name": "objectsCount", "displayName": "Objects Count" },
{ "name": "sessionId", "displayName": "Session Id" },
{ "name": "highPriority", "displayName": "High Priority" },
{ "name": "progressPercent", "displayName": "Progress Percent", "shape": "percent" },
{ "name": "sessionProgress", "displayName": "Session Progress" },
{ "name": "isStorageSnapshot", "displayName": "Is Storage Snapshot" }
],
"timeframes": false
}
40 changes: 40 additions & 0 deletions plugins/VeeamBackupReplication/v1/dataStreams/jobStatesScoped.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"name": "jobStatesScoped",
"displayName": "Job Status",
"description": "Status and last result of the selected Veeam Backup jobs (pick one or more jobs on the Objects tab)",
"baseDataSourceName": "httpRequestScopedSingle",
"matches": {
"sourceType": {
"type": "oneOf",
"values": ["Veeam Job"]
}
},
"config": {
"httpMethod": "get",
"endpointPath": "api/v1/jobs/states",
"pathToData": "data",
"getArgs": [{ "key": "idFilter", "value": "{{object.rawId}}" }],
"headers": []
},
"metadata": [
{ "sourceId": "id", "sourceType": "Veeam Job", "name": "name", "shape": "string", "role": "label" },
{ "name": "id", "displayName": "ID", "shape": "string", "visible": false },
{ "name": "type", "displayName": "Type" },
{ "name": "status", "displayName": "Status" },
{ "name": "lastResult", "displayName": "Last Result", "shape": ["state", { "map": { "success": ["Success"], "warning": ["Warning"], "error": ["Failed"], "unknown": ["None"] } }] },
{ "name": "workload", "displayName": "Workload" },
{ "name": "description", "displayName": "Description" },
{ "name": "lastRun", "displayName": "Last Run" },
{ "name": "nextRun", "displayName": "Next Run" },
{ "name": "nextRunPolicy", "displayName": "Next Run Policy" },
{ "name": "repositoryId", "displayName": "Repository Id" },
{ "name": "repositoryName", "displayName": "Repository Name" },
{ "name": "objectsCount", "displayName": "Objects Count" },
{ "name": "sessionId", "displayName": "Session Id" },
{ "name": "highPriority", "displayName": "High Priority" },
{ "name": "progressPercent", "displayName": "Progress Percent", "shape": "percent" },
{ "name": "sessionProgress", "displayName": "Session Progress" },
{ "name": "isStorageSnapshot", "displayName": "Is Storage Snapshot" }
],
"timeframes": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "repositoryStates",
"displayName": "Repository Status (All)",
"description": "Capacity, free space and online status of every Veeam Backup & Replication repository",
"baseDataSourceName": "httpRequestUnscoped",
"config": {
"httpMethod": "get",
"endpointPath": "api/v1/backupInfrastructure/repositories/states",
"pathToData": "data",
"paging": {
"mode": "offset",
"pageSize": { "realm": "queryArg", "path": "limit", "value": "500" },
"offset": {
"mode": "row",
"rowCountIn": { "realm": "payloadArraySize", "path": "data" },
"base": 0
},
"out": { "realm": "queryArg", "path": "skip" }
},
"getArgs": [],
"headers": []
},
"matches": "none",
"metadata": [
{ "sourceId": "id", "sourceType": "Veeam Repository", "name": "name", "shape": "string", "role": "label" },
{ "name": "id", "displayName": "ID", "shape": "string", "visible": false },
{ "name": "type", "displayName": "Type" },
{ "name": "description", "displayName": "Description" },
{ "name": "hostId", "displayName": "Host Id" },
{ "name": "hostName", "displayName": "Host Name" },
{ "name": "path", "displayName": "Path" },
{ "name": "capacityGB", "displayName": "Capacity GB", "shape": "gigabytes" },
{ "name": "freeGB", "displayName": "Free GB", "shape": "gigabytes" },
{ "name": "usedSpaceGB", "displayName": "Used Space GB", "shape": "gigabytes" },
{ "name": "isOnline", "displayName": "Is Online" },
{ "name": "isOutOfDate", "displayName": "Is Out Of Date" }
],
"timeframes": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "repositoryStatesScoped",
"displayName": "Repository Status",
"description": "Capacity and status of the selected Veeam Backup repositories (pick one or more repositories on the Objects tab)",
"baseDataSourceName": "httpRequestScopedSingle",
"matches": {
"sourceType": {
"type": "oneOf",
"values": ["Veeam Repository"]
}
},
"config": {
"httpMethod": "get",
"endpointPath": "api/v1/backupInfrastructure/repositories/states",
"pathToData": "data",
"getArgs": [{ "key": "idFilter", "value": "{{object.rawId}}" }],
"headers": []
},
"metadata": [
{ "sourceId": "id", "sourceType": "Veeam Repository", "name": "name", "shape": "string", "role": "label" },
{ "name": "id", "displayName": "ID", "shape": "string", "visible": false },
{ "name": "type", "displayName": "Type" },
{ "name": "description", "displayName": "Description" },
{ "name": "hostId", "displayName": "Host Id" },
{ "name": "hostName", "displayName": "Host Name" },
{ "name": "path", "displayName": "Path" },
{ "name": "capacityGB", "displayName": "Capacity GB", "shape": "gigabytes" },
{ "name": "freeGB", "displayName": "Free GB", "shape": "gigabytes" },
{ "name": "usedSpaceGB", "displayName": "Used Space GB", "shape": "gigabytes" },
{ "name": "isOnline", "displayName": "Is Online" },
{ "name": "isOutOfDate", "displayName": "Is Out Of Date" }
],
"timeframes": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"items": [
{ "name": "status", "type": "dashboard" }
]
}
199 changes: 199 additions & 0 deletions plugins/VeeamBackupReplication/v1/defaultContent/Job/status.dash.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
{
"name": "Status",
"schemaVersion": "1.4",
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dashboard": {
"_type": "layout/grid",
"columns": 4,
"contents": [
{
"static": false,
"w": 2,
"moved": false,
"h": 2,
"x": 0,
"y": 0,
"i": "e7be0bba-7347-4f63-91b9-e674407f4782",
"z": 0,
"config": {
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dataStream": {
"name": "jobStatesScoped",
"id": "{{dataStreams.[jobStatesScoped]}}",
"pluginConfigId": "{{configId}}"
},
"scope": {
"variable": "{{variables.[Job]}}",
"workspace": "{{workspaceId}}",
"scope": "{{scopes.[Jobs]}}"
},
"_type": "tile/data-stream",
"description": "",
"activePluginConfigIds": ["{{configId}}"],
"title": "Last Result",
"visualisation": {
"type": "data-stream-blocks",
"config": {
"data-stream-blocks": {
"stateColumn": "lastResult",
"linkColumn": "none",
"labelColumn": "lastResult"
}
}
}
}
},
{
"static": false,
"w": 2,
"moved": false,
"h": 2,
"x": 2,
"y": 0,
"i": "9080ab8a-ba4a-4e8e-b555-785541a1a532",
"z": 0,
"config": {
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dataStream": {
"name": "jobStatesScoped",
"id": "{{dataStreams.[jobStatesScoped]}}",
"pluginConfigId": "{{configId}}"
},
"scope": {
"variable": "{{variables.[Job]}}",
"workspace": "{{workspaceId}}",
"scope": "{{scopes.[Jobs]}}"
},
"_type": "tile/data-stream",
"description": "",
"activePluginConfigIds": ["{{configId}}"],
"title": "Current Status",
"visualisation": {
"type": "data-stream-scalar",
"config": {
"data-stream-scalar": {
"value": "status",
"comparisonColumn": "none"
}
}
}
}
},
{
"static": false,
"w": 2,
"moved": false,
"h": 1,
"x": 0,
"y": 2,
"i": "b2743b43-f556-476a-85f8-c11f841bf608",
"z": 0,
"config": {
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dataStream": {
"name": "jobStatesScoped",
"id": "{{dataStreams.[jobStatesScoped]}}",
"pluginConfigId": "{{configId}}"
},
"scope": {
"variable": "{{variables.[Job]}}",
"workspace": "{{workspaceId}}",
"scope": "{{scopes.[Jobs]}}"
},
"_type": "tile/data-stream",
"description": "",
"activePluginConfigIds": ["{{configId}}"],
"title": "Last Run Date/Time",
"visualisation": {
"type": "data-stream-scalar",
"config": {
"data-stream-scalar": {
"value": "lastRun",
"comparisonColumn": "none"
}
}
}
}
},
{
"static": false,
"w": 2,
"moved": false,
"h": 2,
"x": 2,
"y": 2,
"i": "405b620b-5181-4f31-a1b2-74330dd53e5f",
"z": 0,
"config": {
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dataStream": {
"name": "jobStatesScoped",
"id": "{{dataStreams.[jobStatesScoped]}}",
"pluginConfigId": "{{configId}}"
},
"scope": {
"variable": "{{variables.[Job]}}",
"workspace": "{{workspaceId}}",
"scope": "{{scopes.[Jobs]}}"
},
"_type": "tile/data-stream",
"description": "",
"activePluginConfigIds": ["{{configId}}"],
"title": "Properties",
"visualisation": {
"type": "data-stream-table",
"config": {
"data-stream-table": {
"columnOrder": ["name", "type", "workload", "id", "description", "repositoryName", "objectsCount", "highPriority", "progressPercent", "isStorageSnapshot"],
"hiddenColumns": ["status", "lastResult", "lastRun", "nextRun", "nextRunPolicy", "repositoryId", "sessionId", "sessionProgress"],
"transpose": true
}
}
}
}
},
{
"static": false,
"w": 2,
"moved": false,
"h": 1,
"x": 0,
"y": 3,
"i": "04f72cbd-44de-4113-b9ff-3466b69dfcb6",
"z": 0,
"config": {
"timeframe": "none",
"variables": ["{{variables.[Job]}}"],
"dataStream": {
"name": "jobStatesScoped",
"id": "{{dataStreams.[jobStatesScoped]}}",
"pluginConfigId": "{{configId}}"
},
"scope": {
"variable": "{{variables.[Job]}}",
"workspace": "{{workspaceId}}",
"scope": "{{scopes.[Jobs]}}"
},
"_type": "tile/data-stream",
"description": "",
"activePluginConfigIds": ["{{configId}}"],
"title": "Next Run Date/Time",
"visualisation": {
"type": "data-stream-scalar",
"config": {
"data-stream-scalar": {
"value": "nextRun",
"comparisonColumn": "none"
}
}
}
}
}
]
}
}
Loading
Loading