Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
340a986
Replace moment with dayjs
johnsimons Nov 18, 2025
8a9a3b2
Initial checkin for the Platform Capabilities section on the dashboard
warwickschroeder Nov 20, 2025
c45fb38
Remove unused styles
warwickschroeder Nov 20, 2025
0a3f5a4
Change help URL
warwickschroeder Nov 20, 2025
9b4a696
Add a banner to the All Messages view if no successful messages
warwickschroeder Nov 20, 2025
19cde03
Update naming for view data button
warwickschroeder Nov 20, 2025
53f7900
Update icon on All Messages page
warwickschroeder Nov 20, 2025
d5ae6cd
Remove concept of Partially Available
warwickschroeder Nov 20, 2025
fd94271
Update message constants
warwickschroeder Nov 20, 2025
74b3e27
Remove unused styles
warwickschroeder Nov 20, 2025
f6792ba
WIP
warwickschroeder Nov 21, 2025
b6fabc5
WIP - Clean and change the way config is grabbed
warwickschroeder Nov 24, 2025
14f115c
Update capability cards WIP
warwickschroeder Nov 25, 2025
f22e4c4
WIP - add promo modal pages
warwickschroeder Nov 25, 2025
ae0fe39
WIP - audit wizard promo
warwickschroeder Nov 25, 2025
a31b243
Update auditing and monitoring promo pages
warwickschroeder Nov 26, 2025
031d66e
Finish initial audit and monitoring promo work
warwickschroeder Nov 26, 2025
dfd8bc5
Add error instance capability
warwickschroeder Nov 26, 2025
df57dfd
Clean styling
warwickschroeder Nov 26, 2025
a25ec6a
Remove additional monitoring instance config
warwickschroeder Nov 26, 2025
2c70a6a
Add new mocked endpoints for new and updated stores
warwickschroeder Nov 26, 2025
c7d4692
Move styles into component files.
warwickschroeder Nov 28, 2025
cf634b9
Fix issues caused by master branch refactoring
warwickschroeder Dec 2, 2025
90f810d
Revert to master for specific files
warwickschroeder Dec 2, 2025
ea148cf
Support remote servicecontrol instances. Now will cache remotes. Add …
warwickschroeder Dec 4, 2025
40880a7
Add tests for capability cards
warwickschroeder Dec 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added src/Frontend/public/img/all-messages-filter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/all-messages-refresh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/all-messages-sort.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/all-messages.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/failed-message-page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/flow-diagram-nodes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/flow-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/message-details-body.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/message-metadata.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/Frontend/public/img/sequence-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
96 changes: 95 additions & 1 deletion src/Frontend/src/components/audit/AuditList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@ import { useRoute, useRouter } from "vue-router";
import ResultsCount from "@/components/ResultsCount.vue";
import FiltersPanel from "@/components/audit/FiltersPanel.vue";
import AuditListItem from "@/components/audit/AuditListItem.vue";
import { onBeforeMount, ref, watch } from "vue";
import { computed, onBeforeMount, ref, watch } from "vue";
import RefreshConfig from "../RefreshConfig.vue";
import LoadingSpinner from "@/components/LoadingSpinner.vue";
import useFetchWithAutoRefresh from "@/composables/autoRefresh";
import FAIcon from "@/components/FAIcon.vue";
import { faInfoCircle } from "@fortawesome/free-solid-svg-icons";
import WizardDialog from "@/components/platformcapabilities/WizardDialog.vue";
import { getAuditingWizardPages } from "@/components/platformcapabilities/wizards/AuditingWizardPages";
import { useAuditingCapability } from "@/components/platformcapabilities/capabilities/AuditingCapability";
import { CapabilityStatus } from "@/components/platformcapabilities/constants";

const store = useAuditStore();
const { messages, totalCount, sortBy, messageFilterString, selectedEndpointName, itemsPerPage, dateRange } = storeToRefs(store);
Expand All @@ -17,6 +23,9 @@ const router = useRouter();
const autoRefreshValue = ref<number | null>(null);
const { refreshNow, isRefreshing, updateInterval, isActive, start, stop } = useFetchWithAutoRefresh("audit-list", store.refresh, 0);
const firstLoad = ref(true);
const showWizard = ref(false);
const { status: auditStatus } = useAuditingCapability();
const wizardPages = computed(() => getAuditingWizardPages(auditStatus.value));

onBeforeMount(() => {
setQuery();
Expand Down Expand Up @@ -100,7 +109,34 @@ watch(autoRefreshValue, (newValue) => {
<div class="row">
<ResultsCount :displayed="messages.length" :total="totalCount" />
</div>
<div v-if="auditStatus !== CapabilityStatus.Available" class="no-audit-banner">
<div class="banner-content">
<FAIcon :icon="faInfoCircle" class="banner-icon" />
<div class="banner-text">
<template v-if="auditStatus === CapabilityStatus.InstanceNotConfigured">
<strong>No ServiceControl Audit instance configured.</strong>
<p>A ServiceControl Audit instance is required to view processed messages. Click 'Get Started' to learn how to set one up.</p>
</template>
<template v-else-if="auditStatus === CapabilityStatus.EndpointsNotConfigured">
<strong>No successful audit messages found.</strong>
<p>Auditing may not be enabled on your endpoints. Click 'Get Started' to find out how to enable auditing.</p>
</template>
<template v-else-if="auditStatus === CapabilityStatus.Unavailable">
<strong>All ServiceControl Audit instances are not responding.</strong>
<p>The configured audit instances appears to be offline or unreachable. Check that the service is running and accessible.</p>
</template>
<template v-else-if="auditStatus === CapabilityStatus.PartiallyUnavailable">
<strong>Some ServiceControl Audit instances are not responding.</strong>
<p>One or more audit instances appear to be offline. Some audit data may be unavailable until all instances are restored.</p>
</template>
</div>
<template v-if="auditStatus !== CapabilityStatus.Unavailable && auditStatus !== CapabilityStatus.PartiallyUnavailable">
<button class="banner-link" @click="showWizard = true">Get Started</button>
</template>
</div>
</div>
</div>
<WizardDialog v-if="showWizard" title="Getting Started with Auditing" :pages="wizardPages" @close="showWizard = false" />
<div class="row results-table">
<LoadingSpinner v-if="firstLoad" />
<template v-for="message in messages" :key="message.id">
Expand Down Expand Up @@ -128,4 +164,62 @@ watch(autoRefreshValue, (newValue) => {
margin-bottom: 5rem;
background-color: #ffffff;
}

.no-audit-banner {
background: linear-gradient(135deg, #f6f9fc 0%, #e9f2f9 100%);
border: 1px solid #c3ddf5;
border-left: 4px solid #007bff;
border-radius: 8px;
padding: 16px;
margin-top: 1rem;
}

.banner-content {
display: flex;
align-items: flex-start;
gap: 16px;
}

.banner-icon {
font-size: 24px;
flex-shrink: 0;
color: #007bff;
}

.banner-text {
flex: 1;
}

.banner-text strong {
display: block;
margin-bottom: 4px;
color: #333;
font-size: 14px;
}

.banner-text p {
margin: 0;
color: #666;
font-size: 13px;
line-height: 1.5;
}

.banner-link {
padding: 8px 16px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
text-decoration: none;
font-size: 14px;
font-weight: 500;
white-space: nowrap;
align-self: center;
transition: background-color 0.2s ease;
cursor: pointer;
}

.banner-link:hover {
background-color: #0056b3;
}
</style>
Loading