1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!--
- Copyright 2014-2018 the original author or authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-->
<template>
<table class="table is-hoverable is-fullwidth">
<thead>
<tr>
<th>Timestamp</th>
<th>Method</th>
<th>Path</th>
<th>Status</th>
<th>Content-Type</th>
<th>Content-Length</th>
<th>Time</th>
</tr>
</thead>
<template v-for="trace in traces">
<tr class="is-selectable"
:class="{ 'trace--is-detailed' : showDetails[trace.key] }"
@click="showDetails[trace.key] ? $delete(showDetails, trace.key) : $set(showDetails, trace.key, true)"
:key="trace.key">
<td v-text="trace.timestamp.format('L HH:mm:ss.SSS')"/>
<td v-text="trace.request.method"/>
<td v-text="trace.request.uri"/>
<td>
<span v-text="trace.response.status" class="tag"
:class="{ 'is-success' : trace.isSuccess(), 'is-warning' : trace.isClientError(), 'is-danger' : trace.isServerError() }"/>
</td>
<td v-text="trace.contentType"/>
<td v-text="trace.contentLength ? prettyBytes(trace.contentLength) : ''"/>
<td v-text="trace.timeTaken !== null && typeof trace.timeTaken !== 'undefined' ? `${trace.timeTaken} ms` : ''"/>
</tr>
<tr class="trace__detail" :key="`${trace.key}-detail`" v-if="showDetails[trace.key]">
<td colspan="7">
<pre v-text="toJson(trace)"/>
</td>
</tr>
</template>
<tr v-if="traces.length === 0">
<td class="is-muted" colspan="7">No traces found.</td>
</tr>
</table>
</template>
<script>
import prettyBytes from 'pretty-bytes';
export default {
props: {
traces: {
type: Array,
default: () => []
}
},
data: () => ({
showDetails: {}
}),
methods: {
prettyBytes,
toJson(obj) {
return JSON.stringify(obj, null, 4);
}
}
}
</script>
<style lang="scss">
@import "~@/assets/css/utilities";
.trace--is-detailed td {
border: none !important;
}
.trace__detail td {
overflow-x: auto;
max-width: 1024px;
}
</style>