Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3969208942 | ||
|
|
3fa89b58df | ||
|
|
a43a9c8543 | ||
|
|
45deda4dea | ||
|
|
6ec46f02a9 | ||
|
|
d643c17ff1 | ||
|
|
e5de89c6b4 | ||
|
|
c21e7c632d | ||
|
|
6ae771682a | ||
|
|
bf2075b902 |
@@ -44,7 +44,7 @@ class AgentSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Agent
|
||||
exclude = ["last_seen", "id"]
|
||||
exclude = ["last_seen", "id", "patches_last_installed"]
|
||||
|
||||
|
||||
class AgentTableSerializer(serializers.ModelSerializer):
|
||||
|
||||
@@ -15,11 +15,11 @@ EXE_DIR = os.path.join(BASE_DIR, "tacticalrmm/private/exe")
|
||||
AUTH_USER_MODEL = "accounts.User"
|
||||
|
||||
# latest release
|
||||
TRMM_VERSION = "0.9.1"
|
||||
TRMM_VERSION = "0.9.2"
|
||||
|
||||
# bump this version everytime vue code is changed
|
||||
# to alert user they need to manually refresh their browser
|
||||
APP_VER = "0.0.149"
|
||||
APP_VER = "0.0.150"
|
||||
|
||||
# https://github.com/wh1te909/rmmagent
|
||||
LATEST_AGENT_VER = "1.6.2"
|
||||
|
||||
@@ -317,8 +317,12 @@ export default {
|
||||
|
||||
async function getTasks() {
|
||||
loading.value = true;
|
||||
const result = await fetchAgentTasks(selectedAgent.value);
|
||||
tasks.value = result.filter(task => task.sync_status !== "pendingdeletion");
|
||||
try {
|
||||
const result = await fetchAgentTasks(selectedAgent.value);
|
||||
tasks.value = result.filter(task => task.sync_status !== "pendingdeletion");
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="row q-pt-sm q-pl-sm">
|
||||
<div class="col-2">
|
||||
<q-select dense options-dense outlined v-model="days" :options="lastDaysOptions" :label="showDays" />
|
||||
</div>
|
||||
@@ -15,7 +15,7 @@
|
||||
class="remote-bg-tbl-sticky"
|
||||
:rows="events"
|
||||
:columns="columns"
|
||||
style="max-height: 85vh"
|
||||
:style="{ 'max-height': `${$q.screen.height - 85}px` }"
|
||||
:pagination="{ rowsPerPage: 0, sortBy: 'record', descending: true }"
|
||||
:filter="filter"
|
||||
row-key="uid"
|
||||
@@ -37,7 +37,7 @@
|
||||
<q-radio v-model="logType" color="cyan" val="System" label="System" />
|
||||
<q-radio v-model="logType" color="cyan" val="Security" label="Security" />
|
||||
<q-space />
|
||||
<q-input v-model="filter" outlined label="Search" dense clearable>
|
||||
<q-input v-model="filter" style="width: 300px" outlined label="Search" dense clearable>
|
||||
<template v-slot:prepend>
|
||||
<q-icon name="search" />
|
||||
</template>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
dense
|
||||
:table-class="{ 'table-bgcolor': !$q.dark.isActive, 'table-bgcolor-dark': $q.dark.isActive }"
|
||||
class="remote-bg-tbl-sticky"
|
||||
style="max-height: 85vh"
|
||||
:style="{ 'max-height': `${$q.screen.height - 36}px` }"
|
||||
:rows="processes"
|
||||
:columns="columns"
|
||||
:pagination="{ rowsPerPage: 0, sortBy: 'cpu_percent', descending: true }"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
dense
|
||||
:table-class="{ 'table-bgcolor': !$q.dark.isActive, 'table-bgcolor-dark': $q.dark.isActive }"
|
||||
class="remote-bg-tbl-sticky"
|
||||
style="max-height: 85vh"
|
||||
:style="{ 'max-height': `${$q.screen.height - 36}px` }"
|
||||
:rows="services"
|
||||
:columns="columns"
|
||||
:pagination="{ rowsPerPage: 0, sortBy: 'display_name', descending: false }"
|
||||
|
||||
@@ -300,7 +300,7 @@ export default {
|
||||
.onOk(() => {
|
||||
this.$q.loading.show();
|
||||
this.$axios
|
||||
.delete(`/tasks/${task.pk}/`)
|
||||
.delete(`/tasks/${task.id}/`)
|
||||
.then(r => {
|
||||
this.getTasks();
|
||||
this.$q.loading.hide();
|
||||
|
||||
@@ -115,9 +115,13 @@ export default {
|
||||
|
||||
onMounted(async () => {
|
||||
$q.loading.show();
|
||||
const fields = await fetchCustomFields({ model: "site" });
|
||||
customFields.value = fields.filter(field => !field.hide_in_ui);
|
||||
if (props.site) getSiteCustomFieldValues();
|
||||
try {
|
||||
const fields = await fetchCustomFields({ model: "site" });
|
||||
customFields.value = fields.filter(field => !field.hide_in_ui);
|
||||
if (props.site) getSiteCustomFieldValues();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
$q.loading.hide();
|
||||
});
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
</template>
|
||||
|
||||
<template v-slot:top-row>
|
||||
<q-tr v-if="debugLog.length === 1000">
|
||||
<q-tr v-if="Array.isArray(debugLog) && debugLog.length === 1000">
|
||||
<q-td colspan="100%">
|
||||
<q-icon name="warning" color="warning" />
|
||||
Results are limited to 1000 rows.
|
||||
@@ -141,13 +141,17 @@ export default {
|
||||
|
||||
async function getDebugLog() {
|
||||
loading.value = true;
|
||||
const data = {
|
||||
logLevelFilter: logLevelFilter.value,
|
||||
};
|
||||
if (agentFilter.value) data["agentFilter"] = agentFilter.value;
|
||||
if (logTypeFilter.value) data["logTypeFilter"] = logTypeFilter.value;
|
||||
try {
|
||||
const data = {
|
||||
logLevelFilter: logLevelFilter.value,
|
||||
};
|
||||
if (agentFilter.value) data["agentFilter"] = agentFilter.value;
|
||||
if (logTypeFilter.value) data["logTypeFilter"] = logTypeFilter.value;
|
||||
|
||||
debugLog.value = await fetchDebugLog(data);
|
||||
debugLog.value = await fetchDebugLog(data);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,12 @@ export default {
|
||||
const showCompleted = ref(false);
|
||||
const loading = ref(false);
|
||||
const completedCount = computed(() => {
|
||||
return actions.value.filter(action => action.status === "completed").length;
|
||||
try {
|
||||
return actions.value.filter(action => action.status === "completed").length;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
const visibleColumns = computed(() => {
|
||||
@@ -152,7 +157,13 @@ export default {
|
||||
|
||||
async function getPendingActions() {
|
||||
loading.value = true;
|
||||
actions.value = props.agent ? await fetchAgentPendingActions(props.agent.agent_id) : await fetchPendingActions();
|
||||
try {
|
||||
actions.value = props.agent
|
||||
? await fetchAgentPendingActions(props.agent.agent_id)
|
||||
: await fetchPendingActions();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
<div class="q-gutter-sm">
|
||||
<q-checkbox
|
||||
v-model="state.run_asap_after_missed"
|
||||
label="Run task ASAP after a scheduled start is missed (requires agent v1.4.7)"
|
||||
label="Run task ASAP after a scheduled start is missed"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="q-pa-md">
|
||||
<div>
|
||||
<q-tabs
|
||||
v-model="tab"
|
||||
dense
|
||||
@@ -18,26 +18,23 @@
|
||||
</q-tabs>
|
||||
<q-separator />
|
||||
<q-tab-panels v-model="tab">
|
||||
<q-tab-panel name="terminal">
|
||||
<q-tab-panel name="terminal" class="q-pa-none">
|
||||
<iframe
|
||||
style="overflow: hidden; height: 715px"
|
||||
:src="terminal"
|
||||
width="100%"
|
||||
height="100%"
|
||||
scrolling="no"
|
||||
:style="{ height: `${$q.screen.height - 30}px`, width: `${$q.screen.width}px` }"
|
||||
></iframe>
|
||||
</q-tab-panel>
|
||||
<q-tab-panel name="processes">
|
||||
<q-tab-panel name="processes" class="q-pa-none">
|
||||
<ProcessManager :agent_id="agent_id" />
|
||||
</q-tab-panel>
|
||||
<q-tab-panel name="services">
|
||||
<q-tab-panel name="services" class="q-pa-none">
|
||||
<ServicesManager :agent_id="agent_id" />
|
||||
</q-tab-panel>
|
||||
<q-tab-panel name="eventlog">
|
||||
<q-tab-panel name="eventlog" class="q-pa-none">
|
||||
<EventLogManager :agent_id="agent_id" />
|
||||
</q-tab-panel>
|
||||
<q-tab-panel name="filebrowser">
|
||||
<iframe style="overflow: hidden; height: 715px" :src="file" width="100%" height="100%" scrolling="no"></iframe>
|
||||
<q-tab-panel name="filebrowser" class="q-pa-none">
|
||||
<iframe :src="file" :style="{ height: `${$q.screen.height - 30}px`, width: `${$q.screen.width}px` }"></iframe>
|
||||
</q-tab-panel>
|
||||
</q-tab-panels>
|
||||
</div>
|
||||
|
||||
@@ -66,10 +66,14 @@ export default {
|
||||
|
||||
async function getMeshURLs() {
|
||||
$q.loading.show();
|
||||
const data = await fetchAgentMeshCentralURLs(params.agent_id);
|
||||
control.value = data.control;
|
||||
status.value = data.status;
|
||||
useMeta({ title: `${data.hostname} - ${data.client} - ${data.site} | Remote Background` });
|
||||
try {
|
||||
const data = await fetchAgentMeshCentralURLs(params.agent_id);
|
||||
control.value = data.control;
|
||||
status.value = data.status;
|
||||
useMeta({ title: `${data.hostname} - ${data.client} - ${data.site} | Remote Background` });
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
$q.loading.hide();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user