Skip to content

Commit 68d3fbe

Browse files
committed
Store logs backend
1 parent 13dd2e9 commit 68d3fbe

File tree

4 files changed

+71
-9
lines changed

4 files changed

+71
-9
lines changed

packages/backend/src/index.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ const settings: Settings = {
1515
forceUninstall: false,
1616
};
1717

18+
type Log = {
19+
kind: "Log";
20+
origin: string;
21+
timestamp: number;
22+
message: string;
23+
};
24+
25+
const logs: Log[] = [];
26+
1827
const setSettings = (sdk: SDK, newSettings: Settings) => {
1928
Object.assign(settings, newSettings);
2029
};
@@ -30,14 +39,32 @@ const downloadPackage = async (sdk: SDK, url: string) => {
3039
return `data:application/zip;base64,${base64}`;
3140
};
3241

42+
const addLog = (sdk: SDK, log: Log) => {
43+
logs.push(log);
44+
};
45+
46+
const getLogs = (sdk: SDK): Log[] => {
47+
return logs;
48+
};
49+
50+
const clearLogs = (sdk: SDK) => {
51+
logs.length = 0;
52+
};
53+
3354
export type API = DefineAPI<{
3455
setSettings: typeof setSettings;
3556
getSettings: typeof getSettings;
57+
addLog: typeof addLog;
58+
getLogs: typeof getLogs;
59+
clearLogs: typeof clearLogs;
3660
downloadPackage: typeof downloadPackage;
3761
}>;
3862

3963
export function init(sdk: SDK<API>) {
4064
sdk.api.register("setSettings", setSettings);
4165
sdk.api.register("getSettings", getSettings);
66+
sdk.api.register("addLog", addLog);
67+
sdk.api.register("getLogs", getLogs);
68+
sdk.api.register("clearLogs", clearLogs);
4269
sdk.api.register("downloadPackage", downloadPackage);
4370
}
Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,44 @@
11
import { computed, ref } from "vue";
22

3+
import { useSDK } from "@/plugins/sdk";
4+
35
type Log = {
46
kind: "Log";
57
origin: string;
6-
timestamp: Date;
8+
timestamp: number;
79
message: string;
810
};
911

1012
export const useLogs = () => {
13+
const sdk = useSDK();
14+
1115
const entries = ref<Log[]>([]);
1216
const logs = computed(() =>
1317
entries.value
1418
.map(
1519
(log) =>
16-
`${log.timestamp.toISOString()} | ${log.origin} | ${log.message}`,
20+
`${new Date(log.timestamp).toISOString()} | ${log.origin} | ${
21+
log.message
22+
}`,
1723
)
1824
.join("\n"),
1925
);
26+
27+
const initializeLogs = async () => {
28+
const logs = await sdk.backend.getLogs();
29+
entries.value = logs;
30+
};
31+
2032
const addLog = (origin: string, message: string) => {
21-
entries.value.push({ kind: "Log", origin, timestamp: new Date(), message });
33+
const log: Log = { kind: "Log", origin, timestamp: Date.now(), message };
34+
entries.value.push(log);
35+
sdk.backend.addLog(log);
36+
};
37+
38+
const clearLogs = async () => {
39+
entries.value = [];
40+
await sdk.backend.clearLogs();
2241
};
2342

24-
return { logs, addLog };
43+
return { logs, addLog, clearLogs, initializeLogs };
2544
};

packages/frontend/src/views/App.vue

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
<script setup lang="ts">
22
import Button from "primevue/button";
33
import Card from "primevue/card";
4+
import Checkbox from "primevue/checkbox";
45
import InputGroup from "primevue/inputgroup";
56
import InputGroupAddon from "primevue/inputgroupaddon";
67
import InputText from "primevue/inputtext";
78
import Tag from "primevue/tag";
89
import TextArea from "primevue/textarea";
910
1011
import { useForm } from "./useForm";
11-
import Checkbox from "primevue/checkbox";
1212
13-
const { serverUrl, forceUninstall, onSubmit, state, onDisconnect, logs } =
14-
useForm();
13+
const {
14+
serverUrl,
15+
forceUninstall,
16+
onSubmit,
17+
state,
18+
onDisconnect,
19+
logs,
20+
onClearLogs,
21+
} = useForm();
1522
</script>
1623

1724
<template>
@@ -75,7 +82,10 @@ const { serverUrl, forceUninstall, onSubmit, state, onDisconnect, logs } =
7582
</div>
7683
</div>
7784
<div class="flex-1 flex flex-col gap-2">
78-
<label for="logs" class="text-sm text-surface-300">Logs</label>
85+
<div class="flex items-end justify-between">
86+
<label for="logs" class="text-sm text-surface-300">Logs</label>
87+
<Button severity="danger" label="Clear" @click="onClearLogs" />
88+
</div>
7989
<TextArea
8090
id="logs"
8191
readonly

packages/frontend/src/views/useForm.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { useState } from "@/composables/useState";
77
import { toMessage } from "@/utils/watcher";
88

99
export const useForm = () => {
10-
const { logs, addLog } = useLogs();
10+
const { logs, addLog, initializeLogs, clearLogs } = useLogs();
1111
const { state, setState } = useState();
1212
const { getSettings, setSettings, initializeSettings } = useSettings();
1313
const { installPackage, removePackage, getInstalledPackage } =
@@ -106,6 +106,7 @@ export const useForm = () => {
106106
const serverUrl = ref("");
107107
onMounted(async () => {
108108
await initializeSettings();
109+
await initializeLogs();
109110

110111
const settings = getSettings();
111112
if (settings.serverUrl !== undefined) {
@@ -133,12 +134,17 @@ export const useForm = () => {
133134
}
134135
};
135136

137+
const onClearLogs = async () => {
138+
await clearLogs();
139+
};
140+
136141
return {
137142
serverUrl,
138143
forceUninstall,
139144
state,
140145
onSubmit,
141146
onDisconnect,
147+
onClearLogs,
142148
logs,
143149
};
144150
};

0 commit comments

Comments
 (0)