From 76ee311002269f5977375183053cbaab492482a3 Mon Sep 17 00:00:00 2001 From: Daniel Watts <34212312+Deenk@users.noreply.github.com> Date: Mon, 9 Mar 2026 09:50:35 +0000 Subject: [PATCH 1/3] add base ninjaone lcp --- plugins/NinjaOne/v1/cspell.json | 3 + .../NinjaOne/v1/dataStreams/activities.json | 29 ++++++ plugins/NinjaOne/v1/dataStreams/alerts.json | 29 ++++++ plugins/NinjaOne/v1/dataStreams/devices.json | 29 ++++++ .../v1/dataStreams/organisations.json | 29 ++++++ plugins/NinjaOne/v1/dataStreams/policies.json | 29 ++++++ plugins/NinjaOne/v1/icon.png | Bin 0 -> 4845 bytes plugins/NinjaOne/v1/metadata.json | 33 +++++++ plugins/NinjaOne/v1/ui.json | 88 ++++++++++++++++++ 9 files changed, 269 insertions(+) create mode 100644 plugins/NinjaOne/v1/cspell.json create mode 100644 plugins/NinjaOne/v1/dataStreams/activities.json create mode 100644 plugins/NinjaOne/v1/dataStreams/alerts.json create mode 100644 plugins/NinjaOne/v1/dataStreams/devices.json create mode 100644 plugins/NinjaOne/v1/dataStreams/organisations.json create mode 100644 plugins/NinjaOne/v1/dataStreams/policies.json create mode 100644 plugins/NinjaOne/v1/icon.png create mode 100644 plugins/NinjaOne/v1/metadata.json create mode 100644 plugins/NinjaOne/v1/ui.json diff --git a/plugins/NinjaOne/v1/cspell.json b/plugins/NinjaOne/v1/cspell.json new file mode 100644 index 0000000..a18a3f7 --- /dev/null +++ b/plugins/NinjaOne/v1/cspell.json @@ -0,0 +1,3 @@ +{ + "words": ["ninjarmm", "ninjaone"] +} diff --git a/plugins/NinjaOne/v1/dataStreams/activities.json b/plugins/NinjaOne/v1/dataStreams/activities.json new file mode 100644 index 0000000..9b1be15 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/activities.json @@ -0,0 +1,29 @@ +{ + "name": "activities", + "displayName": "Activities", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/activities", + "getArgs": [], + "headers": [] + }, + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} \ No newline at end of file diff --git a/plugins/NinjaOne/v1/dataStreams/alerts.json b/plugins/NinjaOne/v1/dataStreams/alerts.json new file mode 100644 index 0000000..e5bc5e5 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/alerts.json @@ -0,0 +1,29 @@ +{ + "name": "alerts", + "displayName": "Alerts", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/alerts", + "getArgs": [], + "headers": [] + }, + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} \ No newline at end of file diff --git a/plugins/NinjaOne/v1/dataStreams/devices.json b/plugins/NinjaOne/v1/dataStreams/devices.json new file mode 100644 index 0000000..33e5fad --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/devices.json @@ -0,0 +1,29 @@ +{ + "name": "devices", + "displayName": "Devices", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/devices", + "getArgs": [], + "headers": [] + }, + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} \ No newline at end of file diff --git a/plugins/NinjaOne/v1/dataStreams/organisations.json b/plugins/NinjaOne/v1/dataStreams/organisations.json new file mode 100644 index 0000000..fbaaf38 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/organisations.json @@ -0,0 +1,29 @@ +{ + "name": "organisations", + "displayName": "Organisations", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/organizations", + "getArgs": [], + "headers": [] + }, + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} \ No newline at end of file diff --git a/plugins/NinjaOne/v1/dataStreams/policies.json b/plugins/NinjaOne/v1/dataStreams/policies.json new file mode 100644 index 0000000..0ae367b --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/policies.json @@ -0,0 +1,29 @@ +{ + "name": "policies", + "displayName": "Policies", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/policies", + "getArgs": [], + "headers": [] + }, + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} \ No newline at end of file diff --git a/plugins/NinjaOne/v1/icon.png b/plugins/NinjaOne/v1/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9f59446512a3c09478124ecad3837af54c9c58 GIT binary patch literal 4845 zcmeHLX+Trg5>xr|6^SOYD2oteHxLMWlMq56@7(siKkxVZSASei?m1`X%zQKR%{^Q@;^e5Y zL~jWIK;yvvJYfy zDw=z&${83tzA-bYOr3PxR)a8!1rgWcQeN{ukNEJKTZoIUTusw7EWK0-*tP{My$6?k zFNoh3#Tj@XQ3C_pSD~-_-5#czKE9d3U|~9R6_ArTLx0VvTg7jdIrvb1dcKXeUDlLd zJvEQ282ME1C7sQUVIKY7J+W$*1^;rml{ZZsD;&=JsC-s{@nJs zwO*{?@JWyM;&bWO`9H#S1p!8xeHU<^iFU!4@M0#KTZTpP?q)0D*?-) z^_od>Deok4w4fP6N*ZocOWt;lu`t_#H^P5y074^z;++EBl&=mHP99!E-)Y72AKwN1vpbFOipc{sP`WL-nti2sKO% zp`(gjy5*wH+5TSYQ=`Za@{KHb)|{0OPnM$1gLo7cOAnVt{5hc+WK1x{5J-oZuY3Ix zAQrEWX0)iIo8!sEWX-1JnGf9Y!sx(mE5$l(Aj~Yzj=p$Dl|3+ao7~kEI+;51ng^ez zFy-XD?p%s-))hd{d$L(}t;uTa-neHh1jtSu!%{TX0>Zc_+0o}&dM^0Z)fozNsHoOHn#VYvHngYBCqEuVX~uvyxF4x92K=&Oyv)K6!Z6ci zQd#PNp1~ISHxx?dJ|!seS1BNA5TkVa4>aSjehc2aWI5c&nZ8!Qa6Fw}X%+MGN8*jU zW$H9-j8GX~UKx2_BnYQcF%AXqXgNYW@Hdu3L0k#*u z0W5fql+;rwaUjo)-_fCY`4w9pw_jLz;Cs4WZqa%N^xZAFWH1qx!Yd_SH=?$~M7$3C z4gi9#+2Yt0EImO9jNN*Z9uyrRK9dq=m!zi!@)dPxVLm)!^-4_ZRe-pjnI@N_I1L!| zm^IWxazNmurJd#3>1QU(wmY)f>C|H)oFV9QiRjd-42}NjxmjxD<55d2?0lwE!<}n= z7qcvGJo;V%(7)r5$(5wbY%D;o-`H`LJ=0a>lDKOF1{}$N#ad{CcM;)~RsgUPA1?j< zF%YK$kOfDEApm}T$NfL&0P$TobuH5>IO34u{5}9$>oQR0gE@h_vK)ZzP=~KB5@Q4f z&OjuRso{^HC8+!mEUjGS!eJ#q&`6yZ!Jv89r~yQ;P`$=W8%jd4O4yqH{HUY9SSxf` zL35u%w|mrU(zM|6i!B#lj%wkK!0CGE^&Swl8=n3Ucw0bc?&I6^!q?qOgL-1TFN87R z#w~E8=6eIXlOpU=90oM2qELPQ63bwDBT&M=V2hO-Tv`s7OopC$-mWalYHHm%pSMLo_}(I0A9UcuzkiU~-D$Q-FnfqBxZoC5{xa`*Z|?^O z^52y2ajN0=M+!x!8`94YxlhNLXt#OuAUs?DGR6>iBOZ`_p)7~pVi4s!{>C$wV|{RA z<~G<;fks^E>G?=i(;^HJ)-p2heFzUM_JP+EY-p)uAu zyX+p!^0vnsNzgoHz#K9n@U@|5yakRmyMrbpx=FtHjqAvDOQ7uZN7qbIE%~oCh>lC* zwk@{U{T3Y<ZdGW0(?$V7$_L2g!2?P8Q{1m9_OwFA-L_69cvjAzy!#_7#OpjI@X^ zKY_qs)UDcp5>r8qxs8f<>1qt&=I4=sW%J?GjGzu;H?(! zlTG+(09oQeqlg2i!5f-t`$S+;xJ8Vo2vtf*P4KYzTu=>#{-JN(43L zo)zl=qfi|9Y*dRL48s!_@1B^t*Y)iO&TQnGEqI88Zon>A|8aNBlx?2kSraIJDf?X8 zC@gDem8+eKa2*CPz2~bb2^czF0h9~Tz&}&rrcN^SG1A`vV(umrWK{Nhg0ASbhEO5> z&=kf#W7!)P`A$UMv ztrfjj4e&1olK(RfQ_5PV3F}eR%_Bg*7gqs<{Ro?uts)TOF#yCWfzVoiB$oO=x2q1L zJdBD;EI`(TC@;q;eZ6x118 Date: Mon, 9 Mar 2026 10:25:14 +0000 Subject: [PATCH 2/3] add extra data streams and imports --- plugins/NinjaOne/v1/cspell.json | 2 +- plugins/NinjaOne/v1/custom_types.json | 16 ++ .../v1/dataStreams/antivirusStatus.json | 89 ++++++ .../NinjaOne/v1/dataStreams/deviceHealth.json | 170 +++++++++++ plugins/NinjaOne/v1/dataStreams/disks.json | 101 +++++++ .../v1/dataStreams/loggedOnUsers.json | 55 ++++ .../v1/dataStreams/networkInterfaces.json | 104 +++++++ .../v1/dataStreams/operatingSystems.json | 86 ++++++ .../NinjaOne/v1/dataStreams/osPatches.json | 87 ++++++ .../NinjaOne/v1/dataStreams/processors.json | 93 ++++++ plugins/NinjaOne/v1/dataStreams/software.json | 81 ++++++ plugins/NinjaOne/v1/dataStreams/volumes.json | 96 +++++++ .../v1/dataStreams/windowsServices.json | 76 +++++ .../defaultContent/deviceOverview.dash.json | 270 ++++++++++++++++++ .../NinjaOne/v1/defaultContent/manifest.json | 12 + .../defaultContent/patchManagement.dash.json | 195 +++++++++++++ .../NinjaOne/v1/defaultContent/scopes.json | 1 + plugins/NinjaOne/v1/docs/README.md | 77 +++++ .../NinjaOne/v1/indexDefinitions/default.json | 40 +++ plugins/NinjaOne/v1/metadata.json | 18 +- 20 files changed, 1665 insertions(+), 4 deletions(-) create mode 100644 plugins/NinjaOne/v1/custom_types.json create mode 100644 plugins/NinjaOne/v1/dataStreams/antivirusStatus.json create mode 100644 plugins/NinjaOne/v1/dataStreams/deviceHealth.json create mode 100644 plugins/NinjaOne/v1/dataStreams/disks.json create mode 100644 plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json create mode 100644 plugins/NinjaOne/v1/dataStreams/networkInterfaces.json create mode 100644 plugins/NinjaOne/v1/dataStreams/operatingSystems.json create mode 100644 plugins/NinjaOne/v1/dataStreams/osPatches.json create mode 100644 plugins/NinjaOne/v1/dataStreams/processors.json create mode 100644 plugins/NinjaOne/v1/dataStreams/software.json create mode 100644 plugins/NinjaOne/v1/dataStreams/volumes.json create mode 100644 plugins/NinjaOne/v1/dataStreams/windowsServices.json create mode 100644 plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/manifest.json create mode 100644 plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/scopes.json create mode 100644 plugins/NinjaOne/v1/docs/README.md create mode 100644 plugins/NinjaOne/v1/indexDefinitions/default.json diff --git a/plugins/NinjaOne/v1/cspell.json b/plugins/NinjaOne/v1/cspell.json index a18a3f7..1cdfbf4 100644 --- a/plugins/NinjaOne/v1/cspell.json +++ b/plugins/NinjaOne/v1/cspell.json @@ -1,3 +1,3 @@ { - "words": ["ninjarmm", "ninjaone"] + "words": ["ninjarmm", "ninjaone", "bitlocker", "antivirus", "vulnerability", "vulnerabilities", "quarantined", "quarantinedthreatscount", "loggedin", "submask"] } diff --git a/plugins/NinjaOne/v1/custom_types.json b/plugins/NinjaOne/v1/custom_types.json new file mode 100644 index 0000000..81a7b79 --- /dev/null +++ b/plugins/NinjaOne/v1/custom_types.json @@ -0,0 +1,16 @@ +[ + { + "name": "NinjaOne Organization", + "sourceType": "NinjaOne", + "icon": "building", + "singular": "Organization", + "plural": "Organizations" + }, + { + "name": "NinjaOne Device", + "sourceType": "NinjaOne", + "icon": "desktop", + "singular": "Device", + "plural": "Devices" + } +] diff --git a/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json new file mode 100644 index 0000000..525db60 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json @@ -0,0 +1,89 @@ +{ + "name": "antivirusStatus", + "displayName": "Antivirus Status", + "description": "Antivirus product status and definition updates", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/antivirus-status", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "productName", + "displayName": "Product Name", + "role": "label" + }, + { + "name": "productState", + "displayName": "Product State", + "shape": [ + "state", + { + "map": { + "error": ["disabled", "off"], + "warning": ["partial"], + "success": ["enabled", "on"], + "unknown": [] + } + } + ] + }, + { + "name": "definitionStatus", + "displayName": "Definition Status", + "shape": [ + "state", + { + "map": { + "error": ["outdated", "old"], + "success": ["up-to-date", "current"], + "warning": [], + "unknown": [] + } + } + ] + }, + { + "name": "version", + "displayName": "Version" + }, + { + "name": "timestamp", + "displayName": "Last Updated", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/deviceHealth.json b/plugins/NinjaOne/v1/dataStreams/deviceHealth.json new file mode 100644 index 0000000..4e62d59 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/deviceHealth.json @@ -0,0 +1,170 @@ +{ + "name": "deviceHealth", + "displayName": "Device Health", + "description": "Device health overview including threats, patches, and vulnerabilities", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/device-health", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "healthStatus", + "displayName": "Health Status", + "shape": [ + "state", + { + "map": { + "error": ["critical", "unhealthy"], + "warning": ["warning", "attention"], + "success": ["healthy", "good"], + "unknown": [] + } + } + ] + }, + { + "name": "activeThreatsCount", + "displayName": "Active Threats", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "quarantinedThreatsCount", + "displayName": "Quarantined Threats", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "failedOSPatchesCount", + "displayName": "Failed OS Patches", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "pendingOSPatchesCount", + "displayName": "Pending OS Patches", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "alertCount", + "displayName": "Alert Count", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "failedSoftwarePatchesCount", + "displayName": "Failed Software Patches", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "pendingSoftwarePatchesCount", + "displayName": "Pending Software Patches", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "criticalVulnerabilityCount", + "displayName": "Critical Vulnerabilities", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "highVulnerabilityCount", + "displayName": "High Vulnerabilities", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "mediumVulnerabilityCount", + "displayName": "Medium Vulnerabilities", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "lowVulnerabilityCount", + "displayName": "Low Vulnerabilities", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "offline", + "displayName": "Offline", + "shape": "boolean" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/disks.json b/plugins/NinjaOne/v1/dataStreams/disks.json new file mode 100644 index 0000000..b31f63a --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/disks.json @@ -0,0 +1,101 @@ +{ + "name": "disks", + "displayName": "Disks", + "description": "Physical disk inventory with SMART status", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/disks", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Disk Name", + "role": "label" + }, + { + "name": "model", + "displayName": "Model" + }, + { + "name": "manufacturer", + "displayName": "Manufacturer" + }, + { + "name": "mediaType", + "displayName": "Media Type" + }, + { + "name": "size", + "displayName": "Size (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "interfaceType", + "displayName": "Interface" + }, + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["error", "failed", "pred fail"], + "success": ["ok"], + "warning": ["warning"], + "unknown": [] + } + } + ] + }, + { + "name": "smartCapable", + "displayName": "SMART Capable", + "shape": "boolean" + }, + { + "name": "partitionCount", + "displayName": "Partition Count", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json b/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json new file mode 100644 index 0000000..4603474 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json @@ -0,0 +1,55 @@ +{ + "name": "loggedOnUsers", + "displayName": "Logged On Users", + "description": "Last logged-on user activity", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/logged-on-users", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "userName", + "displayName": "User Name", + "role": "label" + }, + { + "name": "logonTime", + "displayName": "Logon Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json b/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json new file mode 100644 index 0000000..96f845b --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json @@ -0,0 +1,104 @@ +{ + "name": "networkInterfaces", + "displayName": "Network Interfaces", + "description": "Network adapters with IP, MAC, and link speed", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/network-interfaces", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "interfaceName", + "displayName": "Interface Name", + "role": "label" + }, + { + "name": "adapterName", + "displayName": "Adapter Name" + }, + { + "name": "ipAddress", + "displayName": "IP Address" + }, + { + "name": "macAddress", + "displayName": "MAC Address" + }, + { + "name": "subnetMask", + "displayName": "Subnet Mask" + }, + { + "name": "defaultGateway", + "displayName": "Default Gateway" + }, + { + "name": "linkSpeed", + "displayName": "Link Speed", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["down", "disabled"], + "success": ["up", "connected"], + "warning": ["degraded"], + "unknown": [] + } + } + ] + }, + { + "name": "interfaceType", + "displayName": "Interface Type" + }, + { + "name": "mtu", + "displayName": "MTU", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/operatingSystems.json b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json new file mode 100644 index 0000000..7f0204e --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json @@ -0,0 +1,86 @@ +{ + "name": "operatingSystems", + "displayName": "Operating Systems", + "description": "OS details with reboot requirements", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/operating-systems", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "OS Name", + "role": "label" + }, + { + "name": "manufacturer", + "displayName": "Manufacturer" + }, + { + "name": "architecture", + "displayName": "Architecture" + }, + { + "name": "buildNumber", + "displayName": "Build Number" + }, + { + "name": "releaseId", + "displayName": "Release ID" + }, + { + "name": "lastBootTime", + "displayName": "Last Boot Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "needsReboot", + "displayName": "Needs Reboot", + "shape": [ + "state", + { + "map": { + "error": ["true"], + "success": ["false"], + "warning": [], + "unknown": [] + } + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/osPatches.json b/plugins/NinjaOne/v1/dataStreams/osPatches.json new file mode 100644 index 0000000..5b6c069 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/osPatches.json @@ -0,0 +1,87 @@ +{ + "name": "osPatches", + "displayName": "OS Patches", + "description": "OS patch compliance status including pending, failed, and installed patches", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/os-patches", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "id", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Patch Name", + "role": "label" + }, + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["failed", "rejected"], + "warning": ["pending"], + "success": ["installed"], + "unknown": [] + } + } + ] + }, + { + "name": "severity", + "displayName": "Severity" + }, + { + "name": "type", + "displayName": "Type" + }, + { + "name": "kbNumber", + "displayName": "KB Number" + }, + { + "name": "installedAt", + "displayName": "Installed At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "deviceId", + "displayName": "Device ID", + "visible": false + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/processors.json b/plugins/NinjaOne/v1/dataStreams/processors.json new file mode 100644 index 0000000..971dbe3 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/processors.json @@ -0,0 +1,93 @@ +{ + "name": "processors", + "displayName": "Processors", + "description": "CPU information and specifications", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/processors", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Processor Name", + "role": "label" + }, + { + "name": "manufacturer", + "displayName": "Manufacturer" + }, + { + "name": "architecture", + "displayName": "Architecture" + }, + { + "name": "numCores", + "displayName": "Cores", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "numLogicalCores", + "displayName": "Logical Cores", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "maxClockSpeed", + "displayName": "Max Clock Speed (MHz)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "clockSpeed", + "displayName": "Current Clock Speed (MHz)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/software.json b/plugins/NinjaOne/v1/dataStreams/software.json new file mode 100644 index 0000000..5761ea4 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/software.json @@ -0,0 +1,81 @@ +{ + "name": "software", + "displayName": "Software", + "description": "Installed software inventory", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/software", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Software Name", + "role": "label" + }, + { + "name": "publisher", + "displayName": "Publisher" + }, + { + "name": "version", + "displayName": "Version" + }, + { + "name": "installDate", + "displayName": "Install Date", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "size", + "displayName": "Size (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "location", + "displayName": "Location" + }, + { + "name": "productCode", + "displayName": "Product Code" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/volumes.json b/plugins/NinjaOne/v1/dataStreams/volumes.json new file mode 100644 index 0000000..67330ce --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/volumes.json @@ -0,0 +1,96 @@ +{ + "name": "volumes", + "displayName": "Volumes", + "description": "Disk volumes with capacity, free space, and BitLocker status", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/volumes", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Volume Name", + "role": "label" + }, + { + "name": "driveLetter", + "displayName": "Drive Letter" + }, + { + "name": "label", + "displayName": "Label" + }, + { + "name": "fileSystem", + "displayName": "File System" + }, + { + "name": "capacity", + "displayName": "Capacity (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "freeSpace", + "displayName": "Free Space (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "bitLockerStatus", + "displayName": "BitLocker Status", + "shape": [ + "state", + { + "map": { + "error": ["off", "disabled"], + "success": ["on", "encrypted"], + "warning": ["partial"], + "unknown": [] + } + } + ] + }, + { + "name": "serialNumber", + "displayName": "Serial Number" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/windowsServices.json b/plugins/NinjaOne/v1/dataStreams/windowsServices.json new file mode 100644 index 0000000..ef83f95 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/windowsServices.json @@ -0,0 +1,76 @@ +{ + "name": "windowsServices", + "displayName": "Windows Services", + "description": "Windows service status and configurations", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/queries/windows-services", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "role": "id", + "visible": false + }, + { + "name": "name", + "displayName": "Service Name", + "role": "label" + }, + { + "name": "displayName", + "displayName": "Display Name" + }, + { + "name": "state", + "displayName": "State", + "shape": [ + "state", + { + "map": { + "error": ["stopped"], + "success": ["running"], + "warning": ["paused", "start pending", "stop pending"], + "unknown": [] + } + } + ] + }, + { + "name": "startType", + "displayName": "Start Type" + }, + { + "name": "userName", + "displayName": "Account" + }, + { + "name": "description", + "displayName": "Description" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json b/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json new file mode 100644 index 0000000..ddf6e4d --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json @@ -0,0 +1,270 @@ +{ + "name": "Device Overview", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 0, + "i": "a1b2c3d4-5e6f-7890-abcd-ef1234567890", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Device Health Status", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "healthStatus", + "activeThreatsCount", + "alertCount", + "pendingOSPatchesCount", + "failedOSPatchesCount", + "criticalVulnerabilityCount", + "offline" + ], + "hiddenColumns": [ + "deviceId", + "quarantinedThreatsCount", + "failedSoftwarePatchesCount", + "pendingSoftwarePatchesCount", + "highVulnerabilityCount", + "mediumVulnerabilityCount", + "lowVulnerabilityCount", + "pendingRebootReason" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 0, + "i": "b2c3d4e5-6f78-9012-cdef-234567890123", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "alerts", + "id": "{{dataStreams.alerts}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Alerts", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "displayName", + "severity", + "status", + "createdAt" + ], + "hiddenColumns": [ + "id", + "deviceId", + "organizationId" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 4, + "i": "c3d4e5f6-7890-1234-def0-345678901234", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "antivirusStatus", + "id": "{{dataStreams.antivirusStatus}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Antivirus Status", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "productName", + "productState", + "definitionStatus", + "version", + "timestamp" + ], + "hiddenColumns": [ + "deviceId" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 4, + "i": "d4e5f678-9012-3456-ef01-456789012345", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "volumes", + "id": "{{dataStreams.volumes}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Storage Volumes", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "driveLetter", + "capacity", + "freeSpace", + "bitLockerStatus" + ], + "hiddenColumns": [ + "deviceId", + "label", + "fileSystem", + "serialNumber", + "deviceType" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 8, + "i": "e5f67890-1234-5678-f012-567890123456", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "operatingSystems", + "id": "{{dataStreams.operatingSystems}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Operating Systems", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "architecture", + "buildNumber", + "lastBootTime", + "needsReboot" + ], + "hiddenColumns": [ + "deviceId", + "manufacturer", + "releaseId" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 8, + "i": "f6789012-3456-7890-0123-678901234567", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "devices", + "id": "{{dataStreams.devices}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "All Devices", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "displayName", + "systemName", + "offline", + "lastContact", + "organizationId" + ], + "hiddenColumns": [ + "id", + "uid", + "nodeClass", + "locationId", + "policyId" + ], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/manifest.json b/plugins/NinjaOne/v1/defaultContent/manifest.json new file mode 100644 index 0000000..0eb8f20 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/manifest.json @@ -0,0 +1,12 @@ +{ + "items": [ + { + "name": "deviceOverview", + "type": "dashboard" + }, + { + "name": "patchManagement", + "type": "dashboard" + } + ] +} diff --git a/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json b/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json new file mode 100644 index 0000000..9ea900f --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json @@ -0,0 +1,195 @@ +{ + "name": "Patch Management", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 2, + "moved": false, + "h": 6, + "x": 0, + "y": 0, + "i": "a1b2c3d4-5e6f-7890-abcd-ef1234567891", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "osPatches", + "id": "{{dataStreams.osPatches}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "OS Patch Status", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "status", + "severity", + "type", + "kbNumber", + "installedAt" + ], + "hiddenColumns": [ + "id", + "deviceId" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 6, + "x": 2, + "y": 0, + "i": "b2c3d4e5-6f78-9012-cdef-234567890124", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Patch Compliance Summary", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "pendingOSPatchesCount", + "failedOSPatchesCount", + "pendingSoftwarePatchesCount", + "failedSoftwarePatchesCount", + "healthStatus" + ], + "hiddenColumns": [ + "deviceId", + "activeThreatsCount", + "quarantinedThreatsCount", + "alertCount", + "criticalVulnerabilityCount", + "highVulnerabilityCount", + "mediumVulnerabilityCount", + "lowVulnerabilityCount", + "offline", + "pendingRebootReason" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 6, + "i": "c3d4e5f6-7890-1234-def0-345678901235", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "operatingSystems", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "needsReboot", + "operation": "equals", + "value": "true" + } + ] + }, + "id": "{{dataStreams.operatingSystems}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Devices Needing Reboot", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "buildNumber", + "lastBootTime", + "needsReboot" + ], + "hiddenColumns": [ + "deviceId", + "manufacturer", + "architecture", + "releaseId" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 6, + "i": "d4e5f678-9012-3456-ef01-456789012346", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "software", + "id": "{{dataStreams.software}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recently Installed Software", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "publisher", + "version", + "installDate", + "size" + ], + "hiddenColumns": [ + "deviceId", + "location", + "productCode" + ], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/scopes.json b/plugins/NinjaOne/v1/defaultContent/scopes.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/scopes.json @@ -0,0 +1 @@ +[] diff --git a/plugins/NinjaOne/v1/docs/README.md b/plugins/NinjaOne/v1/docs/README.md new file mode 100644 index 0000000..8f0b9ff --- /dev/null +++ b/plugins/NinjaOne/v1/docs/README.md @@ -0,0 +1,77 @@ +# Before you start + +To use this data source, you will need to create OAuth2 API credentials in your NinjaOne portal. + +## Create NinjaOne API Credentials + +1. Log in to your NinjaOne portal +2. Navigate to **Administration** > **API** > **Add Application** +3. Configure the application: + - **Application Name**: Enter a descriptive name (e.g., "SquaredUp Integration") + - **Redirect URI**: Use the URI provided by SquaredUp when adding the data source + - **Scopes**: Select the following scopes: + - `monitoring` - Required for device monitoring data + - `management` - Required for management operations + - `control` - Required for control operations + - `offline_access` - Required for refresh tokens +4. Click **Create Application** +5. Copy the **Client ID** and **Client Secret** - you will need these when configuring the plugin in SquaredUp + +## Configure the Plugin in SquaredUp + +When adding the NinjaOne data source in SquaredUp, you will need to provide: + +1. **NinjaOne Instance**: Select your NinjaOne instance region + - US (us.ninjarmm.com) - United States + - EU (eu.ninjarmm.com) - Europe + - Canada (ca.ninjarmm.com) - Canada + - OC (oc.ninjarmm.com) - Oceania + +2. **API Base URL**: Select your NinjaOne API endpoint + - US (us-api.ninjarmm.com) - United States + - EU (eu-api.ninjarmm.com) - Europe + - Canada (ca-api.ninjarmm.com) - Canada + - OC (oc-api.ninjarmm.com) - Oceania + +3. **Client ID**: Paste the Client ID from your NinjaOne API application + +4. **Client Secret**: Paste the Client Secret from your NinjaOne API application + +## Available Data Streams + +This plugin provides the following data streams for monitoring your NinjaOne environment: + +### Core Monitoring +- **Devices** - All managed devices with status and organization details +- **Alerts** - Active alerts across all devices +- **Policies** - Configuration policies applied to devices +- **Organizations** - Customer/organization information +- **Activities** - Recent activity log + +### Health & Security +- **Device Health** - Comprehensive health overview including threats, patches, and vulnerabilities +- **Antivirus Status** - Antivirus product status and definition updates +- **OS Patches** - OS patch compliance with pending, failed, and installed status +- **Volumes** - Disk volumes with capacity, free space, and BitLocker status + +### System Information +- **Disks** - Physical disk inventory with SMART status +- **Network Interfaces** - Network adapters with IP, MAC, and link speed +- **Processors** - CPU information and specifications +- **Operating Systems** - OS details with reboot requirements +- **Software** - Installed software inventory +- **Windows Services** - Windows service status and configurations +- **Logged On Users** - Last logged-on user activity + +## Troubleshooting + +**Authentication Failed**: Ensure your Client ID and Client Secret are correct and that the redirect URI matches what was configured in NinjaOne. + +**No Data Returned**: Verify that the selected API Base URL matches your NinjaOne instance region. + +**Insufficient Permissions**: Ensure the API application has all required scopes (`monitoring`, `management`, `control`, `offline_access`). + +## Additional Resources + +- [NinjaOne API Documentation](https://app.ninjarmm.com/apidocs/) +- [NinjaOne Support](https://support.ninjaone.com/) diff --git a/plugins/NinjaOne/v1/indexDefinitions/default.json b/plugins/NinjaOne/v1/indexDefinitions/default.json new file mode 100644 index 0000000..77e088a --- /dev/null +++ b/plugins/NinjaOne/v1/indexDefinitions/default.json @@ -0,0 +1,40 @@ +{ + "steps": [ + { + "name": "organizations", + "dataStream": { + "name": "organisations" + }, + "timeframe": "none", + "objectMapping": { + "id": "id", + "name": "name", + "type": "NinjaOne Organization", + "properties": [ + { "organizationId": "id" }, + "description", + "nodeApprovalMode" + ] + } + }, + { + "name": "devices", + "dataStream": { + "name": "devices" + }, + "timeframe": "none", + "objectMapping": { + "id": "id", + "name": "displayName", + "type": "NinjaOne Device", + "properties": [ + { "deviceId": "id" }, + { "organizationId": "organizationId" }, + { "locationId": "locationId" }, + "systemName", + "offline" + ] + } + } + ] +} diff --git a/plugins/NinjaOne/v1/metadata.json b/plugins/NinjaOne/v1/metadata.json index 2f59834..ff34d75 100644 --- a/plugins/NinjaOne/v1/metadata.json +++ b/plugins/NinjaOne/v1/metadata.json @@ -1,12 +1,12 @@ { "name": "ninja-one", "displayName": "NinjaOne", - "version": "1.0.0", + "version": "1.1.0", "author": { "name": "Dan Watts", "type": "community" }, - "description": "Dashboard and Monitor your NinjaOne device data", + "description": "Monitor device health, patch compliance, security status, and system information across your NinjaOne environment", "category": "Monitoring", "type": "cloud", "schemaVersion": "2.0", @@ -29,5 +29,17 @@ "oauth2TokenUrl": "{{instanceUrl}}/oauth/token", "oauth2Scope": "monitoring management control offline_access" } - } + }, + "links": [ + { + "category": "documentation", + "url": "https://github.com/squaredup/plugins/blob/main/plugins/NinjaOne/v1/docs/README.md", + "label": "Help adding this plugin" + }, + { + "category": "source", + "url": "https://github.com/squaredup/plugins/tree/main/plugins/NinjaOne/v1", + "label": "Repository" + } + ] } From 71b31da9c869ae3c2068df07ecd72a609b1ee577 Mon Sep 17 00:00:00 2001 From: Daniel Watts <34212312+Deenk@users.noreply.github.com> Date: Mon, 23 Mar 2026 10:38:47 +0000 Subject: [PATCH 3/3] commit big restructure changes --- plugins/NinjaOne/v1/custom_types.json | 7 + .../NinjaOne/v1/dataStreams/activities.json | 5 +- plugins/NinjaOne/v1/dataStreams/alerts.json | 5 +- .../v1/dataStreams/antivirusStatus.json | 41 +- .../v1/dataStreams/antivirusThreats.json | 100 +++ .../NinjaOne/v1/dataStreams/backupUsage.json | 99 +++ .../v1/dataStreams/computerSystems.json | 84 +++ .../NinjaOne/v1/dataStreams/deviceGroups.json | 74 +++ .../NinjaOne/v1/dataStreams/deviceHealth.json | 15 +- plugins/NinjaOne/v1/dataStreams/devices.json | 4 + plugins/NinjaOne/v1/dataStreams/disks.json | 54 +- plugins/NinjaOne/v1/dataStreams/jobs.json | 109 ++++ .../NinjaOne/v1/dataStreams/locations.json | 84 +++ .../v1/dataStreams/loggedOnUsers.json | 16 +- .../v1/dataStreams/networkInterfaces.json | 60 +- .../v1/dataStreams/operatingSystems.json | 54 +- ...{organisations.json => organizations.json} | 10 +- .../NinjaOne/v1/dataStreams/osPatches.json | 46 +- plugins/NinjaOne/v1/dataStreams/policies.json | 58 +- .../v1/dataStreams/policyOverrides.json | 89 +++ .../NinjaOne/v1/dataStreams/processors.json | 22 +- plugins/NinjaOne/v1/dataStreams/software.json | 30 +- .../v1/dataStreams/softwarePatches.json | 100 +++ plugins/NinjaOne/v1/dataStreams/tasks.json | 104 +++ .../NinjaOne/v1/dataStreams/ticketBoards.json | 74 +++ plugins/NinjaOne/v1/dataStreams/tickets.json | 114 ++++ plugins/NinjaOne/v1/dataStreams/volumes.json | 43 +- .../v1/dataStreams/windowsServices.json | 44 +- .../Devices/deviceDetail.dash.json | 609 ++++++++++++++++++ .../TicketBoards/ticketBoard.dash.json | 530 +++++++++++++++ .../v1/defaultContent/activityLog.dash.json | 402 ++++++++++++ .../defaultContent/backupManagement.dash.json | 381 +++++++++++ .../defaultContent/deviceOverview.dash.json | 348 ++++++++-- .../v1/defaultContent/jobsTasks.dash.json | 572 ++++++++++++++++ .../NinjaOne/v1/defaultContent/manifest.json | 28 + .../organizationOverview.dash.json | 439 +++++++++++++ .../defaultContent/patchManagement.dash.json | 438 +++++++++++-- .../NinjaOne/v1/defaultContent/scopes.json | 33 +- .../defaultContent/securityOverview.dash.json | 463 +++++++++++++ plugins/NinjaOne/v1/docs/README.md | 62 +- .../NinjaOne/v1/indexDefinitions/default.json | 27 +- plugins/NinjaOne/v1/metadata.json | 10 +- plugins/NinjaOne/v1/ui.json | 96 ++- 43 files changed, 5567 insertions(+), 416 deletions(-) create mode 100644 plugins/NinjaOne/v1/dataStreams/antivirusThreats.json create mode 100644 plugins/NinjaOne/v1/dataStreams/backupUsage.json create mode 100644 plugins/NinjaOne/v1/dataStreams/computerSystems.json create mode 100644 plugins/NinjaOne/v1/dataStreams/deviceGroups.json create mode 100644 plugins/NinjaOne/v1/dataStreams/jobs.json create mode 100644 plugins/NinjaOne/v1/dataStreams/locations.json rename plugins/NinjaOne/v1/dataStreams/{organisations.json => organizations.json} (77%) create mode 100644 plugins/NinjaOne/v1/dataStreams/policyOverrides.json create mode 100644 plugins/NinjaOne/v1/dataStreams/softwarePatches.json create mode 100644 plugins/NinjaOne/v1/dataStreams/tasks.json create mode 100644 plugins/NinjaOne/v1/dataStreams/ticketBoards.json create mode 100644 plugins/NinjaOne/v1/dataStreams/tickets.json create mode 100644 plugins/NinjaOne/v1/defaultContent/Devices/deviceDetail.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/TicketBoards/ticketBoard.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/activityLog.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/backupManagement.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/jobsTasks.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/organizationOverview.dash.json create mode 100644 plugins/NinjaOne/v1/defaultContent/securityOverview.dash.json diff --git a/plugins/NinjaOne/v1/custom_types.json b/plugins/NinjaOne/v1/custom_types.json index 81a7b79..b541981 100644 --- a/plugins/NinjaOne/v1/custom_types.json +++ b/plugins/NinjaOne/v1/custom_types.json @@ -12,5 +12,12 @@ "icon": "desktop", "singular": "Device", "plural": "Devices" + }, + { + "name": "NinjaOne Ticket Board", + "sourceType": "NinjaOne", + "icon": "kanban", + "singular": "Ticket Board", + "plural": "Ticket Boards" } ] diff --git a/plugins/NinjaOne/v1/dataStreams/activities.json b/plugins/NinjaOne/v1/dataStreams/activities.json index 9b1be15..7330b82 100644 --- a/plugins/NinjaOne/v1/dataStreams/activities.json +++ b/plugins/NinjaOne/v1/dataStreams/activities.json @@ -7,8 +7,9 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/activities", + "pathToData": "activities", "getArgs": [], "headers": [] }, @@ -26,4 +27,4 @@ "lastYear", "none" ] -} \ No newline at end of file +} diff --git a/plugins/NinjaOne/v1/dataStreams/alerts.json b/plugins/NinjaOne/v1/dataStreams/alerts.json index e5bc5e5..56a3c51 100644 --- a/plugins/NinjaOne/v1/dataStreams/alerts.json +++ b/plugins/NinjaOne/v1/dataStreams/alerts.json @@ -7,8 +7,9 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/alerts", + "pathToData": "", "getArgs": [], "headers": [] }, @@ -26,4 +27,4 @@ "lastYear", "none" ] -} \ No newline at end of file +} diff --git a/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json index 525db60..9e2f066 100644 --- a/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json +++ b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json @@ -8,22 +8,13 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/antivirus-status", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, - { - "name": "productName", - "displayName": "Product Name", - "role": "label" - }, { "name": "productState", "displayName": "Product State", @@ -39,24 +30,28 @@ } ] }, + { + "name": "productName", + "displayName": "Product Name", + "shape": "string", + "role": "label" + }, { "name": "definitionStatus", "displayName": "Definition Status", - "shape": [ - "state", - { - "map": { - "error": ["outdated", "old"], - "success": ["up-to-date", "current"], - "warning": [], - "unknown": [] - } - } - ] + "shape": "string" }, { "name": "version", - "displayName": "Version" + "displayName": "Version", + "shape": "string" + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false }, { "name": "timestamp", diff --git a/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json b/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json new file mode 100644 index 0000000..3bf8518 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json @@ -0,0 +1,100 @@ +{ + "name": "antivirusThreats", + "displayName": "Antivirus Threats", + "description": "Detected antivirus threats with quarantine status", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/queries/antivirus-threats", + "pathToData": "results", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["active", "detected"], + "warning": ["quarantined", "remediation_failed"], + "success": ["removed", "cleaned"], + "unknown": [] + } + } + ] + }, + { + "name": "name", + "displayName": "Threat Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "visible": false + }, + { + "name": "severity", + "displayName": "Severity", + "shape": "string" + }, + { + "name": "category", + "displayName": "Category", + "shape": "string" + }, + { + "name": "path", + "displayName": "File Path", + "shape": "string" + }, + { + "name": "detectedAt", + "displayName": "Detected At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "actionTaken", + "displayName": "Action Taken", + "shape": "string" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/backupUsage.json b/plugins/NinjaOne/v1/dataStreams/backupUsage.json new file mode 100644 index 0000000..993efe1 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/backupUsage.json @@ -0,0 +1,99 @@ +{ + "name": "backupUsage", + "displayName": "Backup Usage", + "description": "Backup storage usage by organization and location", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/queries/backup/usage", + "pathToData": "results", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "organizationName", + "displayName": "Organization", + "shape": "string", + "role": "label" + }, + { + "name": "locationId", + "displayName": "Location ID", + "shape": "string" + }, + { + "name": "locationName", + "displayName": "Location", + "shape": "string" + }, + { + "name": "usedBytes", + "displayName": "Used (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "includedBytes", + "displayName": "Included (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "overageBytes", + "displayName": "Overage (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "deviceCount", + "displayName": "Device Count", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/computerSystems.json b/plugins/NinjaOne/v1/dataStreams/computerSystems.json new file mode 100644 index 0000000..1f3a618 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/computerSystems.json @@ -0,0 +1,84 @@ +{ + "name": "computerSystems", + "displayName": "Computer Systems", + "description": "Hardware information including manufacturer, model, and serial number", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/queries/computer-systems", + "pathToData": "results", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "manufacturer", + "displayName": "Manufacturer", + "shape": "string", + "role": "label" + }, + { + "name": "model", + "displayName": "Model", + "shape": "string" + }, + { + "name": "serialNumber", + "displayName": "Serial Number", + "shape": "string" + }, + { + "name": "systemType", + "displayName": "System Type", + "shape": "string" + }, + { + "name": "totalPhysicalMemory", + "displayName": "Total Memory (Bytes)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "domain", + "displayName": "Domain", + "shape": "string" + }, + { + "name": "workgroup", + "displayName": "Workgroup", + "shape": "string" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/deviceGroups.json b/plugins/NinjaOne/v1/dataStreams/deviceGroups.json new file mode 100644 index 0000000..3a59f43 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/deviceGroups.json @@ -0,0 +1,74 @@ +{ + "name": "deviceGroups", + "displayName": "Device Groups", + "description": "Device groups for filtering and organization", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/groups", + "pathToData": "", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "name", + "displayName": "Group Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Group ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "type", + "displayName": "Type", + "shape": "string" + }, + { + "name": "deviceCount", + "displayName": "Device Count", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "name": "isDynamic", + "displayName": "Dynamic", + "shape": "boolean" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/deviceHealth.json b/plugins/NinjaOne/v1/dataStreams/deviceHealth.json index 4e62d59..3cd776f 100644 --- a/plugins/NinjaOne/v1/dataStreams/deviceHealth.json +++ b/plugins/NinjaOne/v1/dataStreams/deviceHealth.json @@ -8,17 +8,13 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/device-health", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, { "name": "healthStatus", "displayName": "Health Status", @@ -34,6 +30,13 @@ } ] }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "activeThreatsCount", "displayName": "Active Threats", diff --git a/plugins/NinjaOne/v1/dataStreams/devices.json b/plugins/NinjaOne/v1/dataStreams/devices.json index 33e5fad..7bc1209 100644 --- a/plugins/NinjaOne/v1/dataStreams/devices.json +++ b/plugins/NinjaOne/v1/dataStreams/devices.json @@ -12,6 +12,10 @@ "getArgs": [], "headers": [] }, + "manualConfigApply": true, + "matches": "none", + "rowPath": [], + "metadata": [], "timeframes": [ "last1hour", "last12hours", diff --git a/plugins/NinjaOne/v1/dataStreams/disks.json b/plugins/NinjaOne/v1/dataStreams/disks.json index b31f63a..e7e91dd 100644 --- a/plugins/NinjaOne/v1/dataStreams/disks.json +++ b/plugins/NinjaOne/v1/dataStreams/disks.json @@ -8,33 +8,55 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/disks", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ { - "name": "deviceId", - "role": "id", - "visible": false + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["error", "failed", "pred fail"], + "success": ["ok"], + "warning": ["warning"], + "unknown": [] + } + } + ] }, { "name": "name", "displayName": "Disk Name", + "shape": "string", "role": "label" }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "model", - "displayName": "Model" + "displayName": "Model", + "shape": "string" }, { "name": "manufacturer", - "displayName": "Manufacturer" + "displayName": "Manufacturer", + "shape": "string" }, { "name": "mediaType", - "displayName": "Media Type" + "displayName": "Media Type", + "shape": "string" }, { "name": "size", @@ -48,22 +70,8 @@ }, { "name": "interfaceType", - "displayName": "Interface" - }, - { - "name": "status", - "displayName": "Status", - "shape": [ - "state", - { - "map": { - "error": ["error", "failed", "pred fail"], - "success": ["ok"], - "warning": ["warning"], - "unknown": [] - } - } - ] + "displayName": "Interface", + "shape": "string" }, { "name": "smartCapable", diff --git a/plugins/NinjaOne/v1/dataStreams/jobs.json b/plugins/NinjaOne/v1/dataStreams/jobs.json new file mode 100644 index 0000000..52f0128 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/jobs.json @@ -0,0 +1,109 @@ +{ + "name": "jobs", + "displayName": "Jobs", + "description": "Script and patch job execution status", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/jobs", + "pathToData": "", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["failed", "error"], + "warning": ["running", "in_progress", "pending"], + "success": ["completed", "success"], + "unknown": [] + } + } + ] + }, + { + "name": "name", + "displayName": "Job Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Job ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "type", + "displayName": "Type", + "shape": "string" + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string" + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "startedAt", + "displayName": "Started At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "completedAt", + "displayName": "Completed At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "duration", + "displayName": "Duration (seconds)", + "shape": [ + "number", + { + "decimalPlaces": 0 + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/locations.json b/plugins/NinjaOne/v1/dataStreams/locations.json new file mode 100644 index 0000000..be46184 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/locations.json @@ -0,0 +1,84 @@ +{ + "name": "locations", + "displayName": "Locations", + "description": "Organization locations and sites", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/locations", + "pathToData": "", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "name", + "displayName": "Location Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Location ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "organizationName", + "displayName": "Organization", + "shape": "string" + }, + { + "name": "description", + "displayName": "Description", + "shape": "string" + }, + { + "name": "address", + "displayName": "Address", + "shape": "string" + }, + { + "name": "city", + "displayName": "City", + "shape": "string" + }, + { + "name": "country", + "displayName": "Country", + "shape": "string" + }, + { + "name": "timezone", + "displayName": "Timezone", + "shape": "string" + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json b/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json index 4603474..ba0392b 100644 --- a/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json +++ b/plugins/NinjaOne/v1/dataStreams/loggedOnUsers.json @@ -8,22 +8,26 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/logged-on-users", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, { "name": "userName", "displayName": "User Name", + "shape": "string", "role": "label" }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "logonTime", "displayName": "Logon Time", diff --git a/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json b/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json index 96f845b..bab63ab 100644 --- a/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json +++ b/plugins/NinjaOne/v1/dataStreams/networkInterfaces.json @@ -8,41 +8,65 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/network-interfaces", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ { - "name": "deviceId", - "role": "id", - "visible": false + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["down", "disabled"], + "success": ["up", "connected"], + "warning": ["degraded"], + "unknown": [] + } + } + ] }, { "name": "interfaceName", "displayName": "Interface Name", + "shape": "string", "role": "label" }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "adapterName", - "displayName": "Adapter Name" + "displayName": "Adapter Name", + "shape": "string" }, { "name": "ipAddress", - "displayName": "IP Address" + "displayName": "IP Address", + "shape": "string" }, { "name": "macAddress", - "displayName": "MAC Address" + "displayName": "MAC Address", + "shape": "string" }, { "name": "subnetMask", - "displayName": "Subnet Mask" + "displayName": "Subnet Mask", + "shape": "string" }, { "name": "defaultGateway", - "displayName": "Default Gateway" + "displayName": "Default Gateway", + "shape": "string" }, { "name": "linkSpeed", @@ -54,24 +78,10 @@ } ] }, - { - "name": "status", - "displayName": "Status", - "shape": [ - "state", - { - "map": { - "error": ["down", "disabled"], - "success": ["up", "connected"], - "warning": ["degraded"], - "unknown": [] - } - } - ] - }, { "name": "interfaceType", - "displayName": "Interface Type" + "displayName": "Interface Type", + "shape": "string" }, { "name": "mtu", diff --git a/plugins/NinjaOne/v1/dataStreams/operatingSystems.json b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json index 7f0204e..dfd0f0d 100644 --- a/plugins/NinjaOne/v1/dataStreams/operatingSystems.json +++ b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json @@ -8,37 +8,60 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/operating-systems", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ { - "name": "deviceId", - "role": "id", - "visible": false + "name": "needsReboot", + "displayName": "Needs Reboot", + "shape": [ + "state", + { + "map": { + "error": ["true"], + "success": ["false"], + "warning": [], + "unknown": [] + } + } + ] }, { "name": "name", "displayName": "OS Name", + "shape": "string", "role": "label" }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "manufacturer", - "displayName": "Manufacturer" + "displayName": "Manufacturer", + "shape": "string" }, { "name": "architecture", - "displayName": "Architecture" + "displayName": "Architecture", + "shape": "string" }, { "name": "buildNumber", - "displayName": "Build Number" + "displayName": "Build Number", + "shape": "string" }, { "name": "releaseId", - "displayName": "Release ID" + "displayName": "Release ID", + "shape": "string" }, { "name": "lastBootTime", @@ -50,21 +73,6 @@ } ] }, - { - "name": "needsReboot", - "displayName": "Needs Reboot", - "shape": [ - "state", - { - "map": { - "error": ["true"], - "success": ["false"], - "warning": [], - "unknown": [] - } - } - ] - }, { "pattern": ".*" } diff --git a/plugins/NinjaOne/v1/dataStreams/organisations.json b/plugins/NinjaOne/v1/dataStreams/organizations.json similarity index 77% rename from plugins/NinjaOne/v1/dataStreams/organisations.json rename to plugins/NinjaOne/v1/dataStreams/organizations.json index fbaaf38..45b5cd8 100644 --- a/plugins/NinjaOne/v1/dataStreams/organisations.json +++ b/plugins/NinjaOne/v1/dataStreams/organizations.json @@ -1,6 +1,6 @@ { - "name": "organisations", - "displayName": "Organisations", + "name": "organizations", + "displayName": "Organizations", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -12,6 +12,10 @@ "getArgs": [], "headers": [] }, + "manualConfigApply": true, + "matches": "none", + "rowPath": [], + "metadata": [], "timeframes": [ "last1hour", "last12hours", @@ -26,4 +30,4 @@ "lastYear", "none" ] -} \ No newline at end of file +} diff --git a/plugins/NinjaOne/v1/dataStreams/osPatches.json b/plugins/NinjaOne/v1/dataStreams/osPatches.json index 5b6c069..fb8286c 100644 --- a/plugins/NinjaOne/v1/dataStreams/osPatches.json +++ b/plugins/NinjaOne/v1/dataStreams/osPatches.json @@ -8,22 +8,13 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/os-patches", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "id", - "role": "id", - "visible": false - }, - { - "name": "name", - "displayName": "Patch Name", - "role": "label" - }, { "name": "status", "displayName": "Status", @@ -39,17 +30,39 @@ } ] }, + { + "name": "name", + "displayName": "Patch Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "severity", - "displayName": "Severity" + "displayName": "Severity", + "shape": "string" }, { "name": "type", - "displayName": "Type" + "displayName": "Type", + "shape": "string" }, { "name": "kbNumber", - "displayName": "KB Number" + "displayName": "KB Number", + "shape": "string" + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "visible": false }, { "name": "installedAt", @@ -61,11 +74,6 @@ } ] }, - { - "name": "deviceId", - "displayName": "Device ID", - "visible": false - }, { "pattern": ".*" } diff --git a/plugins/NinjaOne/v1/dataStreams/policies.json b/plugins/NinjaOne/v1/dataStreams/policies.json index 0ae367b..aece2b3 100644 --- a/plugins/NinjaOne/v1/dataStreams/policies.json +++ b/plugins/NinjaOne/v1/dataStreams/policies.json @@ -7,11 +7,65 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/policies", + "pathToData": "", "getArgs": [], "headers": [] }, + "metadata": [ + { + "name": "name", + "displayName": "Policy Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Policy ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "description", + "displayName": "Description", + "shape": "string" + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "enabled", + "displayName": "Enabled", + "shape": "boolean" + }, + { + "name": "created", + "displayName": "Created At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "updated", + "displayName": "Updated At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], "timeframes": [ "last1hour", "last12hours", @@ -26,4 +80,4 @@ "lastYear", "none" ] -} \ No newline at end of file +} diff --git a/plugins/NinjaOne/v1/dataStreams/policyOverrides.json b/plugins/NinjaOne/v1/dataStreams/policyOverrides.json new file mode 100644 index 0000000..a059917 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/policyOverrides.json @@ -0,0 +1,89 @@ +{ + "name": "policyOverrides", + "displayName": "Policy Overrides", + "description": "Device policy exceptions and overrides", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/queries/policy-overrides", + "pathToData": "results", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "policyId", + "displayName": "Policy ID", + "shape": "string" + }, + { + "name": "policyName", + "displayName": "Policy Name", + "shape": "string", + "role": "label" + }, + { + "name": "conditionType", + "displayName": "Condition Type", + "shape": "string" + }, + { + "name": "conditionId", + "displayName": "Condition ID", + "shape": "string" + }, + { + "name": "enabled", + "displayName": "Enabled", + "shape": "boolean" + }, + { + "name": "createdAt", + "displayName": "Created At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "updatedAt", + "displayName": "Updated At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/processors.json b/plugins/NinjaOne/v1/dataStreams/processors.json index 971dbe3..bf374f1 100644 --- a/plugins/NinjaOne/v1/dataStreams/processors.json +++ b/plugins/NinjaOne/v1/dataStreams/processors.json @@ -8,29 +8,35 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/processors", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, { "name": "name", "displayName": "Processor Name", + "shape": "string", "role": "label" }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, { "name": "manufacturer", - "displayName": "Manufacturer" + "displayName": "Manufacturer", + "shape": "string" }, { "name": "architecture", - "displayName": "Architecture" + "displayName": "Architecture", + "shape": "string" }, { "name": "numCores", diff --git a/plugins/NinjaOne/v1/dataStreams/software.json b/plugins/NinjaOne/v1/dataStreams/software.json index 5761ea4..6268e5a 100644 --- a/plugins/NinjaOne/v1/dataStreams/software.json +++ b/plugins/NinjaOne/v1/dataStreams/software.json @@ -2,35 +2,39 @@ "name": "software", "displayName": "Software", "description": "Installed software inventory", - "baseDataSourceName": "httpRequestUnscoped", + "baseDataSourceName": "httpRequestScoped", "config": { "httpMethod": "get", "paging": { "mode": "none" }, - "expandInnerObjects": true, - "endpointPath": "/v2/queries/software", + "expandInnerObjects": false, + "endpointPath": "/v2/device/{{objects[0].properties.deviceId}}/software", "getArgs": [], "headers": [] }, + "matches": { + "sourceType": { + "type": "oneOf", + "values": ["NinjaOne Device"] + } + }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, { "name": "name", "displayName": "Software Name", + "shape": "string", "role": "label" }, { "name": "publisher", - "displayName": "Publisher" + "displayName": "Publisher", + "shape": "string" }, { "name": "version", - "displayName": "Version" + "displayName": "Version", + "shape": "string" }, { "name": "installDate", @@ -54,11 +58,13 @@ }, { "name": "location", - "displayName": "Location" + "displayName": "Location", + "shape": "string" }, { "name": "productCode", - "displayName": "Product Code" + "displayName": "Product Code", + "shape": "string" }, { "pattern": ".*" diff --git a/plugins/NinjaOne/v1/dataStreams/softwarePatches.json b/plugins/NinjaOne/v1/dataStreams/softwarePatches.json new file mode 100644 index 0000000..a81fe9d --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/softwarePatches.json @@ -0,0 +1,100 @@ +{ + "name": "softwarePatches", + "displayName": "Software Patches", + "description": "Third-party software patch compliance status including pending, failed, and installed patches", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/queries/software-patches", + "pathToData": "results", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["failed", "rejected"], + "warning": ["pending"], + "success": ["installed"], + "unknown": [] + } + } + ] + }, + { + "name": "name", + "displayName": "Patch Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "softwareName", + "displayName": "Software", + "shape": "string" + }, + { + "name": "softwarePublisher", + "displayName": "Publisher", + "shape": "string" + }, + { + "name": "severity", + "displayName": "Severity", + "shape": "string" + }, + { + "name": "version", + "displayName": "Version", + "shape": "string" + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "visible": false + }, + { + "name": "installedAt", + "displayName": "Installed At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/tasks.json b/plugins/NinjaOne/v1/dataStreams/tasks.json new file mode 100644 index 0000000..b4b1a7f --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/tasks.json @@ -0,0 +1,104 @@ +{ + "name": "tasks", + "displayName": "Tasks", + "description": "Scheduled and running automation tasks", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": false, + "endpointPath": "/v2/tasks", + "pathToData": "", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "status", + "displayName": "Status", + "shape": [ + "state", + { + "map": { + "error": ["failed", "cancelled"], + "warning": ["running", "pending"], + "success": ["completed", "success"], + "unknown": [] + } + } + ] + }, + { + "name": "name", + "displayName": "Task Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Task ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "type", + "displayName": "Type", + "shape": "string" + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "createdAt", + "displayName": "Created At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "startedAt", + "displayName": "Started At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "completedAt", + "displayName": "Completed At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/ticketBoards.json b/plugins/NinjaOne/v1/dataStreams/ticketBoards.json new file mode 100644 index 0000000..0269fbf --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/ticketBoards.json @@ -0,0 +1,74 @@ +{ + "name": "ticketBoards", + "displayName": "Ticket Boards", + "description": "Ticketing boards for organizing and viewing tickets", + "baseDataSourceName": "httpRequestUnscoped", + "config": { + "httpMethod": "get", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/ticketing/trigger/boards", + "pathToData": "", + "getArgs": [], + "headers": [] + }, + "metadata": [ + { + "name": "name", + "displayName": "Board Name", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Board ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "description", + "displayName": "Description", + "shape": "string" + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "isPublic", + "displayName": "Public", + "shape": "boolean" + }, + { + "name": "createdAt", + "displayName": "Created At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/tickets.json b/plugins/NinjaOne/v1/dataStreams/tickets.json new file mode 100644 index 0000000..f6f9493 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/tickets.json @@ -0,0 +1,114 @@ +{ + "name": "tickets", + "displayName": "Tickets", + "description": "Tickets from a specific board", + "baseDataSourceName": "httpRequestScoped", + "config": { + "httpMethod": "post", + "paging": { + "mode": "none" + }, + "expandInnerObjects": true, + "endpointPath": "/v2/ticketing/trigger/board/{{objects[0].boardId}}/run", + "pathToData": "data", + "getArgs": [], + "headers": [], + "postBody": { + "pageSize": 100, + "filters": [] + } + }, + "matches": { + "sourceType": { + "type": "oneOf", + "values": ["NinjaOne Ticket Board"] + } + }, + "metadata": [ + { + "name": "status", + "displayName": "Status", + "shape": "string" + }, + { + "name": "subject", + "displayName": "Subject", + "shape": "string", + "role": "label" + }, + { + "name": "id", + "displayName": "Ticket ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "ticketNumber", + "displayName": "Ticket Number", + "shape": "string" + }, + { + "name": "priority", + "displayName": "Priority", + "shape": "string" + }, + { + "name": "type", + "displayName": "Type", + "shape": "string" + }, + { + "name": "requesterName", + "displayName": "Requester", + "shape": "string" + }, + { + "name": "assigneeName", + "displayName": "Assignee", + "shape": "string" + }, + { + "name": "organizationId", + "displayName": "Organization ID", + "shape": "string" + }, + { + "name": "createdAt", + "displayName": "Created At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "name": "updatedAt", + "displayName": "Updated At", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, + { + "pattern": ".*" + } + ], + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ] +} diff --git a/plugins/NinjaOne/v1/dataStreams/volumes.json b/plugins/NinjaOne/v1/dataStreams/volumes.json index 67330ce..26840b1 100644 --- a/plugins/NinjaOne/v1/dataStreams/volumes.json +++ b/plugins/NinjaOne/v1/dataStreams/volumes.json @@ -2,39 +2,44 @@ "name": "volumes", "displayName": "Volumes", "description": "Disk volumes with capacity, free space, and BitLocker status", - "baseDataSourceName": "httpRequestUnscoped", + "baseDataSourceName": "httpRequestScoped", "config": { "httpMethod": "get", "paging": { "mode": "none" }, "expandInnerObjects": true, - "endpointPath": "/v2/queries/volumes", + "endpointPath": "/v2/device/{{objects[0].properties.deviceId}}/volumes", "getArgs": [], "headers": [] }, + "matches": { + "sourceType": { + "type": "oneOf", + "values": ["NinjaOne Device"] + } + }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, { "name": "name", "displayName": "Volume Name", + "shape": "string", "role": "label" }, { "name": "driveLetter", - "displayName": "Drive Letter" + "displayName": "Drive Letter", + "shape": "string" }, { "name": "label", - "displayName": "Label" + "displayName": "Label", + "shape": "string" }, { "name": "fileSystem", - "displayName": "File System" + "displayName": "File System", + "shape": "string" }, { "name": "capacity", @@ -56,24 +61,10 @@ } ] }, - { - "name": "bitLockerStatus", - "displayName": "BitLocker Status", - "shape": [ - "state", - { - "map": { - "error": ["off", "disabled"], - "success": ["on", "encrypted"], - "warning": ["partial"], - "unknown": [] - } - } - ] - }, { "name": "serialNumber", - "displayName": "Serial Number" + "displayName": "Serial Number", + "shape": "string" }, { "pattern": ".*" diff --git a/plugins/NinjaOne/v1/dataStreams/windowsServices.json b/plugins/NinjaOne/v1/dataStreams/windowsServices.json index ef83f95..a7597e1 100644 --- a/plugins/NinjaOne/v1/dataStreams/windowsServices.json +++ b/plugins/NinjaOne/v1/dataStreams/windowsServices.json @@ -8,26 +8,13 @@ "paging": { "mode": "none" }, - "expandInnerObjects": true, + "expandInnerObjects": false, "endpointPath": "/v2/queries/windows-services", + "pathToData": "results", "getArgs": [], "headers": [] }, "metadata": [ - { - "name": "deviceId", - "role": "id", - "visible": false - }, - { - "name": "name", - "displayName": "Service Name", - "role": "label" - }, - { - "name": "displayName", - "displayName": "Display Name" - }, { "name": "state", "displayName": "State", @@ -43,17 +30,38 @@ } ] }, + { + "name": "name", + "displayName": "Service Name", + "shape": "string", + "role": "label" + }, + { + "name": "deviceId", + "displayName": "Device ID", + "shape": "string", + "role": "id", + "visible": false + }, + { + "name": "displayName", + "displayName": "Display Name", + "shape": "string" + }, { "name": "startType", - "displayName": "Start Type" + "displayName": "Start Type", + "shape": "string" }, { "name": "userName", - "displayName": "Account" + "displayName": "Account", + "shape": "string" }, { "name": "description", - "displayName": "Description" + "displayName": "Description", + "shape": "string" }, { "pattern": ".*" diff --git a/plugins/NinjaOne/v1/defaultContent/Devices/deviceDetail.dash.json b/plugins/NinjaOne/v1/defaultContent/Devices/deviceDetail.dash.json new file mode 100644 index 0000000..c33222c --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/Devices/deviceDetail.dash.json @@ -0,0 +1,609 @@ +{ + "name": "Device Detail", + "schemaVersion": "1.4", + "path": "devices/device-detail", + "variables": ["{{variables.[NinjaOne Device]}}"], + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "dev-kpi-alerts-001", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.deviceHealth}}", + "name": "deviceHealth", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["alertCount"] + } + ] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Alert Count", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "alertCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "dev-kpi-threats-002", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.deviceHealth}}", + "name": "deviceHealth", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["activeThreatsCount"] + } + ] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Active Threats", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "activeThreatsCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "dev-kpi-patches-003", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.deviceHealth}}", + "name": "deviceHealth", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["pendingOSPatchesCount", "pendingSoftwarePatchesCount"] + } + ] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Pending Patches", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "pendingOSPatchesCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "dev-kpi-vuln-004", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.deviceHealth}}", + "name": "deviceHealth", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["criticalVulnerabilityCount"] + } + ] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Critical Vulnerabilities", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "criticalVulnerabilityCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "dev-bar-storage-001", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.volumes}}", + "name": "volumes" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Storage Volumes", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "type": "data-stream-bar-chart", + "config": { + "data-stream-bar-chart": { + "xAxisData": "driveLetter", + "yAxisData": ["capacity", "freeSpace"], + "xAxisGroup": "none", + "xAxisLabel": "Drive", + "yAxisLabel": "Bytes", + "showXAxisLabel": true, + "showYAxisLabel": true, + "showLegend": true, + "legendPosition": "bottom", + "showGrid": true, + "showValue": false, + "showTotals": false, + "displayMode": "actual", + "horizontalLayout": "vertical", + "grouping": false, + "range": { "type": "auto" } + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "d1a2b3c4-5d6e-7890-abcd-ef12345678d1", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "datastream-properties", + "name": "properties" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Device Properties", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["name", "sourceId", "sourceType", "label"], + "hiddenColumns": ["id", "links", "type"], + "transpose": true + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 0, + "y": 6, + "i": "d5e6f7890-1234-5678-ef01-12345678d5", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.computerSystems}}", + "name": "computerSystems" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Computer System", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "manufacturer", + "model", + "serialNumber", + "systemType", + "totalPhysicalMemory", + "domain", + "workgroup" + ], + "hiddenColumns": ["deviceId"], + "transpose": true + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 2, + "y": 6, + "i": "d2b3c4d5-6e7f-8901-bcde-f12345678d2", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.volumes}}", + "name": "volumes" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Storage Volumes Detail", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "driveLetter", + "label", + "capacity", + "freeSpace", + "fileSystem", + "serialNumber" + ], + "hiddenColumns": [], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 9, + "i": "d4d5e6f7-8901-2345-def0-12345678d4", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.software}}", + "name": "software" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Installed Software", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["name", "publisher", "version", "installDate", "size"], + "hiddenColumns": ["location", "productCode"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 2, + "y": 9, + "i": "d7g789012-3456-7890-f012-12345678d7", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.processors}}", + "name": "processors" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Processors", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "manufacturer", + "architecture", + "numCores", + "numLogicalCores", + "maxClockSpeed", + "clockSpeed" + ], + "hiddenColumns": ["deviceId"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 0, + "y": 13, + "i": "d8h789012-3456-7890-f012-12345678d8", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.disks}}", + "name": "disks" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Physical Disks", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "status", + "model", + "manufacturer", + "mediaType", + "size", + "smartCapable", + "partitionCount" + ], + "hiddenColumns": ["deviceId", "interfaceType"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 2, + "y": 13, + "i": "d9i789012-3456-7890-f012-12345678d9", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.networkInterfaces}}", + "name": "networkInterfaces" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Network Interfaces", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "interfaceName", + "status", + "adapterName", + "ipAddress", + "macAddress", + "subnetMask", + "defaultGateway", + "linkSpeed", + "interfaceType", + "mtu" + ], + "hiddenColumns": ["deviceId"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 0, + "y": 16, + "i": "d0j789012-3456-7890-f012-12345678d0", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.loggedOnUsers}}", + "name": "loggedOnUsers" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Logged On Users", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["userName", "logonTime"], + "hiddenColumns": ["deviceId"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 4, + "x": 0, + "y": 19, + "i": "d1k789012-3456-7890-f012-12345678k1", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.windowsServices}}", + "name": "windowsServices" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Devices]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Device]}}" + }, + "timeframe": "none", + "title": "Windows Services", + "variables": ["{{variables.[NinjaOne Device]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["name", "displayName", "state", "startType", "userName", "description"], + "hiddenColumns": ["deviceId"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/TicketBoards/ticketBoard.dash.json b/plugins/NinjaOne/v1/defaultContent/TicketBoards/ticketBoard.dash.json new file mode 100644 index 0000000..14860e8 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/TicketBoards/ticketBoard.dash.json @@ -0,0 +1,530 @@ +{ + "name": "Ticket Board", + "schemaVersion": "1.4", + "path": "ticket-boards/ticket-board", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "tkt-kpi-total-001", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Total Tickets", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "tkt-kpi-open-002", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "open" + } + ] + }, + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Open Tickets", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "tkt-kpi-high-003", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "priority", + "operation": "equals", + "value": "high" + } + ] + }, + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "High Priority", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "tkt-kpi-critical-004", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "priority", + "operation": "equals", + "value": "critical" + } + ] + }, + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Critical", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "tkt-donut-status-001", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Tickets by Status", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "tkt-donut-priority-001", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.tickets}}", + "name": "tickets", + "metadata": [ + { + "name": "priority_uniqueValues", + "displayName": "Priority" + } + ], + "group": { + "by": [["priority", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + } + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Tickets by Priority", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "priority_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 0, + "y": 6, + "i": "t1a2b3c4-5d6e-7890-abcd-ef12345678t1", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "datastream-properties", + "name": "properties" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Board Properties", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["name", "sourceId", "sourceType", "label"], + "hiddenColumns": ["id", "links", "type"], + "transpose": true + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 2, + "y": 6, + "i": "t2b3c4d5-6e7f-8901-bcde-f12345678t2", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.ticketBoards}}", + "name": "ticketBoards" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Board Information", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": ["name", "description", "organizationId", "isPublic", "createdAt"], + "hiddenColumns": ["id"], + "transpose": true + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 6, + "x": 0, + "y": 9, + "i": "t3c4d5e6-7f89-0123-cdef-12345678t3", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "id": "{{dataStreams.tickets}}", + "name": "tickets" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "All Tickets", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "ticketNumber", + "subject", + "status", + "priority", + "type", + "requesterName", + "assigneeName", + "organizationId", + "createdAt", + "updatedAt" + ], + "hiddenColumns": ["id"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 15, + "i": "t4d5e6f7-8901-2345-def0-12345678t4", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "open" + } + ] + }, + "id": "{{dataStreams.tickets}}", + "name": "tickets" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "Open Tickets", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "ticketNumber", + "subject", + "priority", + "type", + "assigneeName", + "createdAt" + ], + "hiddenColumns": ["id", "status", "requesterName", "organizationId", "updatedAt"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 15, + "i": "t5e6f7890-1234-5678-ef01-12345678t5", + "z": 0, + "config": { + "_type": "tile/data-stream", + "dataStream": { + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "priority", + "operation": "equals", + "value": "critical" + }, + { + "column": "priority", + "operation": "equals", + "value": "high" + } + ] + }, + "id": "{{dataStreams.tickets}}", + "name": "tickets" + }, + "description": "", + "scope": { + "scope": "{{scopes.[NinjaOne Ticket Boards]}}", + "workspace": "{{workspaceId}}", + "variable": "{{variables.[NinjaOne Ticket Board]}}" + }, + "timeframe": "none", + "title": "High Priority Tickets", + "variables": ["{{variables.[NinjaOne Ticket Board]}}"], + "visualisation": { + "config": { + "data-stream-table": { + "columnOrder": [ + "ticketNumber", + "subject", + "status", + "priority", + "assigneeName", + "createdAt" + ], + "hiddenColumns": ["id", "type", "requesterName", "organizationId", "updatedAt"], + "transpose": false + } + }, + "type": "data-stream-table" + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/activityLog.dash.json b/plugins/NinjaOne/v1/defaultContent/activityLog.dash.json new file mode 100644 index 0000000..54400c8 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/activityLog.dash.json @@ -0,0 +1,402 @@ +{ + "name": "Activity Log", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "act-kpi-total-001", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Activities", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "act-kpi-failed-002", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "failed" + }, + { + "column": "status", + "operation": "equals", + "value": "error" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed Activities", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "act-kpi-alerts-003", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "alerts", + "id": "{{dataStreams.alerts}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Alerts", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "act-kpi-warnings-004", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "warning" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Warnings", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "act-bar-type-001", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "metadata": [ + { + "name": "activityType_uniqueValues", + "displayName": "Activity Type" + } + ], + "group": { + "by": [["activityType", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "sort": { + "top": 10, + "by": [["count", "desc"]] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Activities by Type", + "visualisation": { + "type": "data-stream-bar-chart", + "config": { + "data-stream-bar-chart": { + "xAxisData": "activityType_uniqueValues", + "yAxisData": ["count"], + "xAxisGroup": "none", + "xAxisLabel": "Activity Type", + "yAxisLabel": "Count", + "showXAxisLabel": true, + "showYAxisLabel": true, + "showLegend": false, + "legendPosition": "bottom", + "showGrid": true, + "showValue": true, + "showTotals": false, + "displayMode": "actual", + "horizontalLayout": "vertical", + "grouping": false, + "range": { "type": "auto" } + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "act-donut-status-001", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Activities by Status", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 6, + "x": 0, + "y": 6, + "i": "a1a2b3c4-5d6e-7890-abcd-ef12345678a1", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "activities", + "id": "{{dataStreams.activities}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Activities", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "activityType", + "displayName", + "status", + "organizationId", + "deviceId", + "userId", + "createdAt" + ], + "hiddenColumns": ["id"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 12, + "i": "a2b3c4d5-6e7f-8901-bcde-f12345678a2", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "activities", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "failed" + }, + { + "column": "status", + "operation": "equals", + "value": "error" + } + ] + }, + "id": "{{dataStreams.activities}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed Activities", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["activityType", "displayName", "status", "organizationId", "createdAt"], + "hiddenColumns": ["id", "deviceId", "userId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 12, + "i": "a3c4d5e6-7f89-0123-cdef-12345678a3", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "alerts", + "id": "{{dataStreams.alerts}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Alerts", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["displayName", "severity", "status", "createdAt"], + "hiddenColumns": ["id", "deviceId", "organizationId"], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/backupManagement.dash.json b/plugins/NinjaOne/v1/defaultContent/backupManagement.dash.json new file mode 100644 index 0000000..d759c14 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/backupManagement.dash.json @@ -0,0 +1,381 @@ +{ + "name": "Backup Management", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "backup-kpi-used-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["usedBytes"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Storage Used", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "usedBytes_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "backup-kpi-overage-002", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["overageBytes"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Overage", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "overageBytes_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "backup-kpi-devices-003", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["deviceCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Devices Backed Up", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "deviceCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "backup-kpi-locations-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Backup Locations", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "backup-bar-usage-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Backup Storage by Organization", + "visualisation": { + "type": "data-stream-bar-chart", + "config": { + "data-stream-bar-chart": { + "xAxisData": "organizationName", + "yAxisData": ["usedBytes", "includedBytes", "overageBytes"], + "xAxisGroup": "none", + "xAxisLabel": "Organization", + "yAxisLabel": "Bytes", + "showXAxisLabel": true, + "showYAxisLabel": true, + "showLegend": true, + "legendPosition": "bottom", + "showGrid": true, + "showValue": false, + "showTotals": false, + "displayMode": "actual", + "horizontalLayout": "vertical", + "grouping": false, + "range": { "type": "auto" } + } + } + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 4, + "x": 0, + "y": 6, + "i": "b1a2b3c4-5d6e-7890-abcd-ef12345678b1", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Backup Storage Usage by Location", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "organizationName", + "locationName", + "usedBytes", + "includedBytes", + "overageBytes", + "deviceCount" + ], + "hiddenColumns": ["organizationId", "locationId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 10, + "i": "b2b3c4d5-6e7f-8901-bcde-f12345678b2", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Device Health Overview", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["healthStatus", "offline", "alertCount"], + "hiddenColumns": [ + "deviceId", + "activeThreatsCount", + "quarantinedThreatsCount", + "pendingOSPatchesCount", + "failedOSPatchesCount", + "pendingSoftwarePatchesCount", + "failedSoftwarePatchesCount", + "criticalVulnerabilityCount", + "highVulnerabilityCount", + "mediumVulnerabilityCount", + "lowVulnerabilityCount" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 10, + "i": "b3c4d5e6-7f89-0123-cdef-12345678b3", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "type", + "operation": "equals", + "value": "backup" + } + ] + }, + "id": "{{dataStreams.jobs}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Backup Jobs", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "status", "startedAt", "completedAt", "duration"], + "hiddenColumns": ["id", "type", "deviceId", "organizationId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 4, + "x": 0, + "y": 14, + "i": "b4d5e6f7-8901-2345-def0-12345678b4", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "alerts", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "displayName", + "operation": "contains", + "value": "backup" + } + ] + }, + "id": "{{dataStreams.alerts}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Backup-Related Alerts", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["displayName", "severity", "status", "createdAt"], + "hiddenColumns": ["id", "deviceId", "organizationId"], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json b/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json index ddf6e4d..2ea05b1 100644 --- a/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json +++ b/plugins/NinjaOne/v1/defaultContent/deviceOverview.dash.json @@ -5,13 +5,177 @@ "_type": "layout/grid", "columns": 4, "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "kpi-devices-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "devices", + "id": "{{dataStreams.devices}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Devices", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "kpi-offline-002", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "devices", + "id": "{{dataStreams.devices}}", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "offline", + "operation": "equals", + "value": "true" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Offline Devices", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "kpi-criticalvuln-003", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["criticalVulnerabilityCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Critical Vulnerabilities", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "criticalVulnerabilityCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "kpi-activethreats-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["activeThreatsCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Active Threats", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "activeThreatsCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, { "static": false, "w": 2, "moved": false, "h": 4, "x": 0, - "y": 0, + "y": 2, "i": "a1b2c3d4-5e6f-7890-abcd-ef1234567890", "z": 0, "config": { @@ -35,18 +199,17 @@ "alertCount", "pendingOSPatchesCount", "failedOSPatchesCount", + "pendingSoftwarePatchesCount", + "failedSoftwarePatchesCount", "criticalVulnerabilityCount", + "highVulnerabilityCount", "offline" ], "hiddenColumns": [ "deviceId", "quarantinedThreatsCount", - "failedSoftwarePatchesCount", - "pendingSoftwarePatchesCount", - "highVulnerabilityCount", "mediumVulnerabilityCount", - "lowVulnerabilityCount", - "pendingRebootReason" + "lowVulnerabilityCount" ], "transpose": false } @@ -60,11 +223,11 @@ "moved": false, "h": 4, "x": 2, - "y": 0, + "y": 2, "i": "b2c3d4e5-6f78-9012-cdef-234567890123", "z": 0, "config": { - "timeframe": "none", + "timeframe": "last24hours", "dataStream": { "name": "alerts", "id": "{{dataStreams.alerts}}", @@ -78,17 +241,8 @@ "type": "data-stream-table", "config": { "data-stream-table": { - "columnOrder": [ - "displayName", - "severity", - "status", - "createdAt" - ], - "hiddenColumns": [ - "id", - "deviceId", - "organizationId" - ], + "columnOrder": ["displayName", "severity", "status", "createdAt"], + "hiddenColumns": ["id", "deviceId", "organizationId"], "transpose": false } } @@ -99,10 +253,42 @@ "static": false, "w": 2, "moved": false, - "h": 4, + "h": 3, "x": 0, - "y": 4, - "i": "c3d4e5f6-7890-1234-def0-345678901234", + "y": 6, + "i": "f1a2b3c4-5d6e-7890-abcd-ef1234567891", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "antivirusThreats", + "id": "{{dataStreams.antivirusThreats}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Antivirus Threats", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "status", "severity", "category", "detectedAt", "actionTaken"], + "hiddenColumns": ["id", "deviceId", "path"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 3, + "x": 2, + "y": 6, + "i": "f2b3c4d5-6e7f-8901-bcde-f12345678902", "z": 0, "config": { "timeframe": "none", @@ -126,9 +312,7 @@ "version", "timestamp" ], - "hiddenColumns": [ - "deviceId" - ], + "hiddenColumns": ["deviceId"], "transpose": false } } @@ -139,40 +323,28 @@ "static": false, "w": 2, "moved": false, - "h": 4, - "x": 2, - "y": 4, - "i": "d4e5f678-9012-3456-ef01-456789012345", + "h": 3, + "x": 0, + "y": 9, + "i": "c3d4e5f6-7890-1234-def0-345678901234", "z": 0, "config": { "timeframe": "none", "dataStream": { - "name": "volumes", - "id": "{{dataStreams.volumes}}", + "name": "operatingSystems", + "id": "{{dataStreams.operatingSystems}}", "pluginConfigId": "{{configId}}" }, "_type": "tile/data-stream", "description": "", "activePluginConfigIds": ["{{configId}}"], - "title": "Storage Volumes", + "title": "Operating Systems", "visualisation": { "type": "data-stream-table", "config": { "data-stream-table": { - "columnOrder": [ - "name", - "driveLetter", - "capacity", - "freeSpace", - "bitLockerStatus" - ], - "hiddenColumns": [ - "deviceId", - "label", - "fileSystem", - "serialNumber", - "deviceType" - ], + "columnOrder": ["name", "architecture", "buildNumber", "lastBootTime", "needsReboot"], + "hiddenColumns": ["deviceId", "manufacturer", "releaseId"], "transpose": false } } @@ -183,51 +355,93 @@ "static": false, "w": 2, "moved": false, - "h": 4, - "x": 0, - "y": 8, - "i": "e5f67890-1234-5678-f012-567890123456", + "h": 3, + "x": 2, + "y": 9, + "i": "f3c4d5e6-7f89-0123-cdef-123456789003", "z": 0, "config": { "timeframe": "none", "dataStream": { - "name": "operatingSystems", - "id": "{{dataStreams.operatingSystems}}", + "name": "computerSystems", + "id": "{{dataStreams.computerSystems}}", "pluginConfigId": "{{configId}}" }, "_type": "tile/data-stream", "description": "", "activePluginConfigIds": ["{{configId}}"], - "title": "Operating Systems", + "title": "Computer Systems", "visualisation": { "type": "data-stream-table", "config": { "data-stream-table": { "columnOrder": [ - "name", - "architecture", - "buildNumber", - "lastBootTime", - "needsReboot" - ], - "hiddenColumns": [ - "deviceId", "manufacturer", - "releaseId" + "model", + "serialNumber", + "systemType", + "domain", + "workgroup" ], + "hiddenColumns": ["deviceId", "totalPhysicalMemory"], "transpose": false } } } } }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 12, + "i": "d4e5f678-9012-3456-ef01-456789012345", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "backupUsage", + "id": "{{dataStreams.backupUsage}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Backup Usage by Location", + "visualisation": { + "type": "data-stream-bar-chart", + "config": { + "data-stream-bar-chart": { + "xAxisData": "locationName", + "yAxisData": ["usedBytes", "includedBytes"], + "xAxisGroup": "none", + "xAxisLabel": "Location", + "yAxisLabel": "Bytes", + "showXAxisLabel": true, + "showYAxisLabel": true, + "showLegend": true, + "legendPosition": "bottom", + "showGrid": true, + "showValue": false, + "showTotals": false, + "displayMode": "actual", + "horizontalLayout": "horizontal", + "grouping": false, + "range": { "type": "auto" } + } + } + } + } + }, { "static": false, "w": 2, "moved": false, "h": 4, "x": 2, - "y": 8, + "y": 12, "i": "f6789012-3456-7890-0123-678901234567", "z": 0, "config": { @@ -252,13 +466,7 @@ "lastContact", "organizationId" ], - "hiddenColumns": [ - "id", - "uid", - "nodeClass", - "locationId", - "policyId" - ], + "hiddenColumns": ["id", "uid", "nodeClass", "locationId", "policyId"], "transpose": false } } diff --git a/plugins/NinjaOne/v1/defaultContent/jobsTasks.dash.json b/plugins/NinjaOne/v1/defaultContent/jobsTasks.dash.json new file mode 100644 index 0000000..e17dc29 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/jobsTasks.dash.json @@ -0,0 +1,572 @@ +{ + "name": "Jobs & Tasks", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "job-kpi-running-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "jobs", + "id": "{{dataStreams.jobs}}", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "running" + }, + { + "column": "status", + "operation": "equals", + "value": "in_progress" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Running Jobs", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "job-kpi-failed-002", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "id": "{{dataStreams.jobs}}", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "failed" + }, + { + "column": "status", + "operation": "equals", + "value": "error" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed Jobs", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "job-kpi-completed-003", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "id": "{{dataStreams.jobs}}", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "completed" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Completed Jobs", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "job-kpi-activetasks-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "tasks", + "id": "{{dataStreams.tasks}}", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "running" + }, + { + "column": "status", + "operation": "equals", + "value": "pending" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Active Tasks", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "job-donut-status-001", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "id": "{{dataStreams.jobs}}", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Jobs by Status", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "task-donut-status-001", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "tasks", + "id": "{{dataStreams.tasks}}", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Tasks by Status", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 5, + "x": 0, + "y": 6, + "i": "j1a2b3c4-5d6e-7890-abcd-ef12345678j1", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "id": "{{dataStreams.jobs}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Jobs", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "type", + "status", + "organizationId", + "startedAt", + "completedAt", + "duration" + ], + "hiddenColumns": ["id", "deviceId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 5, + "x": 2, + "y": 6, + "i": "j2b3c4d5-6e7f-8901-bcde-f12345678j2", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "tasks", + "id": "{{dataStreams.tasks}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Tasks", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "type", + "status", + "organizationId", + "createdAt", + "startedAt", + "completedAt" + ], + "hiddenColumns": ["id"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 11, + "i": "j3c4d5e6-7f89-0123-cdef-12345678j3", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "jobs", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "failed" + }, + { + "column": "status", + "operation": "equals", + "value": "error" + } + ] + }, + "id": "{{dataStreams.jobs}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed Jobs", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "type", "status", "deviceId", "startedAt", "completedAt"], + "hiddenColumns": ["id", "organizationId", "duration"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 11, + "i": "j4d5e6f7-8901-2345-def0-12345678j4", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "tasks", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "failed" + }, + { + "column": "status", + "operation": "equals", + "value": "cancelled" + } + ] + }, + "id": "{{dataStreams.tasks}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed Tasks", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "type", "status", "organizationId", "startedAt", "completedAt"], + "hiddenColumns": ["id", "createdAt"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 15, + "i": "j5e6f7890-1234-5678-ef01-12345678j5", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "jobs", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "running" + }, + { + "column": "status", + "operation": "equals", + "value": "in_progress" + }, + { + "column": "status", + "operation": "equals", + "value": "pending" + } + ] + }, + "id": "{{dataStreams.jobs}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Active Jobs", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "type", "status", "deviceId", "startedAt"], + "hiddenColumns": ["id", "organizationId", "completedAt", "duration"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 15, + "i": "j6f789012-3456-7890-f012-12345678j6", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "tasks", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "status", + "operation": "equals", + "value": "running" + }, + { + "column": "status", + "operation": "equals", + "value": "pending" + } + ] + }, + "id": "{{dataStreams.tasks}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Active Tasks", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "type", "status", "organizationId", "startedAt"], + "hiddenColumns": ["id", "createdAt", "completedAt"], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/manifest.json b/plugins/NinjaOne/v1/defaultContent/manifest.json index 0eb8f20..e48f42f 100644 --- a/plugins/NinjaOne/v1/defaultContent/manifest.json +++ b/plugins/NinjaOne/v1/defaultContent/manifest.json @@ -7,6 +7,34 @@ { "name": "patchManagement", "type": "dashboard" + }, + { + "name": "securityOverview", + "type": "dashboard" + }, + { + "name": "backupManagement", + "type": "dashboard" + }, + { + "name": "organizationOverview", + "type": "dashboard" + }, + { + "name": "jobsTasks", + "type": "dashboard" + }, + { + "name": "activityLog", + "type": "dashboard" + }, + { + "name": "Devices/deviceDetail", + "type": "dashboard" + }, + { + "name": "TicketBoards/ticketBoard", + "type": "dashboard" } ] } diff --git a/plugins/NinjaOne/v1/defaultContent/organizationOverview.dash.json b/plugins/NinjaOne/v1/defaultContent/organizationOverview.dash.json new file mode 100644 index 0000000..a20a9dc --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/organizationOverview.dash.json @@ -0,0 +1,439 @@ +{ + "name": "Organization Overview", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "org-kpi-orgs-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "organizations", + "id": "{{dataStreams.organizations}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Organizations", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "org-kpi-locations-002", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "locations", + "id": "{{dataStreams.locations}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Locations", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "org-kpi-devices-003", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "devices", + "id": "{{dataStreams.devices}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Devices", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "org-kpi-policies-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "policies", + "id": "{{dataStreams.policies}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Policies", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "org-bar-groups-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceGroups", + "id": "{{dataStreams.deviceGroups}}", + "sort": { + "top": 10, + "by": [["deviceCount", "desc"]] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Device Groups by Size", + "visualisation": { + "type": "data-stream-bar-chart", + "config": { + "data-stream-bar-chart": { + "xAxisData": "name", + "yAxisData": ["deviceCount"], + "xAxisGroup": "none", + "xAxisLabel": "Group", + "yAxisLabel": "Devices", + "showXAxisLabel": true, + "showYAxisLabel": true, + "showLegend": false, + "legendPosition": "bottom", + "showGrid": true, + "showValue": true, + "showTotals": false, + "displayMode": "actual", + "horizontalLayout": "horizontal", + "grouping": false, + "range": { "type": "auto" } + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "org-bar-tickets-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "ticketBoards", + "id": "{{dataStreams.ticketBoards}}", + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Ticket Boards", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 6, + "i": "o1a2b3c4-5d6e-7890-abcd-ef12345678o1", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "organizations", + "id": "{{dataStreams.organizations}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Organizations", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "id", "description"], + "hiddenColumns": [], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 6, + "i": "o2b3c4d5-6e7f-8901-bcde-f12345678o2", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "locations", + "id": "{{dataStreams.locations}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Locations", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "organizationName", "city", "country", "timezone"], + "hiddenColumns": ["id", "organizationId", "description", "address"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 10, + "i": "o3c4d5e6-7f89-0123-cdef-12345678o3", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceGroups", + "id": "{{dataStreams.deviceGroups}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Device Groups", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "organizationId", "type", "deviceCount", "isDynamic"], + "hiddenColumns": ["id"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 10, + "i": "o4d5e6f7-8901-2345-def0-12345678o4", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "policies", + "id": "{{dataStreams.policies}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Policies", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "id", "description"], + "hiddenColumns": [], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 14, + "i": "o5e6f7890-1234-5678-ef01-12345678o5", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "devices", + "id": "{{dataStreams.devices}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "All Devices", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "displayName", + "systemName", + "organizationId", + "locationId", + "policyId", + "offline", + "lastContact" + ], + "hiddenColumns": ["id", "uid", "nodeClass"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 14, + "i": "o6f789012-3456-7890-f012-12345678o6", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "ticketBoards", + "id": "{{dataStreams.ticketBoards}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Ticket Boards", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "organizationId", "description", "isPublic", "createdAt"], + "hiddenColumns": ["id"], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json b/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json index 9ea900f..9b28fe3 100644 --- a/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json +++ b/plugins/NinjaOne/v1/defaultContent/patchManagement.dash.json @@ -7,11 +7,270 @@ "contents": [ { "static": false, - "w": 2, + "w": 1, "moved": false, - "h": 6, + "h": 2, "x": 0, "y": 0, + "i": "patch-kpi-pendingos-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["pendingOSPatchesCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Pending OS Patches", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "pendingOSPatchesCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "patch-kpi-failedos-002", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["failedOSPatchesCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Failed OS Patches", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "failedOSPatchesCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "patch-kpi-pendingsoft-003", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["pendingSoftwarePatchesCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Pending Software Patches", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "pendingSoftwarePatchesCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "patch-kpi-reboot-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "operatingSystems", + "id": "{{dataStreams.operatingSystems}}", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "needsReboot", + "operation": "equals", + "value": "true" + } + ] + }, + "group": { + "by": [], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Need Reboot", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "count", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "patch-donut-osstatus-001", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "osPatches", + "id": "{{dataStreams.osPatches}}", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "OS Patches by Status", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "patch-donut-softstatus-002", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "softwarePatches", + "id": "{{dataStreams.softwarePatches}}", + "metadata": [ + { + "name": "status_uniqueValues", + "displayName": "Status" + } + ], + "group": { + "by": [["status", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Software Patches by Status", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "status_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 5, + "x": 0, + "y": 6, "i": "a1b2c3d4-5e6f-7890-abcd-ef1234567891", "z": 0, "config": { @@ -25,22 +284,52 @@ "description": "", "activePluginConfigIds": ["{{configId}}"], "title": "OS Patch Status", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "status", "severity", "type", "kbNumber", "installedAt"], + "hiddenColumns": ["id", "deviceId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 5, + "x": 2, + "y": 6, + "i": "b2c3d4e5-6f78-9012-cdef-234567890124", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "softwarePatches", + "id": "{{dataStreams.softwarePatches}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Software Patch Status", "visualisation": { "type": "data-stream-table", "config": { "data-stream-table": { "columnOrder": [ "name", + "softwareName", + "softwarePublisher", "status", "severity", - "type", - "kbNumber", + "version", "installedAt" ], - "hiddenColumns": [ - "id", - "deviceId" - ], + "hiddenColumns": ["id", "deviceId"], "transpose": false } } @@ -51,13 +340,55 @@ "static": false, "w": 2, "moved": false, - "h": 6, + "h": 4, + "x": 0, + "y": 11, + "i": "c3d4e5f6-7890-1234-def0-345678901235", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "operatingSystems", + "filter": { + "multiOperation": "and", + "filters": [ + { + "column": "needsReboot", + "operation": "equals", + "value": "true" + } + ] + }, + "id": "{{dataStreams.operatingSystems}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Devices Needing Reboot", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["name", "buildNumber", "lastBootTime", "needsReboot"], + "hiddenColumns": ["deviceId", "manufacturer", "architecture", "releaseId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, "x": 2, - "y": 0, - "i": "b2c3d4e5-6f78-9012-cdef-234567890124", + "y": 11, + "i": "p1a2b3c4-5d6e-7890-abcd-ef12345678a1", "z": 0, "config": { - "timeframe": "last7days", + "timeframe": "none", "dataStream": { "name": "deviceHealth", "id": "{{dataStreams.deviceHealth}}", @@ -72,11 +403,11 @@ "config": { "data-stream-table": { "columnOrder": [ + "healthStatus", "pendingOSPatchesCount", "failedOSPatchesCount", "pendingSoftwarePatchesCount", - "failedSoftwarePatchesCount", - "healthStatus" + "failedSoftwarePatchesCount" ], "hiddenColumns": [ "deviceId", @@ -87,8 +418,7 @@ "highVulnerabilityCount", "mediumVulnerabilityCount", "lowVulnerabilityCount", - "offline", - "pendingRebootReason" + "offline" ], "transpose": false } @@ -102,46 +432,26 @@ "moved": false, "h": 4, "x": 0, - "y": 6, - "i": "c3d4e5f6-7890-1234-def0-345678901235", + "y": 15, + "i": "p2b3c4d5-6e7f-8901-bcde-f12345678a2", "z": 0, "config": { "timeframe": "none", "dataStream": { - "name": "operatingSystems", - "filter": { - "multiOperation": "and", - "filters": [ - { - "column": "needsReboot", - "operation": "equals", - "value": "true" - } - ] - }, - "id": "{{dataStreams.operatingSystems}}", + "name": "policyOverrides", + "id": "{{dataStreams.policyOverrides}}", "pluginConfigId": "{{configId}}" }, "_type": "tile/data-stream", "description": "", "activePluginConfigIds": ["{{configId}}"], - "title": "Devices Needing Reboot", + "title": "Policy Overrides", "visualisation": { "type": "data-stream-table", "config": { "data-stream-table": { - "columnOrder": [ - "name", - "buildNumber", - "lastBootTime", - "needsReboot" - ], - "hiddenColumns": [ - "deviceId", - "manufacturer", - "architecture", - "releaseId" - ], + "columnOrder": ["policyName", "conditionType", "enabled", "createdAt", "updatedAt"], + "hiddenColumns": ["deviceId", "policyId", "conditionId"], "transpose": false } } @@ -154,36 +464,46 @@ "moved": false, "h": 4, "x": 2, - "y": 6, + "y": 15, "i": "d4e5f678-9012-3456-ef01-456789012346", "z": 0, "config": { "timeframe": "last7days", "dataStream": { - "name": "software", - "id": "{{dataStreams.software}}", + "name": "jobs", + "filter": { + "multiOperation": "or", + "filters": [ + { + "column": "type", + "operation": "equals", + "value": "patch" + }, + { + "column": "type", + "operation": "equals", + "value": "os_patch" + }, + { + "column": "type", + "operation": "equals", + "value": "software_patch" + } + ] + }, + "id": "{{dataStreams.jobs}}", "pluginConfigId": "{{configId}}" }, "_type": "tile/data-stream", "description": "", "activePluginConfigIds": ["{{configId}}"], - "title": "Recently Installed Software", + "title": "Recent Patch Jobs", "visualisation": { "type": "data-stream-table", "config": { "data-stream-table": { - "columnOrder": [ - "name", - "publisher", - "version", - "installDate", - "size" - ], - "hiddenColumns": [ - "deviceId", - "location", - "productCode" - ], + "columnOrder": ["name", "type", "status", "startedAt", "completedAt", "duration"], + "hiddenColumns": ["id", "deviceId", "organizationId"], "transpose": false } } diff --git a/plugins/NinjaOne/v1/defaultContent/scopes.json b/plugins/NinjaOne/v1/defaultContent/scopes.json index fe51488..a45a4f7 100644 --- a/plugins/NinjaOne/v1/defaultContent/scopes.json +++ b/plugins/NinjaOne/v1/defaultContent/scopes.json @@ -1 +1,32 @@ -[] +[ + { + "matches": { + "sourceType": { + "type": "oneOf", + "values": ["NinjaOne Device"] + } + }, + "name": "NinjaOne Devices", + "variable": { + "allowMultipleSelection": false, + "default": "none", + "name": "NinjaOne Device", + "type": "object" + } + }, + { + "matches": { + "sourceType": { + "type": "oneOf", + "values": ["NinjaOne Ticket Board"] + } + }, + "name": "NinjaOne Ticket Boards", + "variable": { + "allowMultipleSelection": false, + "default": "none", + "name": "NinjaOne Ticket Board", + "type": "object" + } + } +] diff --git a/plugins/NinjaOne/v1/defaultContent/securityOverview.dash.json b/plugins/NinjaOne/v1/defaultContent/securityOverview.dash.json new file mode 100644 index 0000000..f4df800 --- /dev/null +++ b/plugins/NinjaOne/v1/defaultContent/securityOverview.dash.json @@ -0,0 +1,463 @@ +{ + "name": "Security Overview", + "schemaVersion": "1.4", + "dashboard": { + "_type": "layout/grid", + "columns": 4, + "contents": [ + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 0, + "y": 0, + "i": "sec-kpi-activethreats-001", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["activeThreatsCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Active Threats", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "activeThreatsCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 1, + "y": 0, + "i": "sec-kpi-alertcount-002", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["alertCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Total Alerts", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "alertCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 2, + "y": 0, + "i": "sec-kpi-criticalvuln-003", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["criticalVulnerabilityCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Critical Vulnerabilities", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "criticalVulnerabilityCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 1, + "moved": false, + "h": 2, + "x": 3, + "y": 0, + "i": "sec-kpi-highvuln-004", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "group": { + "by": [], + "aggregate": [ + { + "type": "sum", + "names": ["highVulnerabilityCount"] + } + ] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "High Vulnerabilities", + "visualisation": { + "type": "data-stream-scalar", + "config": { + "data-stream-scalar": { + "value": "highVulnerabilityCount_sum", + "comparisonColumn": "none", + "formatted": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 2, + "i": "sec-donut-threats-001", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "antivirusThreats", + "id": "{{dataStreams.antivirusThreats}}", + "metadata": [ + { + "name": "severity_uniqueValues", + "displayName": "Severity" + } + ], + "group": { + "by": [["severity", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Threats by Severity", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "severity_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 2, + "i": "sec-donut-alerts-002", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "alerts", + "id": "{{dataStreams.alerts}}", + "metadata": [ + { + "name": "severity_uniqueValues", + "displayName": "Severity" + } + ], + "group": { + "by": [["severity", "uniqueValues"]], + "aggregate": [{ "type": "count" }] + }, + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Alerts by Severity", + "visualisation": { + "type": "data-stream-donut-chart", + "config": { + "data-stream-donut-chart": { + "labelColumn": "severity_uniqueValues", + "valueColumn": "count", + "showValuesAsPercentage": true, + "hideCenterValue": false, + "legendPosition": "auto", + "legendMode": "inline" + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 6, + "i": "s1a2b3c4-5d6e-7890-abcd-ef12345678s1", + "z": 0, + "config": { + "timeframe": "last7days", + "dataStream": { + "name": "antivirusThreats", + "id": "{{dataStreams.antivirusThreats}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Antivirus Threats", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "status", + "severity", + "category", + "detectedAt", + "actionTaken", + "path" + ], + "hiddenColumns": ["id", "deviceId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 6, + "i": "s2b3c4d5-6e7f-8901-bcde-f12345678s2", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "antivirusStatus", + "id": "{{dataStreams.antivirusStatus}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Antivirus Product Status", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "productName", + "productState", + "definitionStatus", + "version", + "timestamp" + ], + "hiddenColumns": ["deviceId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 0, + "y": 10, + "i": "s3c4d5e6-7f89-0123-cdef-12345678s3", + "z": 0, + "config": { + "timeframe": "last24hours", + "dataStream": { + "name": "alerts", + "id": "{{dataStreams.alerts}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Recent Security Alerts", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": ["displayName", "severity", "status", "createdAt"], + "hiddenColumns": ["id", "deviceId", "organizationId"], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 2, + "moved": false, + "h": 4, + "x": 2, + "y": 10, + "i": "s4d5e6f7-8901-2345-def0-12345678s4", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "deviceHealth", + "id": "{{dataStreams.deviceHealth}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Device Security Health", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "healthStatus", + "activeThreatsCount", + "quarantinedThreatsCount", + "alertCount", + "criticalVulnerabilityCount", + "highVulnerabilityCount" + ], + "hiddenColumns": [ + "deviceId", + "pendingOSPatchesCount", + "failedOSPatchesCount", + "pendingSoftwarePatchesCount", + "failedSoftwarePatchesCount", + "mediumVulnerabilityCount", + "lowVulnerabilityCount", + "offline" + ], + "transpose": false + } + } + } + } + }, + { + "static": false, + "w": 4, + "moved": false, + "h": 4, + "x": 0, + "y": 14, + "i": "s5e6f7890-1234-5678-ef01-12345678s5", + "z": 0, + "config": { + "timeframe": "none", + "dataStream": { + "name": "disks", + "id": "{{dataStreams.disks}}", + "pluginConfigId": "{{configId}}" + }, + "_type": "tile/data-stream", + "description": "", + "activePluginConfigIds": ["{{configId}}"], + "title": "Disk Health (SMART Status)", + "visualisation": { + "type": "data-stream-table", + "config": { + "data-stream-table": { + "columnOrder": [ + "name", + "status", + "model", + "manufacturer", + "mediaType", + "size", + "smartCapable", + "partitionCount" + ], + "hiddenColumns": ["deviceId", "interfaceType"], + "transpose": false + } + } + } + } + } + ] + } +} diff --git a/plugins/NinjaOne/v1/docs/README.md b/plugins/NinjaOne/v1/docs/README.md index 8f0b9ff..58a992e 100644 --- a/plugins/NinjaOne/v1/docs/README.md +++ b/plugins/NinjaOne/v1/docs/README.md @@ -7,13 +7,13 @@ To use this data source, you will need to create OAuth2 API credentials in your 1. Log in to your NinjaOne portal 2. Navigate to **Administration** > **API** > **Add Application** 3. Configure the application: - - **Application Name**: Enter a descriptive name (e.g., "SquaredUp Integration") - - **Redirect URI**: Use the URI provided by SquaredUp when adding the data source - - **Scopes**: Select the following scopes: - - `monitoring` - Required for device monitoring data - - `management` - Required for management operations - - `control` - Required for control operations - - `offline_access` - Required for refresh tokens + - **Application Name**: Enter a descriptive name (e.g., "SquaredUp Integration") + - **Allowed Grant Types**: Ensure "Client Credentials" is enabled + - **Scopes**: Select the following scopes: + - `monitoring` - Required for device monitoring data + - `management` - Required for management operations + - `control` - Required for control operations + - `offline_access` - Required for refresh tokens 4. Click **Create Application** 5. Copy the **Client ID** and **Client Secret** - you will need these when configuring the plugin in SquaredUp @@ -21,53 +21,77 @@ To use this data source, you will need to create OAuth2 API credentials in your When adding the NinjaOne data source in SquaredUp, you will need to provide: -1. **NinjaOne Instance**: Select your NinjaOne instance region - - US (us.ninjarmm.com) - United States - - EU (eu.ninjarmm.com) - Europe - - Canada (ca.ninjarmm.com) - Canada - - OC (oc.ninjarmm.com) - Oceania +1. **Region**: Select your NinjaOne instance region -2. **API Base URL**: Select your NinjaOne API endpoint - - US (us-api.ninjarmm.com) - United States - - EU (eu-api.ninjarmm.com) - Europe - - Canada (ca-api.ninjarmm.com) - Canada - - OC (oc-api.ninjarmm.com) - Oceania + - US + - EU + - Canada + - OC + +2. **API Region**: Select your NinjaOne API region (should match your instance region) + + - US + - EU + - Canada + - OC 3. **Client ID**: Paste the Client ID from your NinjaOne API application 4. **Client Secret**: Paste the Client Secret from your NinjaOne API application +That's it! The plugin will automatically authenticate using Client Credentials flow when you save the configuration. + ## Available Data Streams This plugin provides the following data streams for monitoring your NinjaOne environment: ### Core Monitoring + - **Devices** - All managed devices with status and organization details - **Alerts** - Active alerts across all devices - **Policies** - Configuration policies applied to devices - **Organizations** - Customer/organization information - **Activities** - Recent activity log +- **Device Groups** - Device groups for filtering and organization +- **Locations** - Organization locations and sites ### Health & Security + - **Device Health** - Comprehensive health overview including threats, patches, and vulnerabilities - **Antivirus Status** - Antivirus product status and definition updates +- **Antivirus Threats** - Detected antivirus threats with quarantine status - **OS Patches** - OS patch compliance with pending, failed, and installed status +- **Software Patches** - Third-party software patch compliance (Chrome, Adobe, etc.) - **Volumes** - Disk volumes with capacity, free space, and BitLocker status +- **Backup Usage** - Backup storage usage by organization and location ### System Information + - **Disks** - Physical disk inventory with SMART status - **Network Interfaces** - Network adapters with IP, MAC, and link speed - **Processors** - CPU information and specifications - **Operating Systems** - OS details with reboot requirements +- **Computer Systems** - Hardware information including manufacturer, model, and serial number - **Software** - Installed software inventory - **Windows Services** - Windows service status and configurations - **Logged On Users** - Last logged-on user activity +### Operations & Automation + +- **Tasks** - Scheduled and running automation tasks +- **Jobs** - Script and patch job execution status +- **Policy Overrides** - Device policy exceptions and overrides + +### Ticketing + +- **Ticket Boards** - Ticketing boards for organizing and viewing tickets +- **Tickets** - Tickets from a specific board (scoped to Ticket Board) + ## Troubleshooting -**Authentication Failed**: Ensure your Client ID and Client Secret are correct and that the redirect URI matches what was configured in NinjaOne. +**Authentication Failed**: Ensure your Client ID and Client Secret are correct and that "Client Credentials" is enabled as an allowed grant type in your NinjaOne API application. -**No Data Returned**: Verify that the selected API Base URL matches your NinjaOne instance region. +**No Data Returned**: Verify that the selected API Region matches your NinjaOne instance region. **Insufficient Permissions**: Ensure the API application has all required scopes (`monitoring`, `management`, `control`, `offline_access`). diff --git a/plugins/NinjaOne/v1/indexDefinitions/default.json b/plugins/NinjaOne/v1/indexDefinitions/default.json index 77e088a..f6c7a89 100644 --- a/plugins/NinjaOne/v1/indexDefinitions/default.json +++ b/plugins/NinjaOne/v1/indexDefinitions/default.json @@ -3,18 +3,14 @@ { "name": "organizations", "dataStream": { - "name": "organisations" + "name": "organizations" }, "timeframe": "none", "objectMapping": { "id": "id", "name": "name", - "type": "NinjaOne Organization", - "properties": [ - { "organizationId": "id" }, - "description", - "nodeApprovalMode" - ] + "type": { "value": "NinjaOne Organization" }, + "properties": [{ "organizationId": "id" }, "description", "nodeApprovalMode"] } }, { @@ -25,8 +21,8 @@ "timeframe": "none", "objectMapping": { "id": "id", - "name": "displayName", - "type": "NinjaOne Device", + "name": "systemName", + "type": { "value": "NinjaOne Device" }, "properties": [ { "deviceId": "id" }, { "organizationId": "organizationId" }, @@ -35,6 +31,19 @@ "offline" ] } + }, + { + "name": "ticketBoards", + "dataStream": { + "name": "ticketBoards" + }, + "timeframe": "none", + "objectMapping": { + "id": "id", + "name": "name", + "type": { "value": "NinjaOne Ticket Board" }, + "properties": [{ "boardId": "id" }, "description", "organizationId"] + } } ] } diff --git a/plugins/NinjaOne/v1/metadata.json b/plugins/NinjaOne/v1/metadata.json index ff34d75..3289e06 100644 --- a/plugins/NinjaOne/v1/metadata.json +++ b/plugins/NinjaOne/v1/metadata.json @@ -15,18 +15,14 @@ "majorVersion": "1", "config": { "queryArgs": [], - "oauth2TokenExtraArgs": [], - "oauth2ClientSecret": "{{clientSecret}}", - "oauth2ClientSecretLocationDuringAuth": "body", - "oauth2AuthUrl": "{{instanceUrl}}/oauth/authorize", - "oauth2TokenExtraHeaders": [], - "oauth2AuthExtraArgs": [], "headers": [], "authMode": "oauth2", - "oauth2GrantType": "authCode", + "oauth2GrantType": "clientCredentials", "baseUrl": "{{apiBaseUrl}}", "oauth2ClientId": "{{clientId}}", + "oauth2ClientSecret": "{{clientSecret}}", "oauth2TokenUrl": "{{instanceUrl}}/oauth/token", + "oauth2ClientSecretLocationDuringAuth": "body", "oauth2Scope": "monitoring management control offline_access" } }, diff --git a/plugins/NinjaOne/v1/ui.json b/plugins/NinjaOne/v1/ui.json index 24df549..d860048 100644 --- a/plugins/NinjaOne/v1/ui.json +++ b/plugins/NinjaOne/v1/ui.json @@ -1,73 +1,64 @@ [ { - "type": "autocomplete", + "type": "radio", "name": "instanceUrl", - "label": "NinjaOne Instance", - "title": "NinjaOne Instance", + "label": "Region", "help": "Select your NinjaOne instance region", + "defaultValue": "https://ca.ninjarmm.com", + "options": [ + { + "value": "https://app.ninjarmm.com", + "label": "US" + }, + { + "value": "https://eu.ninjarmm.com", + "label": "EU" + }, + { + "value": "https://ca.ninjarmm.com", + "label": "Canada" + }, + { + "value": "https://oc.ninjarmm.com", + "label": "OC" + } + ], "validation": { "required": true - }, - "defaultValue": "https://us.ninjarmm.com", - "data": { - "source": "fixed", - "values": [ - { - "label": "US (us.ninjarmm.com)", - "value": "https://us.ninjarmm.com" - }, - { - "label": "EU (eu.ninjarmm.com)", - "value": "https://eu.ninjarmm.com" - }, - { - "label": "Canada (ca.ninjarmm.com)", - "value": "https://ca.ninjarmm.com" - }, - { - "label": "OC (oc.ninjarmm.com)", - "value": "https://oc.ninjarmm.com" - } - ] } }, { - "type": "autocomplete", + "type": "radio", "name": "apiBaseUrl", - "label": "API Base URL", - "title": "API Base URL", - "help": "Select your NinjaOne API endpoint", + "label": "API Region", + "help": "Select your NinjaOne API region (should match your instance region)", + "defaultValue": "https://ca-api.ninjarmm.com", + "options": [ + { + "value": "https://api.ninjarmm.com", + "label": "US" + }, + { + "value": "https://eu-api.ninjarmm.com", + "label": "EU" + }, + { + "value": "https://ca-api.ninjarmm.com", + "label": "Canada" + }, + { + "value": "https://oc-api.ninjarmm.com", + "label": "OC" + } + ], "validation": { "required": true - }, - "defaultValue": "https://us-api.ninjarmm.com", - "data": { - "source": "fixed", - "values": [ - { - "label": "US (us-api.ninjarmm.com)", - "value": "https://us-api.ninjarmm.com" - }, - { - "label": "EU (eu-api.ninjarmm.com)", - "value": "https://eu-api.ninjarmm.com" - }, - { - "label": "Canada (ca-api.ninjarmm.com)", - "value": "https://ca-api.ninjarmm.com" - }, - { - "label": "OC (oc-api.ninjarmm.com)", - "value": "https://oc-api.ninjarmm.com" - } - ] } }, { "type": "text", "name": "clientId", "label": "Client ID", - "title": "OAuth Client ID", "help": "Enter the Client ID from your NinjaOne API credentials", "validation": { "required": true @@ -78,7 +69,6 @@ "type": "password", "name": "clientSecret", "label": "Client Secret", - "title": "OAuth Client Secret", "help": "Enter the Client Secret from your NinjaOne API credentials", "validation": { "required": true