-
-
CloudFlow Infrastructure Status Page
-
This demo shows a comprehensive status page for a cloud infrastructure provider with real-time monitoring.
-
{
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
const pageTitle = wrapperElement.querySelector('upl-statuspage-pagetitle') as any;
const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any;
+ const statsGrid = wrapperElement.querySelector('upl-statuspage-statsgrid') as any;
const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any;
const statusDetails = wrapperElement.querySelector('upl-statuspage-statusdetails') as any;
const statusMonth = wrapperElement.querySelector('upl-statuspage-statusmonth') as any;
@@ -578,6 +557,20 @@ export const statuspageDemo = () => html`
incidents.currentIncidents = currentIncidents;
incidents.pastIncidents = pastIncidents;
+ // Configure Stats Grid
+ const operationalCount = services.filter(s => s.currentStatus === 'operational').length;
+ const totalIncidents = currentIncidents.length + 3; // Current + recent past
+ const avgResponseTime = services.reduce((sum, s) => sum + (s.responseTime || 0), 0) / services.length;
+ const avgUptime = services.reduce((sum, s) => sum + (s.uptime30d || 0), 0) / services.length;
+
+ statsGrid.currentStatus = 'degraded';
+ statsGrid.uptime = avgUptime;
+ statsGrid.avgResponseTime = Math.round(avgResponseTime);
+ statsGrid.totalIncidents = totalIncidents;
+ statsGrid.affectedServices = services.filter(s => s.currentStatus !== 'operational').length;
+ statsGrid.totalServices = services.length;
+ statsGrid.timePeriod = '30 days';
+
// Configure Footer
footer.companyName = 'CloudFlow Infrastructure';
footer.legalUrl = 'https://cloudflow.example.com/legal';
@@ -644,6 +637,7 @@ export const statuspageDemo = () => html`
+
diff --git a/ts_web/pages/statuspage-maintenance.ts b/ts_web/pages/statuspage-maintenance.ts
index 72bb5b6..c4e62ca 100644
--- a/ts_web/pages/statuspage-maintenance.ts
+++ b/ts_web/pages/statuspage-maintenance.ts
@@ -7,37 +7,15 @@ export const statuspageMaintenance = () => html`
min-height: 100vh;
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
}
-
- .demo-info {
- padding: 20px;
- background: #2196F3;
- color: white;
- text-align: center;
- font-family: 'Geist Sans', Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
- position: relative;
- z-index: 1;
- }
- .demo-info h3 {
- margin: 0 0 10px 0;
- font-weight: 600;
- }
- .demo-info p {
- margin: 0;
- opacity: 0.9;
- font-size: 14px;
- }
-
-
Scheduled Maintenance
-
This demo shows a status page during a scheduled maintenance window with some services offline.
-
{
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any;
+ const statsGrid = wrapperElement.querySelector('upl-statuspage-statsgrid') as any;
const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any;
const statusDetails = wrapperElement.querySelector('upl-statuspage-statusdetails') as any;
const statusMonth = wrapperElement.querySelector('upl-statuspage-statusmonth') as any;
@@ -252,6 +230,19 @@ export const statuspageMaintenance = () => html`
assetsSelector.services = services;
+ // Configure Stats Grid - Maintenance mode metrics
+ const operationalCount = services.filter(s => s.currentStatus === 'operational').length;
+ const avgResponseTime = services.reduce((sum, s) => sum + (s.responseTime || 0), 0) / services.length;
+ const avgUptime = services.reduce((sum, s) => sum + (s.uptime30d || 0), 0) / services.length;
+
+ statsGrid.currentStatus = 'maintenance';
+ statsGrid.uptime = avgUptime;
+ statsGrid.avgResponseTime = Math.round(avgResponseTime);
+ statsGrid.totalIncidents = 1; // Just the maintenance
+ statsGrid.affectedServices = services.filter(s => s.currentStatus === 'maintenance').length;
+ statsGrid.totalServices = services.length;
+ statsGrid.timePeriod = '30 days';
+
// Configure Status Details - Showing maintenance period
const generateStatusDetails = (): IStatusHistoryPoint[] => {
const details: IStatusHistoryPoint[] = [];
@@ -563,6 +554,7 @@ export const statuspageMaintenance = () => html`
>
+
diff --git a/ts_web/pages/statuspage-outage.ts b/ts_web/pages/statuspage-outage.ts
index 0e95279..fac1b5c 100644
--- a/ts_web/pages/statuspage-outage.ts
+++ b/ts_web/pages/statuspage-outage.ts
@@ -7,37 +7,15 @@ export const statuspageOutage = () => html`
min-height: 100vh;
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
}
-
- .demo-info {
- padding: 20px;
- background: #F44336;
- color: white;
- text-align: center;
- font-family: 'Geist Sans', Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
- position: relative;
- z-index: 1;
- }
- .demo-info h3 {
- margin: 0 0 10px 0;
- font-weight: 600;
- }
- .demo-info p {
- margin: 0;
- opacity: 0.9;
- font-size: 14px;
- }
-
-
Major Outage Scenario
-
This demo shows a critical situation with multiple services experiencing major outages.
-
{
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any;
+ const statsGrid = wrapperElement.querySelector('upl-statuspage-statsgrid') as any;
const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any;
const statusDetails = wrapperElement.querySelector('upl-statuspage-statusdetails') as any;
const statusMonth = wrapperElement.querySelector('upl-statuspage-statusmonth') as any;
@@ -265,6 +243,19 @@ export const statuspageOutage = () => html`
assetsSelector.services = services;
+ // Configure Stats Grid - Major outage metrics
+ const operationalCount = services.filter(s => s.currentStatus === 'operational').length;
+ const avgResponseTime = services.reduce((sum, s) => sum + (s.responseTime || 0), 0) / services.length;
+ const avgUptime = services.reduce((sum, s) => sum + (s.uptime30d || 0), 0) / services.length;
+
+ statsGrid.currentStatus = 'major_outage';
+ statsGrid.uptime = avgUptime;
+ statsGrid.avgResponseTime = Math.round(avgResponseTime);
+ statsGrid.totalIncidents = 15; // High number of incidents
+ statsGrid.affectedServices = services.filter(s => s.currentStatus !== 'operational').length;
+ statsGrid.totalServices = services.length;
+ statsGrid.timePeriod = '30 days';
+
// Configure Status Details - Showing the outage timeline
const generateStatusDetails = (): IStatusHistoryPoint[] => {
const details: IStatusHistoryPoint[] = [];
@@ -561,6 +552,7 @@ export const statuspageOutage = () => html`
>
+
diff --git a/ts_web/styles/shared.styles.ts b/ts_web/styles/shared.styles.ts
index 0cfefad..1e64d11 100644
--- a/ts_web/styles/shared.styles.ts
+++ b/ts_web/styles/shared.styles.ts
@@ -27,13 +27,13 @@ export const colors = {
muted: cssManager.bdTheme('#9ca3af', '#71717a')
},
- // Status colors
+ // Status colors - using bright colors for better visibility in both themes
status: {
- operational: cssManager.bdTheme('#047857', '#10b981'),
- degraded: cssManager.bdTheme('#b45309', '#fbbf24'),
- partial: cssManager.bdTheme('#b91c1c', '#f87171'),
- major: cssManager.bdTheme('#7f1d1d', '#ef4444'),
- maintenance: cssManager.bdTheme('#1e40af', '#60a5fa')
+ operational: cssManager.bdTheme('#22c55e', '#22c55e'),
+ degraded: cssManager.bdTheme('#fbbf24', '#fbbf24'),
+ partial: cssManager.bdTheme('#f87171', '#f87171'),
+ major: cssManager.bdTheme('#ef4444', '#ef4444'),
+ maintenance: cssManager.bdTheme('#60a5fa', '#60a5fa')
}
};