174 lines
4.5 KiB
TypeScript
174 lines
4.5 KiB
TypeScript
|
|
import { html } from '@design.estate/dees-element';
|
||
|
|
import { adminState } from '../../services/admin-state.js';
|
||
|
|
import type { IServiceStatus, IIncidentDetails, IStatusPageConfig } from '../../interfaces/index.js';
|
||
|
|
import './upladmin-app.js';
|
||
|
|
|
||
|
|
// Initialize demo data
|
||
|
|
const initDemoData = () => {
|
||
|
|
const now = Date.now();
|
||
|
|
|
||
|
|
// Demo monitors
|
||
|
|
const monitors: IServiceStatus[] = [
|
||
|
|
{
|
||
|
|
id: 'api-server',
|
||
|
|
name: 'api-server',
|
||
|
|
displayName: 'API Server',
|
||
|
|
description: 'Main REST API backend',
|
||
|
|
category: 'Core Services',
|
||
|
|
currentStatus: 'operational',
|
||
|
|
lastChecked: now,
|
||
|
|
uptime30d: 99.98,
|
||
|
|
uptime90d: 99.95,
|
||
|
|
responseTime: 45,
|
||
|
|
dependencies: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'web-app',
|
||
|
|
name: 'web-app',
|
||
|
|
displayName: 'Web Application',
|
||
|
|
description: 'Frontend web application',
|
||
|
|
category: 'Core Services',
|
||
|
|
currentStatus: 'operational',
|
||
|
|
lastChecked: now,
|
||
|
|
uptime30d: 99.95,
|
||
|
|
uptime90d: 99.90,
|
||
|
|
responseTime: 120,
|
||
|
|
dependencies: ['api-server'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'database',
|
||
|
|
name: 'database',
|
||
|
|
displayName: 'Database',
|
||
|
|
description: 'Primary PostgreSQL database',
|
||
|
|
category: 'Infrastructure',
|
||
|
|
currentStatus: 'operational',
|
||
|
|
lastChecked: now,
|
||
|
|
uptime30d: 99.99,
|
||
|
|
uptime90d: 99.98,
|
||
|
|
responseTime: 5,
|
||
|
|
dependencies: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'cdn',
|
||
|
|
name: 'cdn',
|
||
|
|
displayName: 'CDN',
|
||
|
|
description: 'Content delivery network',
|
||
|
|
category: 'Infrastructure',
|
||
|
|
currentStatus: 'degraded',
|
||
|
|
lastChecked: now,
|
||
|
|
uptime30d: 99.85,
|
||
|
|
uptime90d: 99.80,
|
||
|
|
responseTime: 25,
|
||
|
|
dependencies: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'email-service',
|
||
|
|
name: 'email-service',
|
||
|
|
displayName: 'Email Service',
|
||
|
|
description: 'Transactional email delivery',
|
||
|
|
category: 'External Services',
|
||
|
|
currentStatus: 'operational',
|
||
|
|
lastChecked: now,
|
||
|
|
uptime30d: 99.90,
|
||
|
|
uptime90d: 99.85,
|
||
|
|
responseTime: 200,
|
||
|
|
dependencies: [],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// Demo incidents
|
||
|
|
const incidents: IIncidentDetails[] = [
|
||
|
|
{
|
||
|
|
id: 'incident-1',
|
||
|
|
title: 'CDN Performance Degradation',
|
||
|
|
impact: 'We are experiencing slower than normal response times from our CDN provider.',
|
||
|
|
severity: 'minor',
|
||
|
|
status: 'monitoring',
|
||
|
|
affectedServices: ['cdn'],
|
||
|
|
startTime: now - 2 * 60 * 60 * 1000, // 2 hours ago
|
||
|
|
updates: [
|
||
|
|
{
|
||
|
|
id: 'update-1-1',
|
||
|
|
status: 'investigating',
|
||
|
|
message: 'We are investigating reports of slow load times.',
|
||
|
|
timestamp: now - 2 * 60 * 60 * 1000,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'update-1-2',
|
||
|
|
status: 'identified',
|
||
|
|
message: 'The issue has been identified as a CDN edge node problem.',
|
||
|
|
timestamp: now - 1 * 60 * 60 * 1000,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'update-1-3',
|
||
|
|
status: 'monitoring',
|
||
|
|
message: 'A fix has been deployed. We are monitoring the situation.',
|
||
|
|
timestamp: now - 30 * 60 * 1000,
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'incident-2',
|
||
|
|
title: 'Scheduled Database Maintenance',
|
||
|
|
impact: 'Routine database maintenance window.',
|
||
|
|
severity: 'maintenance',
|
||
|
|
status: 'resolved',
|
||
|
|
affectedServices: ['database'],
|
||
|
|
startTime: now - 24 * 60 * 60 * 1000,
|
||
|
|
endTime: now - 23 * 60 * 60 * 1000,
|
||
|
|
updates: [
|
||
|
|
{
|
||
|
|
id: 'update-2-1',
|
||
|
|
status: 'investigating',
|
||
|
|
message: 'Maintenance has begun.',
|
||
|
|
timestamp: now - 24 * 60 * 60 * 1000,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'update-2-2',
|
||
|
|
status: 'resolved',
|
||
|
|
message: 'Maintenance completed successfully.',
|
||
|
|
timestamp: now - 23 * 60 * 60 * 1000,
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// Demo config
|
||
|
|
const config: IStatusPageConfig = {
|
||
|
|
theme: 'dark',
|
||
|
|
companyName: 'uptime.link',
|
||
|
|
companyLogo: '',
|
||
|
|
supportEmail: 'support@uptime.link',
|
||
|
|
showHistoricalDays: 90,
|
||
|
|
timeZone: 'UTC',
|
||
|
|
};
|
||
|
|
|
||
|
|
// Set demo data in state
|
||
|
|
adminState.monitors = monitors;
|
||
|
|
adminState.incidents = incidents;
|
||
|
|
adminState.config = config;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const demoFunc = () => {
|
||
|
|
// Initialize demo data
|
||
|
|
initDemoData();
|
||
|
|
|
||
|
|
return html`
|
||
|
|
<dees-demowrapper>
|
||
|
|
<style>
|
||
|
|
.demo-container {
|
||
|
|
position: absolute;
|
||
|
|
top: 0;
|
||
|
|
left: 0;
|
||
|
|
width: 100%;
|
||
|
|
height: 100%;
|
||
|
|
overflow: hidden;
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
<div class="demo-container">
|
||
|
|
<upladmin-app></upladmin-app>
|
||
|
|
</div>
|
||
|
|
</dees-demowrapper>
|
||
|
|
`;
|
||
|
|
};
|