@uptime.link/statuspage 1.0.74 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist_bundle/bundle.js +4096 -504
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_web/00_commitinfo_data.js +2 -2
  4. package/dist_ts_web/elements/index.d.ts +3 -0
  5. package/dist_ts_web/elements/index.js +6 -1
  6. package/dist_ts_web/elements/internal/uplinternal-miniheading.d.ts +1 -0
  7. package/dist_ts_web/elements/internal/uplinternal-miniheading.js +78 -28
  8. package/dist_ts_web/elements/upl-statuspage-assetsselector.d.ts +14 -0
  9. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.d.ts +1 -0
  10. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.js +575 -0
  11. package/dist_ts_web/elements/upl-statuspage-assetsselector.js +605 -43
  12. package/dist_ts_web/elements/upl-statuspage-footer.d.ts +46 -2
  13. package/dist_ts_web/elements/upl-statuspage-footer.demo.d.ts +1 -0
  14. package/dist_ts_web/elements/upl-statuspage-footer.demo.js +679 -0
  15. package/dist_ts_web/elements/upl-statuspage-footer.js +792 -61
  16. package/dist_ts_web/elements/upl-statuspage-header.d.ts +5 -1
  17. package/dist_ts_web/elements/upl-statuspage-header.demo.d.ts +1 -0
  18. package/dist_ts_web/elements/upl-statuspage-header.demo.js +220 -0
  19. package/dist_ts_web/elements/upl-statuspage-header.js +313 -86
  20. package/dist_ts_web/elements/upl-statuspage-incidents.d.ts +22 -4
  21. package/dist_ts_web/elements/upl-statuspage-incidents.demo.d.ts +1 -0
  22. package/dist_ts_web/elements/upl-statuspage-incidents.demo.js +1147 -0
  23. package/dist_ts_web/elements/upl-statuspage-incidents.js +750 -74
  24. package/dist_ts_web/elements/upl-statuspage-pagetitle.d.ts +15 -0
  25. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.d.ts +1 -0
  26. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.js +25 -0
  27. package/dist_ts_web/elements/upl-statuspage-pagetitle.js +148 -0
  28. package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +23 -0
  29. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.d.ts +1 -0
  30. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.js +295 -0
  31. package/dist_ts_web/elements/upl-statuspage-statsgrid.js +374 -0
  32. package/dist_ts_web/elements/upl-statuspage-statusbar.d.ts +4 -0
  33. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.d.ts +1 -0
  34. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.js +365 -0
  35. package/dist_ts_web/elements/upl-statuspage-statusbar.js +357 -44
  36. package/dist_ts_web/elements/upl-statuspage-statusdetails.d.ts +14 -0
  37. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.d.ts +1 -0
  38. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.js +706 -0
  39. package/dist_ts_web/elements/upl-statuspage-statusdetails.js +373 -63
  40. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +15 -0
  41. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.d.ts +1 -0
  42. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.js +798 -0
  43. package/dist_ts_web/elements/upl-statuspage-statusmonth.js +474 -100
  44. package/dist_ts_web/interfaces/index.d.ts +84 -0
  45. package/dist_ts_web/interfaces/index.js +4 -0
  46. package/dist_ts_web/pages/index.d.ts +4 -1
  47. package/dist_ts_web/pages/index.js +5 -2
  48. package/dist_ts_web/pages/statuspage-allgreen.d.ts +1 -0
  49. package/dist_ts_web/pages/statuspage-allgreen.js +386 -0
  50. package/dist_ts_web/pages/statuspage-demo.d.ts +1 -0
  51. package/dist_ts_web/pages/statuspage-demo.js +616 -0
  52. package/dist_ts_web/pages/statuspage-maintenance.d.ts +1 -0
  53. package/dist_ts_web/pages/statuspage-maintenance.js +544 -0
  54. package/dist_ts_web/pages/statuspage-outage.d.ts +1 -0
  55. package/dist_ts_web/pages/statuspage-outage.js +543 -0
  56. package/dist_ts_web/styles/shared.styles.d.ts +80 -0
  57. package/dist_ts_web/styles/shared.styles.js +351 -0
  58. package/dist_watch/bundle.js +51691 -32432
  59. package/dist_watch/bundle.js.map +4 -4
  60. package/npmextra.json +9 -3
  61. package/package.json +19 -19
  62. package/readme.hints.md +292 -0
  63. package/readme.md +326 -149
  64. package/readme.plan.md +261 -0
  65. package/ts_web/00_commitinfo_data.ts +1 -1
  66. package/ts_web/elements/index.ts +6 -0
  67. package/ts_web/elements/internal/uplinternal-miniheading.ts +24 -17
  68. package/ts_web/elements/upl-statuspage-assetsselector.demo.ts +607 -0
  69. package/ts_web/elements/upl-statuspage-assetsselector.ts +526 -18
  70. package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
  71. package/ts_web/elements/upl-statuspage-footer.ts +608 -30
  72. package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
  73. package/ts_web/elements/upl-statuspage-header.ts +220 -52
  74. package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
  75. package/ts_web/elements/upl-statuspage-incidents.ts +649 -26
  76. package/ts_web/elements/upl-statuspage-pagetitle.demo.ts +25 -0
  77. package/ts_web/elements/upl-statuspage-pagetitle.ts +89 -0
  78. package/ts_web/elements/upl-statuspage-statsgrid.demo.ts +315 -0
  79. package/ts_web/elements/upl-statuspage-statsgrid.ts +306 -0
  80. package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
  81. package/ts_web/elements/upl-statuspage-statusbar.ts +281 -20
  82. package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
  83. package/ts_web/elements/upl-statuspage-statusdetails.ts +297 -38
  84. package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
  85. package/ts_web/elements/upl-statuspage-statusmonth.ts +397 -76
  86. package/ts_web/interfaces/index.ts +95 -0
  87. package/ts_web/pages/index.ts +4 -1
  88. package/ts_web/pages/statuspage-allgreen.ts +412 -0
  89. package/ts_web/pages/statuspage-demo.ts +653 -0
  90. package/ts_web/pages/statuspage-maintenance.ts +570 -0
  91. package/ts_web/pages/statuspage-outage.ts +568 -0
  92. package/ts_web/styles/shared.styles.ts +367 -0
  93. package/dist_ts_web/pages/page1.d.ts +0 -1
  94. package/dist_ts_web/pages/page1.js +0 -11
  95. package/ts_web/pages/page1.ts +0 -11
