add split logs

This commit is contained in:
2023-02-03 11:17:19 +10:00
parent 9188461b1f
commit 32d39cdc1c
2 changed files with 56 additions and 20 deletions

View File

@@ -26,14 +26,33 @@ class LogController extends ApiController
if($request->user()?->hasPermission('logs/' . $name)) { if($request->user()?->hasPermission('logs/' . $name)) {
switch(strtolower($name)) { switch(strtolower($name)) {
case 'discord': case 'discord':
$contents = ''; $outputContents = '';
$errorContents = '';
// output log
$filePath = '/home/discordbot/.pm2/logs/stemmech-discordbot-out-0.log'; $filePath = '/home/discordbot/.pm2/logs/stemmech-discordbot-out-0.log';
if(file_exists($filePath) === true) { if(file_exists($filePath) === true) {
$contents = file_get_contents($filePath); $outputContents = file_get_contents($filePath);
} }
$lines = preg_split("/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: (?:(?!\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: )[\s\S])*)/", $contents, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); $lines = preg_split("/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: (?:(?!\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: )[\s\S])*)/", $contents, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
return $this->respondJson(['log' => implode('', array_reverse($lines))]); $outputContents = implode('', array_reverse($lines));
// error log
$filePath = '/home/discordbot/.pm2/logs/stemmech-discordbot-error-0.log';
if(file_exists($filePath) === true) {
$outputContents = file_get_contents($filePath);
}
$lines = preg_split("/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: (?:(?!\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}: )[\s\S])*)/", $contents, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$errorContents = implode('', array_reverse($lines));
return $this->respondJson([
'log' => [
'output' => $outputContents,
'errors' => $errorContents,
]
]);
} }
} }

View File

@@ -1,47 +1,64 @@
<template> <template>
<SMContainer :loading="formLoading" permission="logs/discord"> <SMContainer :loading="formLoading" permission="logs/discord">
<h1>Discord Bot Log</h1> <h1>Discord Bot Logs</h1>
<SMMessage <SMMessage
v-if="formMessage.message" v-if="message.message"
:icon="formMessage.icon" :icon="message.icon"
:type="formMessage.type" :type="message.type"
:message="formMessage.message" /> :message="message.message" />
<code v-if="logContent.length > 0">{{ logContent }}</code> <SMTabGroup>
<SMButton label="Reload" @click="loadData" /> <SMTab label="Output">
<code v-if="logOutputContent.length > 0">{{
logOutputContent
}}</code>
</SMTab>
<SMTab label="Errors">
<code v-if="logErrorContent.length > 0">{{
logErrorContent
}}</code>
</SMTab>
</SMTabGroup>
<SMButton label="Reload Logs" @click="loadData" />
</SMContainer> </SMContainer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import SMButton from "../../components/SMButton.vue"; import SMButton from "../../components/SMButton.vue";
import SMTabGroup from "../../components/SMTabGroup.vue";
import SMTab from "../../components/SMTab.vue";
import SMMessage from "../../components/SMMessage.vue"; import SMMessage from "../../components/SMMessage.vue";
import axios from "axios"; import axios from "axios";
let formLoading = ref(false); let formLoading = ref(false);
let logContent = ref(""); let logOutputContent = ref("");
const formMessage = reactive({ let logErrorContent = ref("");
const message = reactive({
icon: "", icon: "",
type: "", type: "",
message: "", message: "",
}); });
const loadData = async () => { const loadData = async () => {
formMessage.icon = ""; message.icon = "";
formMessage.type = "error"; message.type = "error";
formMessage.message = ""; message.message = "";
try { try {
formLoading.value = true; formLoading.value = true;
let res = await axios.get(`logs/discord`); let res = await axios.get(`logs/discord`);
//console.log(res.data.log.split(/2023-02-03T00:23:40: /)); logOutputContent.value = res.data.log.output;
if (logOutputContent.value.length === 0) {
logOutputContent.value = "Log file is empty";
}
logContent.value = res.data.log; logErrorContent.value = res.data.log.errors;
if (logContent.value.length === 0) { if (logErrorContent.value.length === 0) {
formMessage.message = "Log file is empty"; logErrorContent.value = "Log file is empty";
} }
} catch (err) { } catch (err) {
formMessage.message = "Could not load log from server"; message.message = "Could not load logs from server";
} }
formLoading.value = false; formLoading.value = false;