Skip to content

Commit 1f65b75

Browse files
authored
Merge pull request #2274 from Particular/john/audit_messages
Refactor message tabs views into separate components
2 parents 3803685 + 6a1aa23 commit 1f65b75

File tree

10 files changed

+72
-35
lines changed

10 files changed

+72
-35
lines changed

src/Frontend/src/App.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import PageFooter from "./components/PageFooter.vue";
55
import PageHeader from "./components/PageHeader.vue";
66
import "bootstrap";
77
import { useServiceControlUrls } from "@/composables/serviceServiceControlUrls";
8-
import "highlight.js/styles/github-dark.css";
98
import { useServiceControl } from "@/composables/serviceServiceControl";
109
import LicenseNotifications from "@/components/LicenseNotifications.vue";
1110
import BackendChecksNotifications from "@/components/BackendChecksNotifications.vue";

src/Frontend/src/components/BackendChecksNotifications.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { computed, watch } from "vue";
33
import { useRouter } from "vue-router";
44
import "bootstrap";
55
import { monitoringUrl, serviceControlUrl, useIsMonitoringDisabled } from "@/composables/serviceServiceControlUrls";
6-
import "highlight.js/styles/github-dark.css";
76
import { monitoringConnectionState, connectionState, environment } from "@/composables/serviceServiceControl";
87
import routeLinks from "@/router/routeLinks";
98
import { useShowToast } from "@/composables/toast";
@@ -53,5 +52,5 @@ watch(
5352
);
5453
</script>
5554
<template>
56-
<div></div>
55+
<template></template>
5756
</template>

src/Frontend/src/components/LicenseNotifications.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,5 @@ onMounted(async () => {
6161
});
6262
</script>
6363
<template>
64-
<div></div>
64+
<template></template>
6565
</template>