@@ -0,0 +1,412 @@
1
+ import { html, cssManager } from "@design.estate/dees-element";
2
+ import type { IServiceStatus, IOverallStatus, IIncidentDetails, IStatusHistoryPoint, IMonthlyUptime } from '../interfaces/index.js';
3
+
4
+ export const statuspageAllgreen = () => html`
5
+ <style>
6
+ .demo-page-wrapper {
7
+ min-height: 100vh;
8
+ background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
9
+ }
10
+ .demo-page-wrapper > dees-demowrapper {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: 24px;
14
+ }
15
+ </style>
16
+
17
+ <div class="demo-page-wrapper">
18
+
19
+ <dees-demowrapper
20
+ .runAfterRender=${async (wrapperElement: any) => {
21
+ const header = wrapperElement.querySelector('upl-statuspage-header') as any;
22
+ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any;
23
+ const statsGrid = wrapperElement.querySelector('upl-statuspage-statsgrid') as any;
24
+ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any;
25
+ const statusDetails = wrapperElement.querySelector('upl-statuspage-statusdetails') as any;
26
+ const statusMonth = wrapperElement.querySelector('upl-statuspage-statusmonth') as any;
27
+ const incidents = wrapperElement.querySelector('upl-statuspage-incidents') as any;
28
+ const footer = wrapperElement.querySelector('upl-statuspage-footer') as any;
29
+
30
+ // Configure Header
31
+ header.pageTitle = 'TechVault';
32
+ header.showReportButton = true;
33
+ header.showSubscribeButton = true;
34
+ header.logoUrl = 'https://via.placeholder.com/150x50/4CAF50/ffffff?text=TV';
35
+
36
+ // Configure Overall Status - All Green
37
+ statusBar.overallStatus = {
38
+ status: 'operational',
39
+ message: 'All Systems Operational',
40
+ lastUpdated: Date.now(),
41
+ affectedServices: 0,
42
+ totalServices: 12
43
+ };
44
+
45
+ // Configure Services - All Operational
46
+ const services: IServiceStatus[] = [
47
+ {
48
+ id: 'web-app',
49
+ name: 'web-app',
50
+ displayName: 'Web Application',
51
+ description: 'Main customer-facing application',
52
+ currentStatus: 'operational',
53
+ lastChecked: Date.now(),
54
+ uptime30d: 99.99,
55
+ uptime90d: 99.98,
56
+ responseTime: 32,
57
+ category: 'Frontend',
58
+ selected: true
59
+ },
60
+ {
61
+ id: 'mobile-app',
62
+ name: 'mobile-app',
63
+ displayName: 'Mobile Applications',
64
+ description: 'iOS and Android apps',
65
+ currentStatus: 'operational',
66
+ lastChecked: Date.now(),
67
+ uptime30d: 100,
68
+ uptime90d: 99.99,
69
+ responseTime: 45,
70
+ category: 'Frontend',
71
+ selected: true
72
+ },
73
+ {
74
+ id: 'api',
75
+ name: 'api',
76
+ displayName: 'API Services',
77
+ description: 'RESTful and GraphQL APIs',
78
+ currentStatus: 'operational',
79
+ lastChecked: Date.now(),
80
+ uptime30d: 99.97,
81
+ uptime90d: 99.96,
82
+ responseTime: 28,
83
+ category: 'Backend',
84
+ selected: true
85
+ },
86
+ {
87
+ id: 'auth',
88
+ name: 'auth',
89
+ displayName: 'Authentication',
90
+ description: 'OAuth and SSO services',
91
+ currentStatus: 'operational',
92
+ lastChecked: Date.now(),
93
+ uptime30d: 100,
94
+ uptime90d: 99.99,
95
+ responseTime: 22,
96
+ category: 'Backend',
97
+ selected: true
98
+ },
99
+ {
100
+ id: 'database',
101
+ name: 'database',
102
+ displayName: 'Database Cluster',
103
+ description: 'Primary data storage',
104
+ currentStatus: 'operational',
105
+ lastChecked: Date.now(),
106
+ uptime30d: 100,
107
+ uptime90d: 99.99,
108
+ responseTime: 15,
109
+ category: 'Infrastructure',
110
+ selected: true
111
+ },
112
+ {
113
+ id: 'cache',
114
+ name: 'cache',
115
+ displayName: 'Cache Layer',
116
+ description: 'Redis cache clusters',
117
+ currentStatus: 'operational',
118
+ lastChecked: Date.now(),
119
+ uptime30d: 100,
120
+ uptime90d: 100,
121
+ responseTime: 3,
122
+ category: 'Infrastructure',
123
+ selected: false
124
+ },
125
+ {
126
+ id: 'search',
127
+ name: 'search',
128
+ displayName: 'Search Service',
129
+ description: 'Elasticsearch clusters',
130
+ currentStatus: 'operational',
131
+ lastChecked: Date.now(),
132
+ uptime30d: 99.98,
133
+ uptime90d: 99.97,
134
+ responseTime: 42,
135
+ category: 'Infrastructure',
136
+ selected: true
137
+ },
138
+ {
139
+ id: 'cdn',
140
+ name: 'cdn',
141
+ displayName: 'CDN',
142
+ description: 'Global content delivery',
143
+ currentStatus: 'operational',
144
+ lastChecked: Date.now(),
145
+ uptime30d: 100,
146
+ uptime90d: 100,
147
+ responseTime: 8,
148
+ category: 'Network',
149
+ selected: true
150
+ },
151
+ {
152
+ id: 'email',
153
+ name: 'email',
154
+ displayName: 'Email Service',
155
+ description: 'Transactional emails',
156
+ currentStatus: 'operational',
157
+ lastChecked: Date.now(),
158
+ uptime30d: 99.95,
159
+ uptime90d: 99.94,
160
+ responseTime: 125,
161
+ category: 'Communication',
162
+ selected: false
163
+ },
164
+ {
165
+ id: 'sms',
166
+ name: 'sms',
167
+ displayName: 'SMS Service',
168
+ description: 'SMS notifications',
169
+ currentStatus: 'operational',
170
+ lastChecked: Date.now(),
171
+ uptime30d: 99.92,
172
+ uptime90d: 99.90,
173
+ responseTime: 180,
174
+ category: 'Communication',
175
+ selected: false
176
+ },
177
+ {
178
+ id: 'payments',
179
+ name: 'payments',
180
+ displayName: 'Payment Processing',
181
+ description: 'Payment gateway integration',
182
+ currentStatus: 'operational',
183
+ lastChecked: Date.now(),
184
+ uptime30d: 100,
185
+ uptime90d: 99.99,
186
+ responseTime: 95,
187
+ category: 'Services',
188
+ selected: true
189
+ },
190
+ {
191
+ id: 'analytics',
192
+ name: 'analytics',
193
+ displayName: 'Analytics Engine',
194
+ description: 'Real-time analytics',
195
+ currentStatus: 'operational',
196
+ lastChecked: Date.now(),
197
+ uptime30d: 99.96,
198
+ uptime90d: 99.95,
199
+ responseTime: 55,
200
+ category: 'Services',
201
+ selected: true
202
+ }
203
+ ];
204
+
205
+ assetsSelector.services = services;
206
+
207
+ // Configure Stats Grid - All green metrics
208
+ statsGrid.currentStatus = 'operational';
209
+ statsGrid.uptime = 99.98;
210
+ statsGrid.avgResponseTime = Math.round(services.reduce((sum, s) => sum + (s.responseTime || 0), 0) / services.length);
211
+ statsGrid.totalIncidents = 0;
212
+ statsGrid.affectedServices = 0;
213
+ statsGrid.totalServices = services.length;
214
+ statsGrid.timePeriod = '30 days';
215
+
216
+ // Configure Status Details - All operational for 48 hours
217
+ const generateStatusDetails = (): IStatusHistoryPoint[] => {
218
+ const details: IStatusHistoryPoint[] = [];
219
+ const now = new Date();
220
+
221
+ for (let i = 47; i >= 0; i--) {
222
+ const date = new Date(now);
223
+ date.setMinutes(0, 0, 0);
224
+ date.setHours(date.getHours() - i);
225
+
226
+ details.push({
227
+ timestamp: date.getTime(),
228
+ status: 'operational',
229
+ responseTime: 20 + Math.random() * 10 // Very consistent response times
230
+ });
231
+ }
232
+
233
+ return details;
234
+ };
235
+
236
+ statusDetails.dataPoints = generateStatusDetails();
237
+ statusDetails.serviceId = 'api';
238
+ statusDetails.serviceName = 'API Services';
239
+
240
+ // Configure Monthly Status - Near perfect uptime
241
+ const generateMonthlyData = (): IMonthlyUptime[] => {
242
+ const months: IMonthlyUptime[] = [];
243
+ const now = new Date();
244
+
245
+ for (let m = 4; m >= 0; m--) {
246
+ const monthDate = new Date(now.getFullYear(), now.getMonth() - m, 1);
247
+ const daysInMonth = new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 0).getDate();
248
+ const monthKey = monthDate.toISOString().slice(0, 7);
249
+
250
+ const days = [];
251
+ let totalUptime = 0;
252
+ let incidents = 0;
253
+
254
+ for (let d = 1; d <= daysInMonth; d++) {
255
+ const dayDate = new Date(monthDate.getFullYear(), monthDate.getMonth(), d);
256
+ const isFuture = dayDate > now;
257
+
258
+ if (isFuture) continue;
259
+
260
+ // Almost all days are perfect
261
+ let status: 'operational' | 'degraded' | 'partial_outage' | 'major_outage' = 'operational';
262
+ let uptime = 100;
263
+ let dayIncidents = 0;
264
+
265
+ // Very rare minor issues
266
+ if (Math.random() > 0.98) {
267
+ status = 'degraded';
268
+ uptime = 99.5 + Math.random() * 0.5;
269
+ dayIncidents = 1;
270
+ }
271
+
272
+ days.push({
273
+ date: dayDate.toISOString().slice(0, 10),
274
+ status,
275
+ uptime,
276
+ incidents: dayIncidents,
277
+ totalDowntime: Math.round((100 - uptime) * 14.4)
278
+ });
279
+
280
+ totalUptime += uptime;
281
+ incidents += dayIncidents;
282
+ }
283
+
284
+ months.push({
285
+ month: monthKey,
286
+ days,
287
+ overallUptime: totalUptime / days.length,
288
+ totalIncidents: incidents
289
+ });
290
+ }
291
+
292
+ return months;
293
+ };
294
+
295
+ statusMonth.monthlyData = generateMonthlyData();
296
+ statusMonth.serviceId = 'all-services';
297
+ statusMonth.serviceName = 'All Services';
298
+
299
+ // Configure Incidents - None current, few past
300
+ const currentIncidents: IIncidentDetails[] = [];
301
+
302
+ const pastIncidents: IIncidentDetails[] = [
303
+ {
304
+ id: 'inc-2024-001',
305
+ title: 'Brief API Response Time Increase',
306
+ impact: 'API responses were slightly slower than usual',
307
+ severity: 'minor',
308
+ status: 'resolved',
309
+ startTime: Date.now() - 45 * 24 * 60 * 60 * 1000,
310
+ endTime: Date.now() - 45 * 24 * 60 * 60 * 1000 + 15 * 60 * 1000,
311
+ affectedServices: ['API Services'],
312
+ rootCause: 'Temporary increase in traffic due to a viral marketing campaign.',
313
+ resolution: 'Auto-scaling handled the load increase. No manual intervention required.',
314
+ updates: [
315
+ {
316
+ id: 'update-1',
317
+ timestamp: Date.now() - 45 * 24 * 60 * 60 * 1000,
318
+ status: 'investigating',
319
+ message: 'Monitoring increased API response times.',
320
+ author: 'Automated Monitoring'
321
+ },
322
+ {
323
+ id: 'update-2',
324
+ timestamp: Date.now() - 45 * 24 * 60 * 60 * 1000 + 5 * 60 * 1000,
325
+ status: 'identified',
326
+ message: 'Traffic spike identified. Auto-scaling in progress.',
327
+ author: 'DevOps Team'
328
+ },
329
+ {
330
+ id: 'update-3',
331
+ timestamp: Date.now() - 45 * 24 * 60 * 60 * 1000 + 15 * 60 * 1000,
332
+ status: 'resolved',
333
+ message: 'Response times back to normal. Incident resolved.',
334
+ author: 'Automated Monitoring'
335
+ }
336
+ ]
337
+ },
338
+ {
339
+ id: 'inc-2023-089',
340
+ title: 'Scheduled Database Maintenance',
341
+ impact: 'Database was in read-only mode for 30 minutes',
342
+ severity: 'minor',
343
+ status: 'resolved',
344
+ startTime: Date.now() - 90 * 24 * 60 * 60 * 1000,
345
+ endTime: Date.now() - 90 * 24 * 60 * 60 * 1000 + 30 * 60 * 1000,
346
+ affectedServices: ['Database Cluster'],
347
+ rootCause: 'Scheduled maintenance for security patches.',
348
+ resolution: 'Maintenance completed successfully as planned.',
349
+ updates: [
350
+ {
351
+ id: 'update-4',
352
+ timestamp: Date.now() - 97 * 24 * 60 * 60 * 1000,
353
+ status: 'investigating',
354
+ message: 'Scheduled maintenance announced.',
355
+ author: 'Database Team'
356
+ },
357
+ {
358
+ id: 'update-5',
359
+ timestamp: Date.now() - 90 * 24 * 60 * 60 * 1000,
360
+ status: 'monitoring',
361
+ message: 'Maintenance started. Database in read-only mode.',
362
+ author: 'Database Team'
363
+ },
364
+ {
365
+ id: 'update-6',
366
+ timestamp: Date.now() - 90 * 24 * 60 * 60 * 1000 + 30 * 60 * 1000,
367
+ status: 'resolved',
368
+ message: 'Maintenance completed. All systems operational.',
369
+ author: 'Database Team'
370
+ }
371
+ ]
372
+ }
373
+ ];
374
+
375
+ incidents.currentIncidents = currentIncidents;
376
+ incidents.pastIncidents = pastIncidents;
377
+
378
+ // Configure Footer
379
+ footer.companyName = 'TechVault Services';
380
+ footer.legalUrl = 'https://techvault.example.com/legal';
381
+ footer.supportEmail = 'support@techvault.example.com';
382
+ footer.statusPageUrl = 'https://status.techvault.example.com';
383
+ footer.lastUpdated = Date.now();
384
+ footer.currentYear = new Date().getFullYear();
385
+ footer.socialLinks = [
386
+ { platform: 'twitter', url: 'https://twitter.com/techvault' },
387
+ { platform: 'github', url: 'https://github.com/techvault' },
388
+ { platform: 'linkedin', url: 'https://linkedin.com/company/techvault' },
389
+ { platform: 'youtube', url: 'https://youtube.com/techvault' }
390
+ ];
391
+ footer.rssFeedUrl = 'https://status.techvault.example.com/rss';
392
+ footer.apiStatusUrl = 'https://api.techvault.example.com/v1/status';
393
+ footer.enableSubscribe = true;
394
+ footer.subscriberCount = 5421;
395
+ footer.additionalLinks = [
396
+ { label: 'API Documentation', url: 'https://docs.techvault.example.com' },
397
+ { label: 'System Architecture', url: 'https://techvault.example.com/architecture' },
398
+ { label: 'Security', url: 'https://techvault.example.com/security' }
399
+ ];
400
+ }}
401
+ >
402
+ <upl-statuspage-header></upl-statuspage-header>
403
+ <upl-statuspage-statusbar></upl-statuspage-statusbar>
404
+ <upl-statuspage-statsgrid></upl-statuspage-statsgrid>
405
+ <upl-statuspage-assetsselector></upl-statuspage-assetsselector>
406
+ <upl-statuspage-statusdetails></upl-statuspage-statusdetails>
407
+ <upl-statuspage-statusmonth></upl-statuspage-statusmonth>
408
+ <upl-statuspage-incidents></upl-statuspage-incidents>
409
+ <upl-statuspage-footer></upl-statuspage-footer>
410
+ </dees-demowrapper>
411
+ </div>
412
+ `;