jcloud/dashboard/src2/views/bench/BenchLogsDetail.vue

71 lines
1.7 KiB
Vue

<template>
<CardDetails :showDetails="log">
<div class="px-6 py-5">
<template v-if="log != null">
<div class="flex items-center">
<Button
class="mr-3 md:hidden"
@click="$router.back()"
icon="chevron-left"
/>
<h4 class="text-lg font-medium">
{{ logName }}
<span class="">({{ logLines.length }} lines)</span>
</h4>
</div>
</template>
<div v-else>
<Button
:loading="true"
loading-text="Loading..."
v-if="$resources.log.loading"
/>
<span v-else class="text-base text-gray-600">
{{ logName ? 'Invalid Log' : 'No log selected' }}
</span>
</div>
</div>
<div class="flex-auto overflow-auto px-6 font-mono text-xs" v-if="log">
<div
class="mb-6 rounded-md bg-gray-100 px-2 py-2.5"
:style="{ width: viewportWidth < 768 ? 'calc(100vw - 6rem)' : '' }"
>
<div class="overflow-x-auto">
<pre v-for="(line, id) in logLines" :key="id">{{ line }}</pre>
</div>
</div>
</div>
</CardDetails>
</template>
<script>
import CardDetails from '@/components/CardDetails.vue';
export default {
name: 'BenchLogsDetail',
props: ['bench', 'instanceName', 'logName'],
components: { CardDetails },
inject: ['viewportWidth'],
resources: {
log() {
return {
url: 'jcloud.api.bench.log',
params: {
name: this.bench?.name,
bench: this.instanceName,
log: this.logName
},
auto: Boolean(this.logName)
};
}
},
computed: {
log() {
return this.$resources.log.data && this.$resources.log.data[this.logName];
},
logLines() {
if (this.log && this.logName) return this.log.split('\n').slice(-4096);
return [];
}
}
};
</script>