src/Frontend/src/components/failedmessages/EditRetryDialog.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,8 @@ onMounted(() => {
218218
<div class="row msg-editor-tabs">
219219
<div class="col-sm-12 no-side-padding">
220220
<div role="tablist" class="tabs msg-tabs">
221-
<h5 role="tab" :class="{ active: panel === 1 }" class="nav-item" @click="togglePanel(1)"><a href="javascript:void(0)">Headers</a></h5>
222-
<h5 role="tab" :class="{ active: panel === 2 }" class="nav-item" @click="togglePanel(2)"><a href="javascript:void(0)">Message body</a></h5>
221+
<h5 role="tab" :class="{ active: panel === 1 }" class="nav-item" @click.prevent="togglePanel(1)"><a href="#">Headers</a></h5>
222+
<h5 role="tab" :class="{ active: panel === 2 }" class="nav-item" @click.prevent="togglePanel(2)"><a href="#">Message body</a></h5>
223223
</div>
224224
</div>
225225
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script setup lang="ts">
2+
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
3+
4+
const props = defineProps<{
5+
message: ExtendedFailedMessage;
6+
}>();
7+
</script>
8+
9+
<template>
10+
<div v-if="props.message.messageBodyNotFound" class="alert alert-info">Could not find message body. This could be because the message URL is invalid or the corresponding message was processed and is no longer tracked by ServiceControl.</div>
11+
<div v-else-if="props.message.bodyUnavailable" class="alert alert-info">Message body unavailable.</div>
12+
<pre v-else>{{ props.message.messageBody }}</pre>
13+
</template>
14+
15+
<style scoped></style>

src/Frontend/src/components/messages/FlowDiagram.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import routeLinks from "@/router/routeLinks";
77
import Message from "@/resources/Message";
88
import { NServiceBusHeaders } from "@/resources/Header";
99
import { useRoute } from "vue-router";
10+
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
1011
1112
const props = defineProps<{
12-
conversationId?: string;
13-
messageId: string;
13+
message: ExtendedFailedMessage;
1414
}>();
1515
1616
enum MessageType {
@@ -161,9 +161,9 @@ const elements = ref<(Node | DefaultEdge)[]>([]);
161161
const { onPaneReady, fitView } = useVueFlow();
162162
163163
onMounted(async () => {
164-
if (!props.conversationId) return;
164+
if (!props.message.conversationId) return;
165165
166-
const messages = await getConversation(props.conversationId);
166+
const messages = await getConversation(props.message.conversationId);
167167
const mappedMessages = messages.map(mapMessage);
168168
169169
const assignDescendantLevelsAndWidth = (message: MappedMessage, level = 0) => {
@@ -203,7 +203,7 @@ function typeIcon(type: MessageType) {
203203
<div id="tree-container">
204204
<VueFlow v-model="elements" :min-zoom="0.1">
205205
<template #node-message="nodeProps">
206-
<div class="node" :class="[nodeProps.data.isError && 'error', nodeProps.data.id === props.messageId && 'current-message']">
206+
<div class="node" :class="[nodeProps.data.isError && 'error', nodeProps.data.id === props.message.id && 'current-message']">
207207
<div class="node-text wordwrap">
208208
<i v-if="nodeProps.data.isError" class="fa pa-flow-failed" />
209209
<i class="fa" :class="typeIcon(nodeProps.data.type)" :title="nodeProps.data.type" />
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script setup lang="ts">
2+
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
3+
4+
const props = defineProps<{
5+
message: ExtendedFailedMessage;
6+
}>();
7+
</script>
8+
9+
<template>
10+
<table class="table" v-if="!props.message.headersNotFound">
11+
<tbody>
12+
<tr class="interactiveList" v-for="(header, index) in props.message.headers" :key="index">
13+
<td nowrap="nowrap">{{ header.key }}</td>
14+
<td>
15+
<pre>{{ header.value }}</pre>
16+
</td>
17+
</tr>
18+
</tbody>
19+
</table>
20+
<div v-if="props.message.headersNotFound" class="alert alert-info">Could not find message headers. This could be because the message URL is invalid or the corresponding message was processed and is no longer tracked by ServiceControl.</div>
21+
</template>
22+
23+
<style scoped></style>

src/Frontend/src/components/messages/MessageView.vue

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import { NServiceBusHeaders } from "@/resources/Header";
2020
import { useConfiguration } from "@/composables/configuration";
2121
import { useIsMassTransitConnected } from "@/composables/useIsMassTransitConnected";
2222
import { parse, stringify } from "lossless-json";
23+
import BodyView from "@/components/messages/BodyView.vue";
24+
import HeadersView from "@/components/messages/HeadersView.vue";
25+
import StackTraceView from "@/components/messages/StacktraceView.vue";
2326
2427
let refreshInterval: number | undefined;
2528
let pollingFaster = false;
@@ -438,31 +441,15 @@ onUnmounted(() => {
438441
<div class="row">
439442
<div class="col-sm-12 no-side-padding">
440443
<div class="nav tabs msg-tabs">
441-
<h5 :class="{ active: panel === 1 }" class="nav-item" @click="togglePanel(1)"><a href="javascript:void(0)">Stacktrace</a></h5>
442-
<h5 :class="{ active: panel === 2 }" class="nav-item" @click="togglePanel(2)"><a href="javascript:void(0)">Headers</a></h5>
443-
<h5 :class="{ active: panel === 3 }" class="nav-item" @click="togglePanel(3)"><a href="javascript:void(0)">Message body</a></h5>
444-
<h5 v-if="!isMassTransitConnected" :class="{ active: panel === 4 }" class="nav-item" @click="togglePanel(4)"><a href="javascript:void(0)">Flow Diagram</a></h5>
444+
<h5 :class="{ active: panel === 1 }" class="nav-item" @click.prevent="togglePanel(1)"><a href="#">Stacktrace</a></h5>
445+
<h5 :class="{ active: panel === 2 }" class="nav-item" @click.prevent="togglePanel(2)"><a href="#">Message body</a></h5>
446+
<h5 :class="{ active: panel === 3 }" class="nav-item" @click.prevent="togglePanel(3)"><a href="#">Headers</a></h5>
447+
<h5 v-if="!isMassTransitConnected" :class="{ active: panel === 4 }" class="nav-item" @click.prevent="togglePanel(4)"><a href="#">Flow Diagram</a></h5>
445448
</div>
446-
<pre v-if="panel === 1">{{ failedMessage.exception?.stack_trace }}</pre>
447-
<table class="table" v-if="panel === 2 && !failedMessage.headersNotFound">
448-
<tbody>
449-
<tr class="interactiveList" v-for="(header, index) in failedMessage.headers" :key="index">
450-
<td nowrap="nowrap">{{ header.key }}</td>
451-
<td>
452-
<pre>{{ header.value }}</pre>
453-
</td>
454-
</tr>
455-
</tbody>
456-
</table>
457-
<div v-if="panel === 2 && failedMessage.headersNotFound" class="alert alert-info">
458-
Could not find message headers. This could be because the message URL is invalid or the corresponding message was processed and is no longer tracked by ServiceControl.
459-
</div>
460-
<pre v-if="panel === 3 && !failedMessage.messageBodyNotFound && !failedMessage.bodyUnavailable">{{ failedMessage.messageBody }}</pre>
461-
<div v-if="panel === 3 && failedMessage.messageBodyNotFound" class="alert alert-info">
462-
Could not find message body. This could be because the message URL is invalid or the corresponding message was processed and is no longer tracked by ServiceControl.
463-
</div>
464-
<div v-if="panel === 3 && failedMessage.bodyUnavailable" class="alert alert-info">Message body unavailable.</div>
465-
<FlowDiagram v-if="panel === 4" :conversation-id="failedMessage.conversationId" :message-id="id"></FlowDiagram>
449+
<StackTraceView v-if="panel === 1" :message="failedMessage" />
450+
<BodyView v-if="panel === 2" :message="failedMessage" />
451+
<HeadersView v-if="panel === 3" :message="failedMessage" />
452+
<FlowDiagram v-if="panel === 4" :message="failedMessage" />
466453
</div>
467454
</div>
468455

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script setup lang="ts">
2+
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
3+
import VCodeBlock from "@wdns/vue-code-block";
4+
5+
const props = defineProps<{
6+
message: ExtendedFailedMessage;
7+
}>();
8+
</script>
9+
10+
<template>
11+
<VCodeBlock :code="props.message.exception.stack_trace" lang="csharp"></VCodeBlock>
12+
</template>

src/Frontend/src/mount.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import VueTippy from "vue-tippy";
66
import { createPinia } from "pinia";
77
import SimpleTypeahead from "vue3-simple-typeahead";
88
import { createVCodeBlock } from "@wdns/vue-code-block";
9+
import "highlight.js/styles/github-dark.css";
910

1011
const toastOptions: PluginOptions = {
1112
position: POSITION.BOTTOM_RIGHT,
@@ -25,6 +26,7 @@ export function mount({ router }: { router: Router }) {
2526

2627
const VCodeBlock = createVCodeBlock({
2728
theme: "github-dark",
29+
cssPath: "highlight.js/styles/github-dark.css",
2830
highlightjs: true,
2931
});
3032

0 commit comments

Comments
 (0)