+
@@ -204,7 +204,7 @@ import BulkAction from "@/components/modals/agents/BulkAction";
import Deployment from "@/components/Deployment";
import ServerMaintenance from "@/components/modals/core/ServerMaintenance";
import CodeSign from "@/components/modals/coresettings/CodeSign";
-import PermissionsManager from "@/components/PermissionsManager";
+import PermissionsManager from "@/components/accounts/PermissionsManager";
export default {
name: "FileBar",
diff --git a/src/components/NotesTab.vue b/src/components/NotesTab.vue
deleted file mode 100644
index 8cedee4..0000000
--- a/src/components/NotesTab.vue
+++ /dev/null
@@ -1,220 +0,0 @@
-
- No agent selected
-
-
-
-
-
- No Notes
-
-
-
-
-
-
-
-
-
-
{{ props.row.entry_time }}
-
{{ props.row.username }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ props.row.note }}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/PermissionsManager.vue b/src/components/PermissionsManager.vue
deleted file mode 100644
index a26aed3..0000000
--- a/src/components/PermissionsManager.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
-
- Manage Roles
-
-
-
-
-
-
-
-
-
- {{ props.row.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/ProcessManager.vue b/src/components/ProcessManager.vue
deleted file mode 100644
index c0af526..0000000
--- a/src/components/ProcessManager.vue
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Refresh interval (seconds)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- End task
-
-
-
- {{ props.row.name }}
- {{ props.row.cpu_percent }}%
- {{ bytes2Human(props.row.membytes) }}
- {{ props.row.username }}
- {{ props.row.pid }}
- {{ props.row.status }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/Services.vue b/src/components/Services.vue
deleted file mode 100644
index 6423f82..0000000
--- a/src/components/Services.vue
+++ /dev/null
@@ -1,329 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Start
-
-
- Stop
-
-
- Restart
-
-
-
- Service Details
-
-
-
-
-
- {{ props.row.display_name }}
-
- {{ props.row.start_type }}
- {{ props.row.pid }}
- {{ props.row.status }}
- {{ props.row.username }}
-
-
-
-
-
-
-
- Service Details - {{ serviceData.display_name }}
-
-
-
-
-
Service name:
-
{{ serviceData.svc_name }}
-
-
-
-
Display name:
-
{{ serviceData.display_name }}
-
-
-
-
Description:
-
- {{ serviceData.description }}
-
-
-
-
-
Path:
-
- {{ serviceData.binpath }}
-
-
-
-
-
-
-
-
-
-
Service status:
-
{{ serviceData.status }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/SoftwareTab.vue b/src/components/SoftwareTab.vue
deleted file mode 100644
index 2df0fac..0000000
--- a/src/components/SoftwareTab.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-
- No agent selected
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/SubTableTabs.vue b/src/components/SubTableTabs.vue
index 7fcf7e5..a28be3a 100644
--- a/src/components/SubTableTabs.vue
+++ b/src/components/SubTableTabs.vue
@@ -1,83 +1,90 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/src/components/WindowsUpdates.vue b/src/components/WindowsUpdates.vue
deleted file mode 100644
index 9f53d3b..0000000
--- a/src/components/WindowsUpdates.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-
- No agent selected
- No Patches
-
-
-
- Patches last installed: {{ summary.patches_last_installed }}
-
- Patches last installed: Never
-
-
-
-
-
-
- Inherit
-
-
- Approve
-
-
- Ignore
-
-
- Do Nothing
-
-
-
-
-
-
- Do Nothing
-
-
- Approve
-
-
- Ignore
-
-
- Inherit
-
-
-
-
- Installed
-
-
- Pending
-
-
- Ignored
-
-
- Missing
-
-
- {{ formatSeverity(props.row.severity) }}
- {{ formatMessage(props.row.title) }}
-
- {{
- formatMessage(props.row.description)
- }}
-
- {{ formatDjangoDate(props.row.date_installed) }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/WmiDetail.vue b/src/components/WmiDetail.vue
deleted file mode 100644
index a14e45f..0000000
--- a/src/components/WmiDetail.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
diff --git a/src/components/accounts/PermissionsManager.vue b/src/components/accounts/PermissionsManager.vue
new file mode 100644
index 0000000..6161f07
--- /dev/null
+++ b/src/components/accounts/PermissionsManager.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+ Manage Roles
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+ Delete
+
+
+
+
+
+ Close
+
+
+
+ {{ props.row.name }}
+
+
+
+
+ {{ props.row.user_count }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/accounts/RolesForm.vue b/src/components/accounts/RolesForm.vue
new file mode 100644
index 0000000..cbc349b
--- /dev/null
+++ b/src/components/accounts/RolesForm.vue
@@ -0,0 +1,330 @@
+
+
+
+
+ {{ localRole ? "Editing Role" : "Adding Role" }}
+
+
+
+
+
+
+
+
+
+ Super User
+
+
+
+
+
+
+
+ Accounts
+
+
+
+
+
+
+
+
+
+
+ Agents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Core
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Checks
+
+
+
+
+
+
+
+
+
+ Clients
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Automation Policies
+
+
+
+
+
+
+
+
+ Tasks
+
+
+
+
+
+
+
+
+
+ Logs
+
+
+
+
+
+
+
+
+
+
+ Scripts
+
+
+
+
+
+
+
+
+ Alerts
+
+
+
+
+
+
+
+
+ Windows Services
+
+
+
+
+
+
+
+ Software
+
+
+
+
+
+
+
+
+ Windows Updates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/agents/AssetsTab.vue b/src/components/agents/AssetsTab.vue
new file mode 100644
index 0000000..560d131
--- /dev/null
+++ b/src/components/agents/AssetsTab.vue
@@ -0,0 +1,123 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/agents/AutomatedTasksTab.vue b/src/components/agents/AutomatedTasksTab.vue
new file mode 100644
index 0000000..5dec532
--- /dev/null
+++ b/src/components/agents/AutomatedTasksTab.vue
@@ -0,0 +1,435 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Enabled
+
+
+
+
+
+
+ SMS Alert
+
+
+
+
+
+
+
+ Email Alert
+
+
+
+
+
+
+
+ Dashboard Alert
+
+
+
+
+
+
+
+
+
+
+
+ Collector Task
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Run task now
+
+
+
+
+
+ Edit
+
+
+
+
+
+ Delete
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ This task is managed by a policy
+
+
+
+
+
+
+ The task updates a custom field on the agent
+
+
+
+
+
+ Passing
+
+
+
+
+ Informational
+
+
+ Warning
+
+
+ Error
+
+
+
+
+ {{ props.row.name }}
+
+ Will sync on next agent checkin
+ Synced with agent
+ Pending deletion on agent
+ Waiting for task creation on agent
+
+
+ output
+
+ Awaiting output
+ {{ props.row.last_run }}
+ Has not run yet
+ {{ props.row.schedule }}
+ {{ props.row.assigned_check.readable_desc }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/agents/ChecksTab.vue b/src/components/agents/ChecksTab.vue
new file mode 100644
index 0000000..f331e95
--- /dev/null
+++ b/src/components/agents/ChecksTab.vue
@@ -0,0 +1,495 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+ Disk Space Check
+
+
+
+
+
+ Ping Check
+
+
+
+
+
+ CPU Load Check
+
+
+
+
+
+ Memory Check
+
+
+
+
+
+ Windows Service Check
+
+
+
+
+
+ Script Check
+
+
+
+
+
+ Event Log Check
+
+
+
+
+
+
+
+
+
+ SMS Alert
+
+
+
+
+
+
+ Email Alert
+
+
+
+
+
+
+ Dashboard Alert
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+ Delete
+
+
+
+
+
+
+ Reset Check Status
+
+
+
+ Close
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ Setting is overidden by alert template: {{ props.row.alert_template.name }}
+
+
+
+
+
+
+
+ This check is managed by a policy
+
+
+
+
+ This check is overriden by a policy
+
+
+
+
+
+
+ Passing
+
+
+
+
+ Informational
+
+
+ Warning
+
+
+ Error
+
+
+
+
+
+
+ {{ truncateText(props.row.readable_desc, 40) }}
+ {{ props.row.readable_desc }}
+
+
+
+ Show Run History
+
+ Last Output
+ Last Output
+ Last Output
+ {{
+ props.row.more_info
+ }}
+
+ {{ props.row.last_run || "Never" }}
+ {{ props.row.assigned_task.length }} Tasks
+ {{ props.row.assigned_task.name }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/agents/HistoryTab.vue b/src/components/agents/HistoryTab.vue
index 800895a..79a37ec 100644
--- a/src/components/agents/HistoryTab.vue
+++ b/src/components/agents/HistoryTab.vue
@@ -6,16 +6,19 @@
:rows="history"
:columns="columns"
:pagination="{ sortBy: 'time', descending: true, rowsPerPage: 10 }"
+ :style="{ 'max-height': tabHeight }"
:loading="loading"
dense
binary-state-sort
>
-
+
+
+
-
-
+
+
@@ -62,7 +65,7 @@ import { formatDate, formatTableColumnText, truncateText } from "@/utils/format"
import { fetchAgentHistory } from "@/api/agents";
// ui imports
-import ScriptOutput from "@/components/modals/checks/ScriptOutput";
+import ScriptOutput from "@/components/checks/ScriptOutput";
import ExportTableBtn from "@/components/ui/ExportTableBtn";
// static data
@@ -106,6 +109,7 @@ export default {
const store = useStore();
const selectedAgent = computed(() => store.state.selectedRow);
+ const tabHeight = computed(() => store.state.tabHeight);
// setup main history functionality
const history = ref([]);
@@ -135,13 +139,14 @@ export default {
// vue component hooks
onMounted(() => {
- if (!!selectedAgent.value) getHistory();
+ if (selectedAgent.value) getHistory();
});
return {
// reactive
history,
loading,
+ tabHeight,
// non-reactive data
columns,
diff --git a/src/components/agents/NotesTab.vue b/src/components/agents/NotesTab.vue
new file mode 100644
index 0000000..fde982e
--- /dev/null
+++ b/src/components/agents/NotesTab.vue
@@ -0,0 +1,225 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ props.row.entry_time }}
+
{{ props.row.username }}
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+ {{ props.row.note }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/agents/SoftwareTab.vue b/src/components/agents/SoftwareTab.vue
new file mode 100644
index 0000000..db3ad7d
--- /dev/null
+++ b/src/components/agents/SoftwareTab.vue
@@ -0,0 +1,167 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/SummaryTab.vue b/src/components/agents/SummaryTab.vue
similarity index 67%
rename from src/components/SummaryTab.vue
rename to src/components/agents/SummaryTab.vue
index 3094a57..a4a0f8e 100644
--- a/src/components/SummaryTab.vue
+++ b/src/components/agents/SummaryTab.vue
@@ -1,6 +1,9 @@
- No agent selected
-
+
No agent selected
+
+
+
+
{{ summary.hostname }}
@@ -63,7 +66,7 @@
Checks Status
-
+
{{ summary.checks.passing }} checks passing
@@ -82,18 +85,16 @@
{{ summary.checks.total }} checks awaiting first synchronization
-
- No checks
+
+ No checks
@@ -108,53 +109,79 @@
+
diff --git a/src/components/agents/WinUpdateTab.vue b/src/components/agents/WinUpdateTab.vue
new file mode 100644
index 0000000..567a663
--- /dev/null
+++ b/src/components/agents/WinUpdateTab.vue
@@ -0,0 +1,276 @@
+
+ No agent selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inherit
+
+
+ Approve
+
+
+ Ignore
+
+
+ Do Nothing
+
+
+
+
+
+
+ Do Nothing
+
+
+ Approve
+
+
+ Ignore
+
+
+ Inherit
+
+
+
+
+ Installed
+
+
+ Pending
+
+
+ Ignored
+
+
+ Missing
+
+
+ {{ !props.row.severity ? "Other" : props.row.severity }}
+ {{ truncateText(props.row.title, 50) }}
+
+ {{
+ truncateText(props.row.description, 50)
+ }}
+
+ {{ formatDate(props.row.date_installed) }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/agents/WmiDetail.vue b/src/components/agents/WmiDetail.vue
new file mode 100644
index 0000000..dbd2b2c
--- /dev/null
+++ b/src/components/agents/WmiDetail.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
diff --git a/src/components/agents/remotebg/EventLogManager.vue b/src/components/agents/remotebg/EventLogManager.vue
new file mode 100644
index 0000000..f6c1e03
--- /dev/null
+++ b/src/components/agents/remotebg/EventLogManager.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+ {{ logType }} log total records: {{ events.length }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.row.eventType }}
+ {{ props.row.source }}
+ {{ props.row.eventID }}
+ {{ props.row.time }}
+
+ {{
+ truncateText(props.row.message, 30)
+ }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/agents/remotebg/ProcessManager.vue b/src/components/agents/remotebg/ProcessManager.vue
new file mode 100644
index 0000000..8391386
--- /dev/null
+++ b/src/components/agents/remotebg/ProcessManager.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Refresh interval (seconds)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End task
+
+
+
+ {{ props.row.name }}
+ {{ props.row.cpu_percent }}%
+ {{ bytes2Human(props.row.membytes) }}
+ {{ props.row.username }}
+ {{ props.row.pid }}
+ {{ props.row.status }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/agents/remotebg/ServicesManager.vue b/src/components/agents/remotebg/ServicesManager.vue
new file mode 100644
index 0000000..54acacc
--- /dev/null
+++ b/src/components/agents/remotebg/ServicesManager.vue
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Start
+
+
+ Stop
+
+
+ Restart
+
+
+
+ Service Details
+
+
+
+
+
+ {{ truncateText(props.row.display_name, 30) }}
+
+ {{ props.row.name }}
+ {{
+ props.row.start_type.toLowerCase() === "automatic" && props.row.autodelay
+ ? `${props.row.start_type} (Delayed)`
+ : `${props.row.start_type}`
+ }}
+ {{ props.row.pid === 0 ? "" : props.row.pid }}
+ {{ props.row.status }}
+ {{ props.row.username ? props.row.username : "LocalSystem" }}
+
+
+
+
+
+
+
+ Service Details - {{ service.display_name }}
+
+
+ Close
+
+
+
+
+
+
Service name:
+
{{ service.name }}
+
+
+
+
Display name:
+
{{ service.display_name }}
+
+
+
+
Description:
+
+ {{ service.description }}
+
+
+
+
+
Path:
+
+ {{ service.binpath }}
+
+
+
+
+
+
+
+
+
+
Service status:
+
{{ service.status }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/automation/PolicyAutomatedTasksTab.vue b/src/components/automation/PolicyAutomatedTasksTab.vue
index 7643c71..b24bca9 100644
--- a/src/components/automation/PolicyAutomatedTasksTab.vue
+++ b/src/components/automation/PolicyAutomatedTasksTab.vue
@@ -175,8 +175,8 @@
\ No newline at end of file
diff --git a/src/components/checks/DiskSpaceCheck.vue b/src/components/checks/DiskSpaceCheck.vue
new file mode 100644
index 0000000..18d9f0d
--- /dev/null
+++ b/src/components/checks/DiskSpaceCheck.vue
@@ -0,0 +1,116 @@
+
+
+
+
+ {{ check ? `Edit Disk Check` : "Add Disk Check" }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/checks/EventLogCheck.vue b/src/components/checks/EventLogCheck.vue
new file mode 100644
index 0000000..379e567
--- /dev/null
+++ b/src/components/checks/EventLogCheck.vue
@@ -0,0 +1,232 @@
+
+
+
+
+ {{ check ? `Edit Event Log Check` : "Add Event Log Check" }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/checks/EventLogCheckOutput.vue b/src/components/checks/EventLogCheckOutput.vue
new file mode 100644
index 0000000..39c92bd
--- /dev/null
+++ b/src/components/checks/EventLogCheckOutput.vue
@@ -0,0 +1,87 @@
+
+
+
+
+ {{ evtLogData.readable_desc }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Check has not run yet
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/checks/MemCheck.vue b/src/components/checks/MemCheck.vue
new file mode 100644
index 0000000..7afcb34
--- /dev/null
+++ b/src/components/checks/MemCheck.vue
@@ -0,0 +1,110 @@
+
+
+
+
+ {{ check ? `Edit Memory Check` : "Add Memory Check" }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/checks/PingCheck.vue b/src/components/checks/PingCheck.vue
new file mode 100644
index 0000000..72d7567
--- /dev/null
+++ b/src/components/checks/PingCheck.vue
@@ -0,0 +1,143 @@
+
+
+
+
+ {{ check ? `Edit Ping Check` : "Add Ping Check" }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/checks/ScriptCheck.vue b/src/components/checks/ScriptCheck.vue
new file mode 100644
index 0000000..50541f8
--- /dev/null
+++ b/src/components/checks/ScriptCheck.vue
@@ -0,0 +1,186 @@
+
+
+
+
+ {{ check ? `Edit Script Check` : "Add Script Check" }}
+
+
+ Close
+
+
+
+ You need to upload a script first
+ Settings -> Script Manager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/modals/checks/ScriptOutput.vue b/src/components/checks/ScriptOutput.vue
similarity index 72%
rename from src/components/modals/checks/ScriptOutput.vue
rename to src/components/checks/ScriptOutput.vue
index 0e86fb1..77f95f0 100644
--- a/src/components/modals/checks/ScriptOutput.vue
+++ b/src/components/checks/ScriptOutput.vue
@@ -1,6 +1,6 @@
-
-
+
+
{{ scriptInfo.readable_desc }}
@@ -38,20 +38,21 @@
\ No newline at end of file
diff --git a/src/components/checks/WinSvcCheck.vue b/src/components/checks/WinSvcCheck.vue
new file mode 100644
index 0000000..e8774ef
--- /dev/null
+++ b/src/components/checks/WinSvcCheck.vue
@@ -0,0 +1,204 @@
+
+
+
+
+ {{ check ? `Edit Memory Check` : "Add Memory Check" }}
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/graphs/CheckGraph.vue b/src/components/graphs/CheckGraph.vue
index eda38f3..7a4d4c0 100644
--- a/src/components/graphs/CheckGraph.vue
+++ b/src/components/graphs/CheckGraph.vue
@@ -124,7 +124,7 @@ export default {
this.$q.loading.show();
this.$axios
- .patch(`/checks/history/${this.check.id}/`, { timeFilter: this.timeFilter })
+ .patch(`/checks/${this.check.id}/history/`, { timeFilter: this.timeFilter })
.then(r => {
this.history = Object.freeze(r.data);
diff --git a/src/components/modals/admin/RolesForm.vue b/src/components/modals/admin/RolesForm.vue
deleted file mode 100644
index 5f3a9b4..0000000
--- a/src/components/modals/admin/RolesForm.vue
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
- {{ title }}
-
-
-
-
- Name:
-
-
-
-
-
- Super User
-
-
-
-
-
-
-
- Accounts
-
-
-
-
-
-
-
-
- Agents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Core
-
-
-
-
-
-
-
-
-
-
-
-
- Checks
-
-
-
-
-
-
-
-
- Clients
-
-
-
-
-
-
-
-
-
- Automation Policies
-
-
-
-
-
-
-
- Tasks
-
-
-
-
-
-
-
-
- Logs
-
-
-
-
-
-
-
-
-
- Scripts
-
-
-
-
-
-
-
- Alerts
-
-
-
-
-
-
-
- Windows Services
-
-
-
-
-
-
-
- Software
-
-
-
-
-
-
-
- Windows Updates
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/agents/AgentRecovery.vue b/src/components/modals/agents/AgentRecovery.vue
index 91cf35c..30dd94b 100644
--- a/src/components/modals/agents/AgentRecovery.vue
+++ b/src/components/modals/agents/AgentRecovery.vue
@@ -57,7 +57,7 @@ export default {
emits: ["close"],
mixins: [mixins],
props: {
- pk: Number,
+ agent_id: !String,
},
data() {
return {
@@ -82,12 +82,11 @@ export default {
recover() {
this.$q.loading.show();
const data = {
- pk: this.pk,
cmd: this.cmd,
mode: this.mode,
};
this.$axios
- .post("/agents/recover/", data)
+ .post(`/agents/${this.agent_id}/recover/`, data)
.then(r => {
this.$q.loading.hide();
this.$emit("close");
diff --git a/src/components/modals/agents/EditAgent.vue b/src/components/modals/agents/EditAgent.vue
index 12a0e1a..1f62200 100644
--- a/src/components/modals/agents/EditAgent.vue
+++ b/src/components/modals/agents/EditAgent.vue
@@ -155,7 +155,7 @@ export default {
methods: {
getAgentInfo() {
this.$axios
- .get(`/agents/${this.selectedAgentPk}/agenteditdetails/`)
+ .get(`/agents/${this.selectedAgentId}/`)
.then(r => {
this.agent = r.data;
this.allTimezones = Object.freeze(r.data.all_timezones);
@@ -218,7 +218,7 @@ export default {
}
this.$axios
- .patch("/agents/editagent/", {
+ .put(`/agents/${this.selectedAgentId}/`, {
...this.agent,
custom_fields: this.formatCustomFields(this.customFields, this.custom_fields),
})
@@ -231,7 +231,7 @@ export default {
},
},
computed: {
- ...mapGetters(["selectedAgentPk"]),
+ ...mapGetters(["selectedAgentId"]),
},
mounted() {
// Get custom fields
diff --git a/src/components/modals/agents/InstallAgent.vue b/src/components/modals/agents/InstallAgent.vue
index 2765da0..390dd90 100644
--- a/src/components/modals/agents/InstallAgent.vue
+++ b/src/components/modals/agents/InstallAgent.vue
@@ -165,7 +165,7 @@ export default {
if (this.installMethod === "manual") {
this.$axios
- .post("/agents/installagent/", data)
+ .post("/agents/installer/", data)
.then(r => {
this.info = {
expires: this.expires,
@@ -179,7 +179,7 @@ export default {
this.$q.loading.show({ message: "Generating executable..." });
this.$axios
- .post("/agents/installagent/", data, { responseType: "blob" })
+ .post("/agents/installer/", data, { responseType: "blob" })
.then(r => {
this.$q.loading.hide();
const blob = new Blob([r.data], { type: "application/vnd.microsoft.portable-executable" });
@@ -195,7 +195,7 @@ export default {
} else if (this.installMethod === "powershell") {
const psName = `rmm-${clientStripped}-${siteStripped}-${this.agenttype}.ps1`;
this.$axios
- .post("/agents/installagent/", data, { responseType: "blob" })
+ .post("/agents/installer/", data, { responseType: "blob" })
.then(({ data }) => {
const blob = new Blob([data], { type: "text/plain" });
let link = document.createElement("a");
diff --git a/src/components/modals/agents/RebootLater.vue b/src/components/modals/agents/RebootLater.vue
index ed13c34..4e118c9 100644
--- a/src/components/modals/agents/RebootLater.vue
+++ b/src/components/modals/agents/RebootLater.vue
@@ -48,9 +48,9 @@ export default {
methods: {
scheduleReboot() {
this.$q.loading.show({ message: "Contacting agent..." });
- const data = { pk: this.selectedAgentPk, datetime: this.datetime };
+ const data = { pk: this.selectedAgentId, datetime: this.datetime };
this.$axios
- .patch("/agents/reboot/", data)
+ .patch(`/agents/${this.selectedAgentId}reboot/`, data)
.then(r => {
this.$q.loading.hide();
this.$emit("close");
@@ -76,7 +76,7 @@ export default {
},
},
computed: {
- ...mapGetters(["selectedAgentPk"]),
+ ...mapGetters(["selectedAgentId"]),
},
mounted() {
this.getCurrentDate();
diff --git a/src/components/modals/agents/SendCommand.vue b/src/components/modals/agents/SendCommand.vue
index 9f9e5ee..63b4128 100644
--- a/src/components/modals/agents/SendCommand.vue
+++ b/src/components/modals/agents/SendCommand.vue
@@ -58,7 +58,7 @@ export default {
name: "SendCommand",
mixins: [mixins],
props: {
- pk: Number,
+ agent_id: !String,
},
data() {
return {
@@ -82,13 +82,12 @@ export default {
this.ret = null;
this.loading = true;
const data = {
- pk: this.pk,
cmd: this.cmd,
shell: this.shell,
timeout: this.timeout,
};
this.$axios
- .post("/agents/sendrawcmd/", data)
+ .post(`/agents/${this.agent_id}/cmd/`, data)
.then(r => {
this.loading = false;
this.ret = r.data;
diff --git a/src/components/modals/alerts/AlertsOverview.vue b/src/components/modals/alerts/AlertsOverview.vue
index 2ba0286..528507e 100644
--- a/src/components/modals/alerts/AlertsOverview.vue
+++ b/src/components/modals/alerts/AlertsOverview.vue
@@ -158,7 +158,7 @@
\ No newline at end of file
diff --git a/src/components/modals/checks/DiskSpaceCheck.vue b/src/components/modals/checks/DiskSpaceCheck.vue
deleted file mode 100644
index df347f9..0000000
--- a/src/components/modals/checks/DiskSpaceCheck.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
- Add Disk Space Check
- Edit Disk Space Check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/EventLogCheck.vue b/src/components/modals/checks/EventLogCheck.vue
deleted file mode 100644
index aa023f7..0000000
--- a/src/components/modals/checks/EventLogCheck.vue
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
- Add Event Log Check
- Edit Event Log Check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Event Type:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/EventLogCheckOutput.vue b/src/components/modals/checks/EventLogCheckOutput.vue
deleted file mode 100644
index 41248e3..0000000
--- a/src/components/modals/checks/EventLogCheckOutput.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
{{ evtlogdata.desc }}
-
-
-
-
-
-
- Check has not run yet
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/MemCheck.vue b/src/components/modals/checks/MemCheck.vue
deleted file mode 100644
index 6e8a334..0000000
--- a/src/components/modals/checks/MemCheck.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
- Add Memory Check
- Edit Memory Check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/PingCheck.vue b/src/components/modals/checks/PingCheck.vue
deleted file mode 100644
index 737a671..0000000
--- a/src/components/modals/checks/PingCheck.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
- Add Ping Check
- Edit Ping Check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/ScriptCheck.vue b/src/components/modals/checks/ScriptCheck.vue
deleted file mode 100644
index 2afa21b..0000000
--- a/src/components/modals/checks/ScriptCheck.vue
+++ /dev/null
@@ -1,213 +0,0 @@
-
-
-
- Add Script Check
-
-
-
-
- You need to upload a script first
- Settings -> Script Manager
-
-
-
-
- Add Script Check
- Edit Script Check
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{
- scope.opt.category
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/checks/WinSvcCheck.vue b/src/components/modals/checks/WinSvcCheck.vue
deleted file mode 100644
index 423339f..0000000
--- a/src/components/modals/checks/WinSvcCheck.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-
- Add Service Check
- Edit Service Check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/modals/software/InstallSoftware.vue b/src/components/modals/software/InstallSoftware.vue
deleted file mode 100644
index f65ce27..0000000
--- a/src/components/modals/software/InstallSoftware.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ props.row.name }}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/scripts/TestScriptModal.vue b/src/components/scripts/TestScriptModal.vue
index 66775a7..d25a896 100644
--- a/src/components/scripts/TestScriptModal.vue
+++ b/src/components/scripts/TestScriptModal.vue
@@ -92,14 +92,13 @@ export default {
async function runTestScript() {
loading.value = true;
const data = {
- agent: agent.value,
code: props.script.code,
timeout: timeout.value,
args: args.value,
shell: props.script.shell,
};
- ret.value = await testScript(data);
+ ret.value = await testScript(agent.value, data);
loading.value = false;
}
diff --git a/src/components/software/InstallSoftware.vue b/src/components/software/InstallSoftware.vue
new file mode 100644
index 0000000..d713bb5
--- /dev/null
+++ b/src/components/software/InstallSoftware.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ Install Software
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.row.name }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/modals/tasks/AddAutomatedTask.vue b/src/components/tasks/AddAutomatedTask.vue
similarity index 96%
rename from src/components/modals/tasks/AddAutomatedTask.vue
rename to src/components/tasks/AddAutomatedTask.vue
index 1a6b3cb..81e3348 100644
--- a/src/components/modals/tasks/AddAutomatedTask.vue
+++ b/src/components/tasks/AddAutomatedTask.vue
@@ -273,7 +273,7 @@ export default {
if (!this.step1Done || !this.step2Done) {
this.notifyError("Some steps incomplete");
} else {
- const pk = this.policypk ? { policy: this.policypk } : { agent: this.selectedAgentPk };
+ const pk = this.policypk ? { policy: this.policypk } : { agent: this.selectedAgentId };
const data = {
...pk,
@@ -286,8 +286,8 @@ export default {
this.$emit("close");
if (!this.policypk) {
- this.$store.dispatch("loadAutomatedTasks", this.selectedAgentPk);
- this.$store.dispatch("loadChecks", this.selectedAgentPk);
+ this.$store.dispatch("loadAutomatedTasks", this.selectedAgentId);
+ this.$store.dispatch("loadChecks", this.selectedAgentId);
}
this.notifySuccess(r.data);
})
@@ -316,7 +316,7 @@ export default {
},
},
computed: {
- ...mapGetters(["selectedAgentPk", "showCommunityScripts"]),
+ ...mapGetters(["selectedAgentId", "showCommunityScripts"]),
checks() {
return this.policypk
? this.policyChecks
diff --git a/src/components/modals/tasks/EditAutomatedTask.vue b/src/components/tasks/EditAutomatedTask.vue
similarity index 100%
rename from src/components/modals/tasks/EditAutomatedTask.vue
rename to src/components/tasks/EditAutomatedTask.vue
diff --git a/src/composables/checks.js b/src/composables/checks.js
new file mode 100644
index 0000000..bf09d13
--- /dev/null
+++ b/src/composables/checks.js
@@ -0,0 +1,1174 @@
+
+import { ref, onMounted } from "vue"
+import { updateCheck, saveCheck } from "@/api/checks"
+import { fetchAgent } from "@/api/agents"
+import { isValidThreshold } from "@/utils/validation";
+import { notifySuccess } from "@/utils/notify"
+
+// for check add/edit modals
+// pass as an object {editCheck: props.check, initialState: {default form values for adding check}, onDialogOK: callback for submit function }
+export function useCheckModal({ editCheck, initialState, onDialogOK }) {
+
+ const check = editCheck
+ ? ref(Object.assign({}, editCheck))
+ : ref(initialState);
+
+ const loading = ref(false)
+
+ // save check function
+ async function submit() {
+ if (check.value.check_type === "cpuload" || check.value.check_type === "memory") {
+ if (!isValidThreshold(check.value.warning_threshold, check.value.error_threshold)) return;
+ }
+ else if (check.value.check_type === "diskspace") {
+ if (!isValidThreshold(check.value.warning_threshold, check.value.error_threshold, true)) return;
+ }
+
+ loading.value = true;
+ try {
+ const result = editCheck ? await updateCheck(check.value.id, check.value) : await saveCheck(check.value);
+ notifySuccess(result);
+ onDialogOK();
+ } catch (e) {
+ console.error(e);
+ }
+ loading.value = false;
+ }
+
+ // dropdown options
+ const failOptions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+
+ const severityOptions = [
+ { label: "Informational", value: "info" },
+ { label: "Warning", value: "warning" },
+ { label: "Error", value: "error" },
+ ]
+
+ const logNameOptions = ["Application", "System", "Security"]
+ const failWhenOptions = [
+ { label: "Log contains", value: "contains" },
+ { label: "Log does not contain", value: "not_contains" },
+ ]
+
+ const diskOptions = ref('A:,B:,C:,D:,E:,F:,G:,H:,I:,J:,K:,L:,M:,N:,O:,P:,Q:,R:,S:,T:,U:,V:,W:,X:,Y:,Z:'.split(','))
+
+ const serviceOptions = ref(Object.freeze(defaultServiceOptions))
+
+ async function getAgentDiskOptions() {
+ const { disks } = await fetchAgent(check.value.agent)
+ diskOptions.value = disks.map(disk => disk.device)
+ check.value.disk = diskOptions.value[0]
+ }
+
+ async function getAgentServiceOptions() {
+ const { services } = await fetchAgent(check.value.agent)
+ serviceOptions.value = Object.freeze(services.map(service => ({ label: service.display_name, value: service.name })))
+ check.value.svc_name = serviceOptions.value[0].value
+ check.value.svc_display_name = serviceOptions.value[0].label
+ }
+
+ onMounted(async () => {
+ if (!editCheck && check.value.check_type === "diskspace" && check.value.agent) {
+ await getAgentDiskOptions()
+ }
+
+ else if (!editCheck && check.value.check_type === "winsvc" && check.value.agent) {
+ await getAgentServiceOptions()
+ }
+ })
+
+ return {
+ //data
+ check,
+ loading,
+ failOptions,
+ diskOptions,
+ logNameOptions,
+ failWhenOptions,
+ severityOptions,
+ serviceOptions,
+
+ // methods
+ submit
+ }
+}
+
+
+export const defaultServiceOptions = [
+ {
+ value: "AJRouter",
+ label: "AllJoyn Router Service"
+ },
+ {
+ value: "ALG",
+ label: "Application Layer Gateway Service"
+ },
+ {
+ value: "AppIDSvc",
+ label: "Application Identity"
+ },
+ {
+ value: "Appinfo",
+ label: "Application Information"
+ },
+ {
+ value: "AppMgmt",
+ label: "Application Management"
+ },
+ {
+ value: "AppReadiness",
+ label: "App Readiness"
+ },
+ {
+ value: "AppVClient",
+ label: "Microsoft App-V Client"
+ },
+ {
+ value: "AppXSvc",
+ label: "AppX Deployment Service (AppXSVC)"
+ },
+ {
+ value: "AssignedAccessManagerSvc",
+ label: "AssignedAccessManager Service"
+ },
+ {
+ value: "atashost",
+ label: "WebEx Service Host for Support Center"
+ },
+ {
+ value: "AudioEndpointBuilder",
+ label: "Windows Audio Endpoint Builder"
+ },
+ {
+ value: "Audiosrv",
+ label: "Windows Audio"
+ },
+ {
+ value: "autotimesvc",
+ label: "Cellular Time"
+ },
+ {
+ value: "AxInstSV",
+ label: "ActiveX Installer (AxInstSV)"
+ },
+ {
+ value: "BDESVC",
+ label: "BitLocker Drive Encryption Service"
+ },
+ {
+ value: "BFE",
+ label: "Base Filtering Engine"
+ },
+ {
+ value: "BITS",
+ label: "Background Intelligent Transfer Service"
+ },
+ {
+ value: "Bonjour Service",
+ label: "Bonjour Service"
+ },
+ {
+ value: "BrokerInfrastructure",
+ label: "Background Tasks Infrastructure Service"
+ },
+ {
+ value: "BTAGService",
+ label: "Bluetooth Audio Gateway Service"
+ },
+ {
+ value: "BthAvctpSvc",
+ label: "AVCTP service"
+ },
+ {
+ value: "bthserv",
+ label: "Bluetooth Support Service"
+ },
+ {
+ value: "camsvc",
+ label: "Capability Access Manager Service"
+ },
+ {
+ value: "CDPSvc",
+ label: "Connected Devices Platform Service"
+ },
+ {
+ value: "CertPropSvc",
+ label: "Certificate Propagation"
+ },
+ {
+ value: "ClipSVC",
+ label: "Client License Service (ClipSVC)"
+ },
+ {
+ value: "COMSysApp",
+ label: "COM+ System Application"
+ },
+ {
+ value: "CoreMessagingRegistrar",
+ label: "CoreMessaging"
+ },
+ {
+ value: "cphs",
+ label: "Intel(R) Content Protection HECI Service"
+ },
+ {
+ value: "cplspcon",
+ label: "Intel(R) Content Protection HDCP Service"
+ },
+ {
+ value: "CryptSvc",
+ label: "Cryptographic Services"
+ },
+ {
+ value: "CscService",
+ label: "Offline Files"
+ },
+ {
+ value: "DcomLaunch",
+ label: "DCOM Server Process Launcher"
+ },
+ {
+ value: "defragsvc",
+ label: "Optimize drives"
+ },
+ {
+ value: "DeviceAssociationService",
+ label: "Device Association Service"
+ },
+ {
+ value: "DeviceInstall",
+ label: "Device Install Service"
+ },
+ {
+ value: "DevQueryBroker",
+ label: "DevQuery Background Discovery Broker"
+ },
+ {
+ value: "Dhcp",
+ label: "DHCP Client"
+ },
+ {
+ value: "diagnosticshub.standardcollector.service",
+ label: "Microsoft (R) Diagnostics Hub Standard Collector Service"
+ },
+ {
+ value: "diagsvc",
+ label: "Diagnostic Execution Service"
+ },
+ {
+ value: "DiagTrack",
+ label: "Connected User Experiences and Telemetry"
+ },
+ {
+ value: "DispBrokerDesktopSvc",
+ label: "Display Policy Service"
+ },
+ {
+ value: "DisplayEnhancementService",
+ label: "Display Enhancement Service"
+ },
+ {
+ value: "DmEnrollmentSvc",
+ label: "Device Management Enrollment Service"
+ },
+ {
+ value: "dmwappushservice",
+ label: "Device Management Wireless Application Protocol (WAP) Push message Routing Service"
+ },
+ {
+ value: "Dnscache",
+ label: "DNS Client"
+ },
+ {
+ value: "DoSvc",
+ label: "Delivery Optimization"
+ },
+ {
+ value: "dot3svc",
+ label: "Wired AutoConfig"
+ },
+ {
+ value: "DPS",
+ label: "Diagnostic Policy Service"
+ },
+ {
+ value: "DsmSvc",
+ label: "Device Setup Manager"
+ },
+ {
+ value: "DsSvc",
+ label: "Data Sharing Service"
+ },
+ {
+ value: "DusmSvc",
+ label: "Data Usage"
+ },
+ {
+ value: "Eaphost",
+ label: "Extensible Authentication Protocol"
+ },
+ {
+ value: "EFS",
+ label: "Encrypting File System (EFS)"
+ },
+ {
+ value: "embeddedmode",
+ label: "Embedded Mode"
+ },
+ {
+ value: "EntAppSvc",
+ label: "Enterprise App Management Service"
+ },
+ {
+ value: "EventLog",
+ label: "Windows Event Log"
+ },
+ {
+ value: "EventSystem",
+ label: "COM+ Event System"
+ },
+ {
+ value: "Fax",
+ label: "Fax"
+ },
+ {
+ value: "fdPHost",
+ label: "Function Discovery Provider Host"
+ },
+ {
+ value: "FDResPub",
+ label: "Function Discovery Resource Publication"
+ },
+ {
+ value: "fhsvc",
+ label: "File History Service"
+ },
+ {
+ value: "FontCache",
+ label: "Windows Font Cache Service"
+ },
+ {
+ value: "FrameServer",
+ label: "Windows Camera Frame Server"
+ },
+ {
+ value: "GoogleChromeElevationService",
+ label: "Google Chrome Elevation Service"
+ },
+ {
+ value: "gpsvc",
+ label: "Group Policy Client"
+ },
+ {
+ value: "GraphicsPerfSvc",
+ label: "GraphicsPerfSvc"
+ },
+ {
+ value: "hidserv",
+ label: "Human Interface Device Service"
+ },
+ {
+ value: "hns",
+ label: "Host Network Service"
+ },
+ {
+ value: "HvHost",
+ label: "HV Host Service"
+ },
+ {
+ value: "ibtsiva",
+ label: "Intel Bluetooth Service"
+ },
+ {
+ value: "icssvc",
+ label: "Windows Mobile Hotspot Service"
+ },
+ {
+ value: "IKEEXT",
+ label: "IKE and AuthIP IPsec Keying Modules"
+ },
+ {
+ value: "InstallService",
+ label: "Microsoft Store Install Service"
+ },
+ {
+ value: "iphlpsvc",
+ label: "IP Helper"
+ },
+ {
+ value: "IpxlatCfgSvc",
+ label: "IP Translation Configuration Service"
+ },
+ {
+ value: "KeyIso",
+ label: "CNG Key Isolation"
+ },
+ {
+ value: "KtmRm",
+ label: "KtmRm for Distributed Transaction Coordinator"
+ },
+ {
+ value: "LanmanServer",
+ label: "Server"
+ },
+ {
+ value: "LanmanWorkstation",
+ label: "Workstation"
+ },
+ {
+ value: "lfsvc",
+ label: "Geolocation Service"
+ },
+ {
+ value: "LicenseManager",
+ label: "Windows License Manager Service"
+ },
+ {
+ value: "lltdsvc",
+ label: "Link-Layer Topology Discovery Mapper"
+ },
+ {
+ value: "lmhosts",
+ label: "TCP/IP NetBIOS Helper"
+ },
+ {
+ value: "LSM",
+ label: "Local Session Manager"
+ },
+ {
+ value: "LxpSvc",
+ label: "Language Experience Service"
+ },
+ {
+ value: "LxssManager",
+ label: "LxssManager"
+ },
+ {
+ value: "MapsBroker",
+ label: "Downloaded Maps Manager"
+ },
+ {
+ value: "mpssvc",
+ label: "Windows Defender Firewall"
+ },
+ {
+ value: "MSDTC",
+ label: "Distributed Transaction Coordinator"
+ },
+ {
+ value: "MSiSCSI",
+ label: "Microsoft iSCSI Initiator Service"
+ },
+ {
+ value: "msiserver",
+ label: "Windows Installer"
+ },
+ {
+ value: "NaturalAuthentication",
+ label: "Natural Authentication"
+ },
+ {
+ value: "NcaSvc",
+ label: "Network Connectivity Assistant"
+ },
+ {
+ value: "NcbService",
+ label: "Network Connection Broker"
+ },
+ {
+ value: "NcdAutoSetup",
+ label: "Network Connected Devices Auto-Setup"
+ },
+ {
+ value: "Net Driver HPZ12",
+ label: "Net Driver HPZ12"
+ },
+ {
+ value: "Netlogon",
+ label: "Netlogon"
+ },
+ {
+ value: "Netman",
+ label: "Network Connections"
+ },
+ {
+ value: "netprofm",
+ label: "Network List Service"
+ },
+ {
+ value: "NetSetupSvc",
+ label: "Network Setup Service"
+ },
+ {
+ value: "NetTcpPortSharing",
+ label: "Net.Tcp Port Sharing Service"
+ },
+ {
+ value: "NgcCtnrSvc",
+ label: "Microsoft Passport Container"
+ },
+ {
+ value: "NgcSvc",
+ label: "Microsoft Passport"
+ },
+ {
+ value: "NlaSvc",
+ label: "Network Location Awareness"
+ },
+ {
+ value: "nsi",
+ label: "Network Store Interface Service"
+ },
+ {
+ value: "nvagent",
+ label: "Network Virtualization Service"
+ },
+ {
+ value: "OpenVPNService",
+ label: "OpenVPNService"
+ },
+ {
+ value: "OpenVPNServiceInteractive",
+ label: "OpenVPN Interactive Service"
+ },
+ {
+ value: "OpenVPNServiceLegacy",
+ label: "OpenVPN Legacy Service"
+ },
+ {
+ value: "ose64",
+ label: "Office 64 Source Engine"
+ },
+ {
+ value: "p2pimsvc",
+ label: "Peer Networking Identity Manager"
+ },
+ {
+ value: "p2psvc",
+ label: "Peer Networking Grouping"
+ },
+ {
+ value: "PcaSvc",
+ label: "Program Compatibility Assistant Service"
+ },
+ {
+ value: "PeerDistSvc",
+ label: "BranchCache"
+ },
+ {
+ value: "perceptionsimulation",
+ label: "Windows Perception Simulation Service"
+ },
+ {
+ value: "PerfHost",
+ label: "Performance Counter DLL Host"
+ },
+ {
+ value: "PhoneSvc",
+ label: "Phone Service"
+ },
+ {
+ value: "pla",
+ label: "Performance Logs & Alerts"
+ },
+ {
+ value: "PlugPlay",
+ label: "Plug and Play"
+ },
+ {
+ value: "Pml Driver HPZ12",
+ label: "Pml Driver HPZ12"
+ },
+ {
+ value: "PNRPAutoReg",
+ label: "PNRP Machine Name Publication Service"
+ },
+ {
+ value: "PNRPsvc",
+ label: "Peer Name Resolution Protocol"
+ },
+ {
+ value: "PolicyAgent",
+ label: "IPsec Policy Agent"
+ },
+ {
+ value: "Power",
+ label: "Power"
+ },
+ {
+ value: "PrintNotify",
+ label: "Printer Extensions and Notifications"
+ },
+ {
+ value: "ProfSvc",
+ label: "User Profile Service"
+ },
+ {
+ value: "PushToInstall",
+ label: "Windows PushToInstall Service"
+ },
+ {
+ value: "QWAVE",
+ label: "Quality Windows Audio Video Experience"
+ },
+ {
+ value: "RasAuto",
+ label: "Remote Access Auto Connection Manager"
+ },
+ {
+ value: "RasMan",
+ label: "Remote Access Connection Manager"
+ },
+ {
+ value: "RemoteAccess",
+ label: "Routing and Remote Access"
+ },
+ {
+ value: "RemoteRegistry",
+ label: "Remote Registry"
+ },
+ {
+ value: "RetailDemo",
+ label: "Retail Demo Service"
+ },
+ {
+ value: "RmSvc",
+ label: "Radio Management Service"
+ },
+ {
+ value: "RpcEptMapper",
+ label: "RPC Endpoint Mapper"
+ },
+ {
+ value: "RpcLocator",
+ label: "Remote Procedure Call (RPC) Locator"
+ },
+ {
+ value: "RpcSs",
+ label: "Remote Procedure Call (RPC)"
+ },
+ {
+ value: "SamSs",
+ label: "Security Accounts Manager"
+ },
+ {
+ value: "SCardSvr",
+ label: "Smart Card"
+ },
+ {
+ value: "ScDeviceEnum",
+ label: "Smart Card Device Enumeration Service"
+ },
+ {
+ value: "Schedule",
+ label: "Task Scheduler"
+ },
+ {
+ value: "SCPolicySvc",
+ label: "Smart Card Removal Policy"
+ },
+ {
+ value: "SDRSVC",
+ label: "Windows Backup"
+ },
+ {
+ value: "seclogon",
+ label: "Secondary Logon"
+ },
+ {
+ value: "SecurityHealthService",
+ label: "Windows Security Service"
+ },
+ {
+ value: "SEMgrSvc",
+ label: "Payments and NFC/SE Manager"
+ },
+ {
+ value: "SENS",
+ label: "System Event Notification Service"
+ },
+ {
+ value: "Sense",
+ label: "Windows Defender Advanced Threat Protection Service"
+ },
+ {
+ value: "SensorDataService",
+ label: "Sensor Data Service"
+ },
+ {
+ value: "SensorService",
+ label: "Sensor Service"
+ },
+ {
+ value: "SensrSvc",
+ label: "Sensor Monitoring Service"
+ },
+ {
+ value: "SessionEnv",
+ label: "Remote Desktop Configuration"
+ },
+ {
+ value: "SgrmBroker",
+ label: "System Guard Runtime Monitor Broker"
+ },
+ {
+ value: "SharedAccess",
+ label: "Internet Connection Sharing (ICS)"
+ },
+ {
+ value: "SharedRealitySvc",
+ label: "Spatial Data Service"
+ },
+ {
+ value: "ShellHWDetection",
+ label: "Shell Hardware Detection"
+ },
+ {
+ value: "shpamsvc",
+ label: "Shared PC Account Manager"
+ },
+ {
+ value: "smphost",
+ label: "Microsoft Storage Spaces SMP"
+ },
+ {
+ value: "SmsRouter",
+ label: "Microsoft Windows SMS Router Service."
+ },
+ {
+ value: "SNMPTRAP",
+ label: "SNMP Trap"
+ },
+ {
+ value: "spectrum",
+ label: "Windows Perception Service"
+ },
+ {
+ value: "Spooler",
+ label: "Print Spooler"
+ },
+ {
+ value: "sppsvc",
+ label: "Software Protection"
+ },
+ {
+ value: "SSDPSRV",
+ label: "SSDP Discovery"
+ },
+ {
+ value: "ssh-agent",
+ label: "OpenSSH Authentication Agent"
+ },
+ {
+ value: "sshd",
+ label: "OpenSSH SSH Server"
+ },
+ {
+ value: "SstpSvc",
+ label: "Secure Socket Tunneling Protocol Service"
+ },
+ {
+ value: "StateRepository",
+ label: "State Repository Service"
+ },
+ {
+ value: "stisvc",
+ label: "Windows Image Acquisition (WIA)"
+ },
+ {
+ value: "StorSvc",
+ label: "Storage Service"
+ },
+ {
+ value: "svsvc",
+ label: "Spot Verifier"
+ },
+ {
+ value: "swprv",
+ label: "Microsoft Software Shadow Copy Provider"
+ },
+ {
+ value: "SynTPEnhService",
+ label: "SynTPEnh Caller Service"
+ },
+ {
+ value: "SysMain",
+ label: "SysMain"
+ },
+ {
+ value: "SystemEventsBroker",
+ label: "System Events Broker"
+ },
+ {
+ value: "TabletInputService",
+ label: "Touch Keyboard and Handwriting Panel Service"
+ },
+ {
+ value: "TapiSrv",
+ label: "Telephony"
+ },
+ {
+ value: "TermService",
+ label: "Remote Desktop Services"
+ },
+ {
+ value: "Themes",
+ label: "Themes"
+ },
+ {
+ value: "TieringEngineService",
+ label: "Storage Tiers Management"
+ },
+ {
+ value: "TimeBrokerSvc",
+ label: "Time Broker"
+ },
+ {
+ value: "TokenBroker",
+ label: "Web Account Manager"
+ },
+ {
+ value: "TrkWks",
+ label: "Distributed Link Tracking Client"
+ },
+ {
+ value: "TroubleshootingSvc",
+ label: "Recommended Troubleshooting Service"
+ },
+ {
+ value: "TrustedInstaller",
+ label: "Windows Modules Installer"
+ },
+ {
+ value: "tzautoupdate",
+ label: "Auto Time Zone Updater"
+ },
+ {
+ value: "UevAgentService",
+ label: "User Experience Virtualization Service"
+ },
+ {
+ value: "UmRdpService",
+ label: "Remote Desktop Services UserMode Port Redirector"
+ },
+ {
+ value: "upnphost",
+ label: "UPnP Device Host"
+ },
+ {
+ value: "UserManager",
+ label: "User Manager"
+ },
+ {
+ value: "UsoSvc",
+ label: "Update Orchestrator Service"
+ },
+ {
+ value: "VacSvc",
+ label: "Volumetric Audio Compositor Service"
+ },
+ {
+ value: "VaultSvc",
+ label: "Credential Manager"
+ },
+ {
+ value: "vds",
+ label: "Virtual Disk"
+ },
+ {
+ value: "vmcompute",
+ label: "Hyper-V Host Compute Service"
+ },
+ {
+ value: "vmicguestinterface",
+ label: "Hyper-V Guest Service Interface"
+ },
+ {
+ value: "vmicheartbeat",
+ label: "Hyper-V Heartbeat Service"
+ },
+ {
+ value: "vmickvpexchange",
+ label: "Hyper-V Data Exchange Service"
+ },
+ {
+ value: "vmicrdv",
+ label: "Hyper-V Remote Desktop Virtualization Service"
+ },
+ {
+ value: "vmicshutdown",
+ label: "Hyper-V Guest Shutdown Service"
+ },
+ {
+ value: "vmictimesync",
+ label: "Hyper-V Time Synchronization Service"
+ },
+ {
+ value: "vmicvmsession",
+ label: "Hyper-V PowerShell Direct Service"
+ },
+ {
+ value: "vmicvss",
+ label: "Hyper-V Volume Shadow Copy Requestor"
+ },
+ {
+ value: "VSS",
+ label: "Volume Shadow Copy"
+ },
+ {
+ value: "W32Time",
+ label: "Windows Time"
+ },
+ {
+ value: "WaaSMedicSvc",
+ label: "Windows Update Medic Service"
+ },
+ {
+ value: "WalletService",
+ label: "WalletService"
+ },
+ {
+ value: "WarpJITSvc",
+ label: "WarpJITSvc"
+ },
+ {
+ value: "wbengine",
+ label: "Block Level Backup Engine Service"
+ },
+ {
+ value: "WbioSrvc",
+ label: "Windows Biometric Service"
+ },
+ {
+ value: "Wcmsvc",
+ label: "Windows Connection Manager"
+ },
+ {
+ value: "wcncsvc",
+ label: "Windows Connect Now - Config Registrar"
+ },
+ {
+ value: "WdiServiceHost",
+ label: "Diagnostic Service Host"
+ },
+ {
+ value: "WdiSystemHost",
+ label: "Diagnostic System Host"
+ },
+ {
+ value: "WdNisSvc",
+ label: "Windows Defender Antivirus Network Inspection Service"
+ },
+ {
+ value: "WebClient",
+ label: "WebClient"
+ },
+ {
+ value: "Wecsvc",
+ label: "Windows Event Collector"
+ },
+ {
+ value: "WEPHOSTSVC",
+ label: "Windows Encryption Provider Host Service"
+ },
+ {
+ value: "wercplsupport",
+ label: "Problem Reports and Solutions Control Panel Support"
+ },
+ {
+ value: "WerSvc",
+ label: "Windows Error Reporting Service"
+ },
+ {
+ value: "WFDSConMgrSvc",
+ label: "Wi-Fi Direct Services Connection Manager Service"
+ },
+ {
+ value: "WiaRpc",
+ label: "Still Image Acquisition Events"
+ },
+ {
+ value: "WinDefend",
+ label: "Windows Defender Antivirus Service"
+ },
+ {
+ value: "WinHttpAutoProxySvc",
+ label: "WinHTTP Web Proxy Auto-Discovery Service"
+ },
+ {
+ value: "Winmgmt",
+ label: "Windows Management Instrumentation"
+ },
+ {
+ value: "WinRM",
+ label: "Windows Remote Management (WS-Management)"
+ },
+ {
+ value: "wisvc",
+ label: "Windows Insider Service"
+ },
+ {
+ value: "WlanSvc",
+ label: "WLAN AutoConfig"
+ },
+ {
+ value: "wlidsvc",
+ label: "Microsoft Account Sign-in Assistant"
+ },
+ {
+ value: "wlpasvc",
+ label: "Local Profile Assistant Service"
+ },
+ {
+ value: "WManSvc",
+ label: "Windows Management Service"
+ },
+ {
+ value: "wmiApSrv",
+ label: "WMI Performance Adapter"
+ },
+ {
+ value: "WMPNetworkSvc",
+ label: "Windows Media Player Network Sharing Service"
+ },
+ {
+ value: "workfolderssvc",
+ label: "Work Folders"
+ },
+ {
+ value: "WpcMonSvc",
+ label: "Parental Controls"
+ },
+ {
+ value: "WPDBusEnum",
+ label: "Portable Device Enumerator Service"
+ },
+ {
+ value: "WpnService",
+ label: "Windows Push Notifications System Service"
+ },
+ {
+ value: "wscsvc",
+ label: "Security Center"
+ },
+ {
+ value: "WSearch",
+ label: "Windows Search"
+ },
+ {
+ value: "wuauserv",
+ label: "Windows Update"
+ },
+ {
+ value: "WwanSvc",
+ label: "WWAN AutoConfig"
+ },
+ {
+ value: "XblAuthManager",
+ label: "Xbox Live Auth Manager"
+ },
+ {
+ value: "XblGameSave",
+ label: "Xbox Live Game Save"
+ },
+ {
+ value: "XboxGipSvc",
+ label: "Xbox Accessory Management Service"
+ },
+ {
+ value: "XboxNetApiSvc",
+ label: "Xbox Live Networking Service"
+ },
+ {
+ value: "YMC",
+ label: "YMC"
+ },
+ {
+ value: "AarSvc_35b28a",
+ label: "Agent Activation Runtime_35b28a"
+ },
+ {
+ value: "BcastDVRUserService_35b28a",
+ label: "GameDVR and Broadcast User Service_35b28a"
+ },
+ {
+ value: "BluetoothUserService_35b28a",
+ label: "Bluetooth User Support Service_35b28a"
+ },
+ {
+ value: "CaptureService_35b28a",
+ label: "CaptureService_35b28a"
+ },
+ {
+ value: "cbdhsvc_35b28a",
+ label: "Clipboard User Service_35b28a"
+ },
+ {
+ value: "CDPUserSvc_35b28a",
+ label: "Connected Devices Platform User Service_35b28a"
+ },
+ {
+ value: "ConsentUxUserSvc_35b28a",
+ label: "ConsentUX_35b28a"
+ },
+ {
+ value: "CredentialEnrollmentManagerUserSvc_35b28a",
+ label: "CredentialEnrollmentManagerUserSvc_35b28a"
+ },
+ {
+ value: "DeviceAssociationBrokerSvc_35b28a",
+ label: "DeviceAssociationBroker_35b28a"
+ },
+ {
+ value: "DevicePickerUserSvc_35b28a",
+ label: "DevicePicker_35b28a"
+ },
+ {
+ value: "DevicesFlowUserSvc_35b28a",
+ label: "DevicesFlow_35b28a"
+ },
+ {
+ value: "LxssManagerUser_35b28a",
+ label: "LxssManagerUser_35b28a"
+ },
+ {
+ value: "MessagingService_35b28a",
+ label: "MessagingService_35b28a"
+ },
+ {
+ value: "OneSyncSvc_35b28a",
+ label: "Sync Host_35b28a"
+ },
+ {
+ value: "PimIndexMaintenanceSvc_35b28a",
+ label: "Contact Data_35b28a"
+ },
+ {
+ value: "PrintWorkflowUserSvc_35b28a",
+ label: "PrintWorkflow_35b28a"
+ },
+ {
+ value: "UnistoreSvc_35b28a",
+ label: "User Data Storage_35b28a"
+ },
+ {
+ value: "UserDataSvc_35b28a",
+ label: "User Data Access_35b28a"
+ },
+ {
+ value: "WpnUserService_35b28a",
+ label: "Windows Push Notifications User Service_35b28a"
+ },
+ {
+ value: "Mesh Agent",
+ label: "Mesh Agent background service"
+ },
+ {
+ value: "salt-minion",
+ label: "salt-minion"
+ },
+ {
+ value: "tacticalagent",
+ label: "Tactical RMM Agent"
+ }
+]
\ No newline at end of file
diff --git a/src/composables/clients.js b/src/composables/clients.js
index eb44223..a09ce67 100644
--- a/src/composables/clients.js
+++ b/src/composables/clients.js
@@ -1,9 +1,9 @@
-import { ref } from "vue"
+import { ref, onMounted } from "vue"
import { fetchClients } from "@/api/clients"
import { formatClientOptions, formatSiteOptions } from "@/utils/format"
-export function useClientDropdown() {
+export function useClientDropdown(onMount = false) {
const client = ref(null)
const clients = ref([])
const clientOptions = ref([])
@@ -12,6 +12,8 @@ export function useClientDropdown() {
clientOptions.value = formatClientOptions(await fetchClients(), flat)
}
+ if (onMount) onMounted(getClientOptions)
+
return {
//data
client,
@@ -23,7 +25,7 @@ export function useClientDropdown() {
}
}
-export function useSiteDropdown() {
+export function useSiteDropdown(onMount = false) {
const site = ref(null)
const sites = ref([])
const siteOptions = ref([])
@@ -32,6 +34,8 @@ export function useSiteDropdown() {
siteOptions.value = formatSiteOptions(await fetchClients())
}
+ if (onMount) onMounted(getSiteOptions)
+
return {
//data
site,
diff --git a/src/composables/scripts.js b/src/composables/scripts.js
index a8f67da..808a6c8 100644
--- a/src/composables/scripts.js
+++ b/src/composables/scripts.js
@@ -11,7 +11,7 @@ export function useScriptDropdown(setScript = null) {
// specifing flat returns an array of script names versus {value:id, label: hostname}
async function getScriptOptions(showCommunityScripts = false, flat = false) {
- scriptOptions.value = formatScriptOptions(await fetchScripts({ showCommunityScripts }), flat)
+ scriptOptions.value = Object.freeze(formatScriptOptions(await fetchScripts({ showCommunityScripts }), flat))
}
// watch scriptPk for changes and update the default timeout and args
diff --git a/src/mixins/mixins.js b/src/mixins/mixins.js
index 4f202d4..ca55ae2 100644
--- a/src/mixins/mixins.js
+++ b/src/mixins/mixins.js
@@ -197,7 +197,7 @@ export default {
},
async getAgentOptions() {
- const { data } = await axios.get("/agents/listagentsnodetail/")
+ const { data } = await axios.get("/agents/?detail=false")
return formatAgentOptions(data)
},
diff --git a/src/router/routes.js b/src/router/routes.js
index 87b42e6..3d36372 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -24,7 +24,7 @@ const routes = [
}
},
{
- path: "/takecontrol/:pk",
+ path: "/takecontrol/:agent_id",
name: "TakeControl",
component: () => import("@/views/TakeControl"),
meta: {
@@ -32,7 +32,7 @@ const routes = [
}
},
{
- path: "/remotebackground/:pk",
+ path: "/remotebackground/:agent_id",
name: "RemoteBackground",
component: () => import("@/views/RemoteBackground"),
meta: {
diff --git a/src/store/index.js b/src/store/index.js
index ff72ced..f368119 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,4 +1,5 @@
import { createStore } from 'vuex'
+import { Screen } from 'quasar'
import axios from "axios";
export default function () {
@@ -11,17 +12,11 @@ export default function () {
tree: [],
treeReady: false,
selectedRow: null,
- agentSummary: {},
- winUpdates: {},
- agentChecks: null,
- automatedTasks: {},
agentTableLoading: false,
treeLoading: false,
- installedSoftware: [],
- notes: [],
needrefresh: false,
- tableHeight: "35vh",
- tabHeight: "35vh",
+ tableHeight: "300px",
+ tabHeight: "300px",
showCommunityScripts: false,
agentDblClickAction: "",
agentUrlAction: null,
@@ -39,37 +34,12 @@ export default function () {
loggedIn(state) {
return state.token !== null;
},
- selectedAgentPk(state) {
- return state.agentSummary.id;
- },
- agentDisks(state) {
- return state.agentSummary.disks;
- },
- agentServices(state) {
- return state.agentSummary.services;
- },
- checks(state) {
- return state.agentChecks;
+ selectedAgentId(state) {
+ return state.selectedRow.agent_id;
},
showCommunityScripts(state) {
return state.showCommunityScripts;
},
- sortedUpdates(state) {
- // sort patches by latest then not installed
- if (!state.winUpdates.winupdates) {
- return [];
- }
- const sortedByID = state.winUpdates.winupdates.sort((a, b) =>
- a.id > b.id ? 1 : -1
- );
- const sortedByInstall = sortedByID.sort(a =>
- a.installed === false ? -1 : 1
- );
- return sortedByInstall;
- },
- agentHostname(state) {
- return state.agentSummary.hostname;
- },
needRefresh(state) {
return state.needrefresh;
},
@@ -84,8 +54,8 @@ export default function () {
AGENT_TABLE_LOADING(state, visible) {
state.agentTableLoading = visible;
},
- setActiveRow(state, pk) {
- state.selectedRow = pk;
+ setActiveRow(state, agent_id) {
+ state.selectedRow = agent_id;
},
retrieveToken(state, { token, username }) {
state.token = token;
@@ -102,43 +72,22 @@ export default function () {
state.tree = treebar;
state.treeReady = true;
},
- setSummary(state, summary) {
- state.agentSummary = summary;
- },
- SET_WIN_UPDATE(state, updates) {
- state.winUpdates = updates;
- },
- SET_INSTALLED_SOFTWARE(state, software) {
- state.installedSoftware = software;
- },
- setChecks(state, checks) {
- state.agentChecks = checks;
- },
- SET_AUTOMATED_TASKS(state, tasks) {
- state.automatedTasks = tasks;
- },
destroySubTable(state) {
- (state.agentSummary = {}),
- (state.agentChecks = null),
- (state.winUpdates = {});
- (state.installedSoftware = []);
state.selectedRow = "";
},
SET_REFRESH_NEEDED(state, action) {
state.needrefresh = action;
},
SET_SPLITTER(state, val) {
- const agentHeight = Math.abs(100 - val - 15);
- const tabsHeight = Math.abs(val - 10);
- agentHeight <= 15.0 ? state.tableHeight = "15vh" : state.tableHeight = `${agentHeight}vh`;
- tabsHeight <= 15.0 ? state.tabHeight = "15vh" : state.tabHeight = `${tabsHeight}vh`;
+ // top toolbar is 50px. Filebar is 40px and agent filter tabs are 44px
+ state.tableHeight = `${Screen.height - 50 - 40 - 78 - val}px`;
+
+ // q-tabs are 37px
+ state.tabHeight = `${val - 37}px`;
},
SET_CLIENT_SPLITTER(state, val) {
state.clientTreeSplitter = val;
},
- SET_NOTES(state, notes) {
- state.notes = notes;
- },
setShowCommunityScripts(state, show) {
state.showCommunityScripts = show
},
@@ -177,60 +126,6 @@ export default function () {
getDashInfo(context) {
return axios.get("/core/dashinfo/");
},
- loadAutomatedTasks(context, pk) {
- axios.get(`/tasks/${pk}/automatedtasks/`).then(r => {
- context.commit("SET_AUTOMATED_TASKS", r.data);
- })
- .catch(e => { })
- },
- loadInstalledSoftware(context, pk) {
- axios.get(`/software/installed/${pk}/`).then(r => {
- context.commit("SET_INSTALLED_SOFTWARE", r.data.software);
- })
- .catch(e => { });
- },
- loadWinUpdates(context, pk) {
- axios.get(`/winupdate/${pk}/getwinupdates/`).then(r => {
- context.commit("SET_WIN_UPDATE", r.data);
- })
- .catch(e => { });
- },
- loadSummary(context, pk) {
- axios.get(`/agents/${pk}/agentdetail/`).then(r => {
- context.commit("setSummary", r.data);
- })
- .catch(e => { });
- },
- loadChecks(context, pk) {
- axios.get(`/checks/${pk}/loadchecks/`).then(r => {
- context.commit("setChecks", r.data);
- })
- .catch(e => { });
- },
- loadNotes(context, pk) {
- axios.get(`/agents/${pk}/notes/`).then(r => {
- context.commit("SET_NOTES", r.data.notes);
- })
- .catch(e => { });
- },
- loadDefaultServices(context) {
- return axios.get("/services/getdefaultservices/");
- },
- loadAgentServices(context, agentpk) {
- return axios.get(`/services/${agentpk}/services/`);
- },
- editCheckAlert(context, { pk, data }) {
- return axios.patch(`/checks/${pk}/check/`, data);
- },
- deleteCheck(context, pk) {
- return axios.delete(`/checks/${pk}/check/`);
- },
- editAutoTask(context, data) {
- return axios.patch(`/tasks/${data.id}/automatedtasks/`, data);
- },
- deleteAutoTask(context, pk) {
- return axios.delete(`/tasks/${pk}/automatedtasks/`);
- },
getUpdatedSites(context) {
axios.get("/clients/clients/").then(r => {
context.commit("getUpdatedSites", r.data);
@@ -259,7 +154,7 @@ export default function () {
let siteNode = {
label: site.name,
id: site.id,
- raw: `Site|${site.id}`,
+ raw: `Site | ${site.id} `,
header: "generic",
icon: "apartment",
client: client.id,
@@ -280,7 +175,7 @@ export default function () {
let clientNode = {
label: client.name,
id: client.id,
- raw: `Client|${client.id}`,
+ raw: `Client | ${client.id} `,
header: "root",
icon: "business",
server_policy: client.server_policy,
diff --git a/src/utils/format.js b/src/utils/format.js
index 4cb6fd0..88ec724 100644
--- a/src/utils/format.js
+++ b/src/utils/format.js
@@ -141,20 +141,10 @@ export function formatUserOptions(data, flat = false) {
// date formatting
-function _appendLeadingZeroes(n) {
- if (n <= 9) {
- return "0" + n;
- }
- return n
-}
-
-export function formatDate(date, includeSeconds = false) {
- if (!date) return
- const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
- let dt = new Date(date)
- let formatted = months[dt.getMonth()] + "-" + _appendLeadingZeroes(dt.getDate()) + "-" + _appendLeadingZeroes(dt.getFullYear()) + " - " + _appendLeadingZeroes(dt.getHours()) + ":" + _appendLeadingZeroes(dt.getMinutes())
-
- return includeSeconds ? formatted + ":" + _appendLeadingZeroes(dt.getSeconds()) : formatted
+export function formatDate(dateString) {
+ if (!dateString) return "";
+ const d = date.extractDate(dateString, "MM DD YYYY HH:mm");
+ return date.formatDate(d, "MMM-DD-YYYY - HH:mm");
}
@@ -178,4 +168,17 @@ export function truncateText(txt, chars) {
if (!txt) return
return txt.length >= chars ? txt.substring(0, chars) + "..." : txt;
-}
\ No newline at end of file
+}
+
+export function bytes2Human(bytes) {
+ if (bytes == 0) return "0B";
+ const k = 1024;
+ const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
+}
+
+export function convertMemoryToPercent(percent, memory) {
+ const mb = memory * 1024;
+ return Math.ceil((percent * mb) / 100).toLocaleString();
+}
diff --git a/src/utils/validation.js b/src/utils/validation.js
new file mode 100644
index 0000000..8f8ce7a
--- /dev/null
+++ b/src/utils/validation.js
@@ -0,0 +1,37 @@
+import { Notify } from "quasar";
+
+export function isValidThreshold(warning, error, diskcheck = false) {
+ if (warning === 0 && error === 0) {
+ Notify.create({ type: "negative", timeout: 2000, message: "Warning Threshold or Error Threshold need to be set" });
+ return false;
+ }
+
+ if (!diskcheck && warning > error && warning > 0 && error > 0) {
+ Notify.create({ type: "negative", timeout: 2000, message: "Warning Threshold must be less than Error Threshold" });
+ return false;
+ }
+
+ if (diskcheck && warning < error && warning > 0 && error > 0) {
+ Notify.create({ type: "negative", timeout: 2000, message: "Warning Threshold must be more than Error Threshold" });
+ return false;
+ }
+
+ return true;
+}
+
+export function validateEventID(val) {
+ if (val === null || val.toString().replace(/\s/g, "") === "") {
+ return false;
+ } else if (val === "*") {
+ return true;
+ } else if (!isNaN(val)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+// validate script return code
+export function validateRetcode(val, done) {
+ /^\d+$/.test(val) ? done(val) : done();
+}
\ No newline at end of file
diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue
index dc02c1e..0046289 100644
--- a/src/views/Dashboard.vue
+++ b/src/views/Dashboard.vue
@@ -91,7 +91,7 @@
-
+
@@ -224,9 +224,12 @@
@@ -385,7 +388,7 @@
-
+
@@ -442,7 +445,7 @@ export default {
workstationCount: 0,
workstationOfflineCount: 0,
selectedTree: "",
- innerModel: 50,
+ innerModel: (this.$q.screen.height - 82) / 2,
clientActive: "",
siteActive: "",
frame: [],
@@ -629,14 +632,14 @@ export default {
this.loadFrame(this.selectedTree, false);
}
- if (this.selectedAgentPk) {
- const pk = this.selectedAgentPk;
- this.$store.dispatch("loadSummary", pk);
- this.$store.dispatch("loadChecks", pk);
- this.$store.dispatch("loadAutomatedTasks", pk);
- this.$store.dispatch("loadWinUpdates", pk);
- this.$store.dispatch("loadInstalledSoftware", pk);
- this.$store.dispatch("loadNotes", pk);
+ if (this.selectedAgentId) {
+ const agent_id = this.selectedAgentId;
+ this.$store.dispatch("loadSummary", agent_id);
+ this.$store.dispatch("loadChecks", agent_id);
+ this.$store.dispatch("loadAutomatedTasks", agent_id);
+ this.$store.dispatch("loadWinUpdates", agent_id);
+ this.$store.dispatch("loadInstalledSoftware", agent_id);
+ this.$store.dispatch("loadNotes", agent_id);
}
},
loadFrame(activenode, destroySub = true) {
@@ -652,17 +655,17 @@ export default {
id = activenode.split("|")[1];
if (urlType === "Client") {
- data.clientPK = id;
+ data.client = id;
execute = true;
} else if (urlType === "Site") {
- data.sitePK = id;
+ data.site = id;
execute = true;
}
if (execute) {
this.$store.commit("AGENT_TABLE_LOADING", true);
this.$axios
- .patch("/agents/listagents/", data)
+ .get("/agents/", data)
.then(r => {
this.frame = r.data;
this.$store.commit("AGENT_TABLE_LOADING", false);
@@ -687,7 +690,7 @@ export default {
loadAllClients() {
this.$store.commit("AGENT_TABLE_LOADING", true);
this.$axios
- .patch("/agents/listagents/")
+ .get("/agents/")
.then(r => {
this.frame = r.data;
this.$store.commit("AGENT_TABLE_LOADING", false);
@@ -894,7 +897,7 @@ export default {
treeReady: state => state.treeReady,
clients: state => state.clients,
}),
- ...mapGetters(["selectedAgentPk", "needRefresh"]),
+ ...mapGetters(["selectedAgentId", "needRefresh"]),
latestReleaseURL() {
return this.latestTRMMVersion !== "error"
? `https://github.com/wh1te909/tacticalrmm/releases/tag/v${this.latestTRMMVersion}`
@@ -967,6 +970,9 @@ export default {
this.$store.dispatch("checkVer");
this.getTree();
+ // set initial value for agent table and agent tabs
+ this.setSplitter(this.innerModel);
+
this.livePoll();
},
beforeUnmount() {
diff --git a/src/views/RemoteBackground.vue b/src/views/RemoteBackground.vue
index 9e40fea..fb22069 100644
--- a/src/views/RemoteBackground.vue
+++ b/src/views/RemoteBackground.vue
@@ -28,13 +28,13 @@
>
-
+
-
+
-
+
@@ -44,62 +44,65 @@
\ No newline at end of file
diff --git a/src/views/TakeControl.vue b/src/views/TakeControl.vue
index 630f759..0f07223 100644
--- a/src/views/TakeControl.vue
+++ b/src/views/TakeControl.vue
@@ -6,126 +6,122 @@
-
-
+
+
-
+
\ No newline at end of file