mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-21 13:23:07 +01:00
* feat: moves to tailwindcss and better component library * update styles * creates toggle component * adds drop down component * cleans up components * removes unused components * uses tailwind for scroll view * removes table component * improves animation * cleans up more styles * uses more tailwind * cleans up more styles with flex * more styles * removes bulma * adds colors * updates modules * fixes bugs * stops importing styles.scss * more clean up * cleans up headers * cleans up title * fixes title * fixes mobile-hidden * fixes shadow * fixes colors * add tailwindcss/nesting * adds more colors * fixes more colors * updates colors * fixes colors * colors * fixes menu on left * menu and modal * menu and modal * fuzzy search * fixes menu on left * remove logs * cleans up search * adds host to search * remove outline from inputs * cleans up left search icon * removes unused styles * fixes docker * removes sass! * cleans up styles * Fixe smobile menu * fixes mobile menu * fixes typecheck * fixes seconday color * adds drop down for container * cleans header css * updates css * fixes other layouts * updates some tests * fixes border * fixes home screen font * fixes top header * fixes tests * fixes fieldlist * fixes complex * cleans up more * removes index * fixes tests * fixes tests * resolves conflicts
91 lines
2.2 KiB
Vue
91 lines
2.2 KiB
Vue
<template>
|
|
<div class="flex flex-col gap-16 px-8 pt-8">
|
|
<section>
|
|
<div class="stats grid bg-base-lighter shadow">
|
|
<div class="stat">
|
|
<div class="stat-value">{{ runningContainers.length }} / {{ containers.length }}</div>
|
|
<div class="stat-title">{{ $t("label.running") }} / {{ $t("label.total-containers") }}</div>
|
|
</div>
|
|
<div class="stat">
|
|
<div class="stat-value">{{ totalCpu }}%</div>
|
|
<div class="stat-title">{{ $t("label.total-cpu-usage") }}</div>
|
|
</div>
|
|
<div class="stat">
|
|
<div class="stat-value">{{ formatBytes(totalMem) }}</div>
|
|
<div class="stat-title">{{ $t("label.total-mem-usage") }}</div>
|
|
</div>
|
|
|
|
<div class="stat">
|
|
<div class="stat-value">{{ version }}</div>
|
|
<div class="stat-title">{{ $t("label.dozzle-version") }}</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<container-table :containers="runningContainers"></container-table>
|
|
</section>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { Container } from "@/models/Container";
|
|
|
|
const { t } = useI18n();
|
|
const { version } = config;
|
|
const containerStore = useContainerStore();
|
|
const { containers, ready } = storeToRefs(containerStore) as unknown as {
|
|
containers: Ref<Container[]>;
|
|
ready: Ref<boolean>;
|
|
};
|
|
|
|
const mostRecentContainers = $computed(() => [...containers.value].sort((a, b) => +b.created - +a.created));
|
|
const runningContainers = $computed(() => mostRecentContainers.filter((c) => c.state === "running"));
|
|
|
|
let totalCpu = $ref(0);
|
|
useIntervalFn(
|
|
() => {
|
|
totalCpu = runningContainers.reduce((acc, c) => acc + c.stat.cpu, 0);
|
|
},
|
|
1000,
|
|
{ immediate: true },
|
|
);
|
|
|
|
let totalMem = $ref(0);
|
|
useIntervalFn(
|
|
() => {
|
|
totalMem = runningContainers.reduce((acc, c) => acc + c.stat.memoryUsage, 0);
|
|
},
|
|
1000,
|
|
{ immediate: true },
|
|
);
|
|
|
|
watchEffect(() => {
|
|
if (ready.value) {
|
|
setTitle(t("title.dashboard", { count: runningContainers.length }));
|
|
}
|
|
});
|
|
</script>
|
|
<style lang="postcss" scoped>
|
|
:deep(tr td) {
|
|
padding-top: 1em;
|
|
padding-bottom: 1em;
|
|
}
|
|
|
|
.stat > div {
|
|
@apply text-center;
|
|
}
|
|
|
|
.stat-value {
|
|
@apply font-light;
|
|
}
|
|
|
|
.stat-title {
|
|
@apply font-light;
|
|
}
|
|
|
|
.section + .section {
|
|
padding-top: 0;
|
|
}
|
|
</style>
|