feat: add problem detection framework for common problems (#2412)
Introduces a ProblemManager that detects and surfaces actionable issues (stale config, legacy frigate-hass-card resources, slow/failed streams) via status bar indicators and notification popups with fix actions.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { z } from 'zod';
|
||||
import { linkSchema } from '../common/link';
|
||||
import { severitySchema } from '../common/severity';
|
||||
import { statusBarItemBaseSchema } from '../common/status-bar';
|
||||
import { advancedCameraCardCustomActionsBaseSchema } from './custom/base';
|
||||
@@ -138,6 +139,7 @@ const notificationSchema = z.object({
|
||||
controls: notificationControlSchema.array().optional(),
|
||||
details: notificationDetailSchema.array().optional(),
|
||||
text: z.string().optional(),
|
||||
link: linkSchema.optional(),
|
||||
});
|
||||
export type Notification = z.infer<typeof notificationSchema>;
|
||||
|
||||
@@ -157,6 +159,7 @@ const statusBarItemElementsBaseSchema = statusBarItemBaseSchema.extend({
|
||||
exclusive: z.boolean().default(false).optional(),
|
||||
expand: z.boolean().default(false).optional(),
|
||||
severity: severitySchema.optional(),
|
||||
title: z.string().optional(),
|
||||
actions: actionsBaseSchema.optional(),
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const linkSchema = z.object({
|
||||
url: z.string(),
|
||||
title: z.string(),
|
||||
});
|
||||
export type Link = z.infer<typeof linkSchema>;
|
||||
@@ -26,7 +26,11 @@ export const statusBarConfigDefault = {
|
||||
severity: statusBarItemDefault,
|
||||
technology: statusBarItemDefault,
|
||||
title: statusBarItemDefault,
|
||||
upgrade: statusBarItemDefault,
|
||||
|
||||
// Problems.
|
||||
problem_config_upgrade: statusBarItemDefault,
|
||||
problem_legacy_resource: statusBarItemDefault,
|
||||
problem_stream_not_loading: statusBarItemDefault,
|
||||
},
|
||||
position: 'bottom' as const,
|
||||
style: 'popup' as const,
|
||||
@@ -46,15 +50,25 @@ export const statusBarConfigSchema = z
|
||||
items: z
|
||||
.object({
|
||||
engine: statusBarItemBaseSchema.default(statusBarConfigDefault.items.engine),
|
||||
technology: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.technology,
|
||||
),
|
||||
resolution: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.resolution,
|
||||
),
|
||||
severity: statusBarItemBaseSchema.default(statusBarConfigDefault.items.severity),
|
||||
technology: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.technology,
|
||||
),
|
||||
title: statusBarItemBaseSchema.default(statusBarConfigDefault.items.title),
|
||||
upgrade: statusBarItemBaseSchema.default(statusBarConfigDefault.items.upgrade),
|
||||
|
||||
// Problems.
|
||||
problem_config_upgrade: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.problem_config_upgrade,
|
||||
),
|
||||
problem_legacy_resource: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.problem_legacy_resource,
|
||||
),
|
||||
problem_stream_not_loading: statusBarItemBaseSchema.default(
|
||||
statusBarConfigDefault.items.problem_stream_not_loading,
|
||||
),
|
||||
})
|
||||
.default(statusBarConfigDefault.items),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user