feat(diagnostics): add health engine
This commit is contained in:
@@ -468,4 +468,93 @@ export const en: Translations = {
|
||||
compareSize: 'Size',
|
||||
compareUnknown: 'unknown',
|
||||
},
|
||||
diagnostics: {
|
||||
title: 'Marketplace Diagnostics',
|
||||
disabledTitle: 'Diagnostics unavailable',
|
||||
disabledDescription: 'Diagnostics page is available only in development mode.',
|
||||
generatedAt: 'Generated at {{value}}',
|
||||
healthScore: 'Health score',
|
||||
summary: 'Summary',
|
||||
passedChecks: '{{count}} passed checks',
|
||||
warnings: '{{count}} warnings',
|
||||
errors: '{{count}} errors',
|
||||
critical: '{{count}} critical',
|
||||
healthChecks: 'Health checks',
|
||||
results: 'Detailed results',
|
||||
noIssues: 'No diagnostics issues found.',
|
||||
ok: 'OK',
|
||||
failed: 'Failed',
|
||||
affectedComponent: 'Affected component',
|
||||
suggestedResolution: 'Suggested resolution',
|
||||
severity: {
|
||||
info: 'Info',
|
||||
warning: 'Warning',
|
||||
error: 'Error',
|
||||
critical: 'Critical',
|
||||
},
|
||||
checks: {
|
||||
bootstrapLoaded: 'Bootstrap loaded',
|
||||
tenantResolved: 'Tenant resolved',
|
||||
runtimeInitialized: 'Runtime initialized',
|
||||
themeLoaded: 'Theme loaded',
|
||||
widgetManifestLoaded: 'Widget manifest loaded',
|
||||
sectionEngineInitialized: 'Section engine reachable',
|
||||
configurationEngineInitialized: 'Configuration engine initialized',
|
||||
translationResourcesAvailable: 'Translations available',
|
||||
requiredAssetsAvailable: 'Required assets healthy',
|
||||
},
|
||||
bootstrapMissingTitle: 'Bootstrap missing',
|
||||
bootstrapMissingDescription: 'Bootstrap configuration could not be loaded.',
|
||||
bootstrapMissingResolution: 'Verify bootstrap provider response and local mock availability.',
|
||||
requiredPropertyMissingTitle: 'Required property missing',
|
||||
requiredPropertyMissingDescription: 'Required bootstrap property is missing.',
|
||||
requiredPropertyMissingResolution: 'Add missing property to bootstrap payload.',
|
||||
unknownWidgetTypeTitle: 'Unknown widget type',
|
||||
unknownWidgetTypeDescription: 'Widget type is not present in widget manifest.',
|
||||
unknownWidgetTypeResolution: 'Register widget in manifest or remove invalid widget config.',
|
||||
duplicateIdTitle: 'Duplicate identifier',
|
||||
duplicatePageIdDescription: 'Duplicate page id detected.',
|
||||
duplicateSectionIdDescription: 'Duplicate section id detected.',
|
||||
duplicateWidgetIdDescription: 'Duplicate widget id detected.',
|
||||
duplicateIdResolution: 'Ensure ids are unique within bootstrap config.',
|
||||
unknownLayoutTitle: 'Unknown layout',
|
||||
unknownLayoutDescription: 'Page layout value is not recognized.',
|
||||
unknownLayoutResolution: 'Use supported layout or extend diagnostics allow-list.',
|
||||
invalidFeatureFlagTitle: 'Invalid feature flag',
|
||||
invalidFeatureFlagDescription: 'Feature flag value must be boolean.',
|
||||
invalidFeatureFlagResolution: 'Normalize feature flag values to true or false.',
|
||||
brokenPageDefinitionTitle: 'Broken page definition',
|
||||
brokenPageDefinitionDescription: 'Page definition is incomplete.',
|
||||
brokenPageDefinitionResolution: 'Add missing route, title, key, or sections.',
|
||||
invalidNavigationTargetTitle: 'Invalid navigation target',
|
||||
invalidNavigationTargetDescription: 'Navigation route does not match known routes.',
|
||||
invalidNavigationTargetResolution: 'Update route target or add matching route surface.',
|
||||
missingTranslationTitle: 'Missing translation',
|
||||
missingTranslationDescription: 'Translation key resolves to itself.',
|
||||
missingTranslationResolution: 'Add missing key to translation resources.',
|
||||
missingMediaTitle: 'Missing media',
|
||||
missingMediaDescription: 'Expected branding media is missing.',
|
||||
missingMediaResolution: 'Provide valid media URLs in bootstrap branding config.',
|
||||
runtimeNotInitializedTitle: 'Runtime not initialized',
|
||||
runtimeNotInitializedDescription: 'Platform runtime state has not been marked initialized.',
|
||||
runtimeNotInitializedResolution: 'Verify PlatformRuntimeService initialize sequence.',
|
||||
configFallbackUsageTitle: 'Configuration fallback in use',
|
||||
configFallbackUsageDescription: 'Development runtime is using fallback or mock configuration.',
|
||||
configFallbackUsageResolution: 'Switch provider mode if real bootstrap validation is needed.',
|
||||
missingDatasourceTitle: 'Missing datasource',
|
||||
missingDatasourceDescription: 'Widget supports datasource selection but none was declared.',
|
||||
missingDatasourceResolution: 'Define source in widget props or manifest default settings.',
|
||||
widgetRenderFailureTitle: 'Widget render failure',
|
||||
widgetRenderFailureDescription: 'Widget fell back to unknown widget renderer.',
|
||||
widgetRenderFailureResolution: 'Register widget component or fix manifest component key.',
|
||||
brokenRouteTitle: 'Broken route expectation',
|
||||
brokenRouteDescription: 'Expected route surface is missing.',
|
||||
brokenRouteResolution: 'Restore route registration or update diagnostics expectation.',
|
||||
imageLoadFailedTitle: 'Image load failed',
|
||||
imageLoadFailedDescription: 'Rendered image failed to load.',
|
||||
imageLoadFailedResolution: 'Verify asset path, CORS, and media availability.',
|
||||
optionalDataMissingTitle: 'Optional data missing',
|
||||
optionalDataMissingDescription: 'Optional configuration data is absent.',
|
||||
optionalDataMissingResolution: 'Add optional value if UX depends on it.',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -468,4 +468,88 @@ export const hy: Translations = {
|
||||
compareSize: 'Չափ',
|
||||
compareUnknown: 'անհայտ',
|
||||
},
|
||||
diagnostics: {
|
||||
title: 'Մարքեթփլեյսի ախտորոշում',
|
||||
disabledTitle: 'Ախտորոշումը հասանելի չէ',
|
||||
disabledDescription: 'Ախտորոշման էջը հասանելի է միայն development ռեժիմում։',
|
||||
generatedAt: 'Ստեղծվել է {{value}}',
|
||||
healthScore: 'Առողջության գնահատական',
|
||||
summary: 'Ամփոփում',
|
||||
passedChecks: '{{count}} հաջող ստուգում',
|
||||
warnings: '{{count}} նախազգուշացում',
|
||||
errors: '{{count}} սխալ',
|
||||
critical: '{{count}} կրիտիկական',
|
||||
healthChecks: 'Առողջության ստուգումներ',
|
||||
results: 'Մանրամասն արդյունքներ',
|
||||
noIssues: 'Ախտորոշման խնդիրներ չեն գտնվել։',
|
||||
ok: 'Լավ',
|
||||
failed: 'Խափանվեց',
|
||||
affectedComponent: 'Վնասված բաղադրիչ',
|
||||
suggestedResolution: 'Առաջարկվող լուծում',
|
||||
severity: { info: 'Տեղեկ.', warning: 'Զգուշ.', error: 'Սխալ', critical: 'Կրիտիկական' },
|
||||
checks: {
|
||||
bootstrapLoaded: 'Bootstrap բեռնված է',
|
||||
tenantResolved: 'Tenant որոշված է',
|
||||
runtimeInitialized: 'Runtime-ը մեկնարկված է',
|
||||
themeLoaded: 'Թեման բեռնված է',
|
||||
widgetManifestLoaded: 'Widget manifest-ը բեռնված է',
|
||||
sectionEngineInitialized: 'Section Engine-ը հասանելի է',
|
||||
configurationEngineInitialized: 'Configuration Engine-ը մեկնարկված է',
|
||||
translationResourcesAvailable: 'Թարգմանությունները հասանելի են',
|
||||
requiredAssetsAvailable: 'Պարտադիր assets-ը հասանելի են',
|
||||
},
|
||||
bootstrapMissingTitle: 'Bootstrap-ը բացակայում է',
|
||||
bootstrapMissingDescription: 'Bootstrap կարգավորումը չի բեռնվել։',
|
||||
bootstrapMissingResolution: 'Ստուգեք bootstrap provider-ը և local mock-ը։',
|
||||
requiredPropertyMissingTitle: 'Պարտադիր հատկությունը բացակայում է',
|
||||
requiredPropertyMissingDescription: 'Bootstrap-ում պարտադիր հատկություն չկա։',
|
||||
requiredPropertyMissingResolution: 'Ավելացրեք հատկությունը bootstrap payload-ում։',
|
||||
unknownWidgetTypeTitle: 'Անհայտ widget type',
|
||||
unknownWidgetTypeDescription: 'Widget type-ը չկա widget manifest-ում։',
|
||||
unknownWidgetTypeResolution: 'Ավելացրեք widget-ը manifest-ում կամ հեռացրեք սխալ config-ը։',
|
||||
duplicateIdTitle: 'Կրկնվող ID',
|
||||
duplicatePageIdDescription: 'Գտնվել է կրկնվող page id։',
|
||||
duplicateSectionIdDescription: 'Գտնվել է կրկնվող section id։',
|
||||
duplicateWidgetIdDescription: 'Գտնվել է կրկնվող widget id։',
|
||||
duplicateIdResolution: 'Bootstrap config-ում ID-ները դարձրեք եզակի։',
|
||||
unknownLayoutTitle: 'Անհայտ layout',
|
||||
unknownLayoutDescription: 'Էջի layout արժեքը ճանաչված չէ։',
|
||||
unknownLayoutResolution: 'Օգտագործեք աջակցվող layout կամ ընդլայնեք allow-list-ը։',
|
||||
invalidFeatureFlagTitle: 'Սխալ feature flag',
|
||||
invalidFeatureFlagDescription: 'Feature flag արժեքը պետք է boolean լինի։',
|
||||
invalidFeatureFlagResolution: 'Նորմալացրեք արժեքը true կամ false։',
|
||||
brokenPageDefinitionTitle: 'Կոտրված page definition',
|
||||
brokenPageDefinitionDescription: 'Էջի նկարագրությունը թերի է։',
|
||||
brokenPageDefinitionResolution: 'Ավելացրեք route, title, key կամ sections։',
|
||||
invalidNavigationTargetTitle: 'Սխալ navigation target',
|
||||
invalidNavigationTargetDescription: 'Navigation route-ը չի համընկնում հայտնի route-ների հետ։',
|
||||
invalidNavigationTargetResolution: 'Թարմացրեք route target-ը կամ ավելացրեք route։',
|
||||
missingTranslationTitle: 'Թարգմանությունը բացակայում է',
|
||||
missingTranslationDescription: 'Թարգմանության key-ը չի թարգմանվում։',
|
||||
missingTranslationResolution: 'Ավելացրեք key-ը translation resources-ում։',
|
||||
missingMediaTitle: 'Media-ն բացակայում է',
|
||||
missingMediaDescription: 'Սպասվող branding media-ն բացակայում է։',
|
||||
missingMediaResolution: 'Տրամադրեք ճիշտ media URL-ներ branding config-ում։',
|
||||
runtimeNotInitializedTitle: 'Runtime-ը մեկնարկված չէ',
|
||||
runtimeNotInitializedDescription: 'Platform runtime state-ը initialized չէ։',
|
||||
runtimeNotInitializedResolution: 'Ստուգեք PlatformRuntimeService initialize շղթան։',
|
||||
configFallbackUsageTitle: 'Օգտագործվում է fallback config',
|
||||
configFallbackUsageDescription: 'Development runtime-ը օգտագործում է fallback կամ mock config։',
|
||||
configFallbackUsageResolution: 'Փոխեք provider mode-ը, եթե պետք է իրական bootstrap ստուգում։',
|
||||
missingDatasourceTitle: 'Datasource-ը բացակայում է',
|
||||
missingDatasourceDescription: 'Widget-ը աջակցում է datasource, բայց այն նշված չէ։',
|
||||
missingDatasourceResolution: 'Նշեք source widget props-ում կամ manifest default settings-ում։',
|
||||
widgetRenderFailureTitle: 'Widget render failure',
|
||||
widgetRenderFailureDescription: 'Widget-ը անցել է unknown widget renderer-ի։',
|
||||
widgetRenderFailureResolution: 'Գրանցեք widget component-ը կամ ուղղեք manifest component key-ը։',
|
||||
brokenRouteTitle: 'Կոտրված route սպասում',
|
||||
brokenRouteDescription: 'Սպասվող route-ը բացակայում է։',
|
||||
brokenRouteResolution: 'Վերականգնեք route registration-ը կամ թարմացրեք diagnostics կանոնը։',
|
||||
imageLoadFailedTitle: 'Նկարի բեռնումը ձախողվեց',
|
||||
imageLoadFailedDescription: 'Արտապատկերվող նկարը չի բեռնվել։',
|
||||
imageLoadFailedResolution: 'Ստուգեք asset path-ը, CORS-ը և media հասանելիությունը։',
|
||||
optionalDataMissingTitle: 'Optional data բացակայում է',
|
||||
optionalDataMissingDescription: 'Optional config արժեքը բացակայում է։',
|
||||
optionalDataMissingResolution: 'Ավելացրեք արժեքը, եթե UX-ը կախված է դրանից։',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -468,4 +468,88 @@ export const ru: Translations = {
|
||||
compareSize: 'Размер',
|
||||
compareUnknown: 'неизвестно',
|
||||
},
|
||||
diagnostics: {
|
||||
title: 'Диагностика маркетплейса',
|
||||
disabledTitle: 'Диагностика недоступна',
|
||||
disabledDescription: 'Страница диагностики доступна только в режиме разработки.',
|
||||
generatedAt: 'Сформировано: {{value}}',
|
||||
healthScore: 'Оценка состояния',
|
||||
summary: 'Сводка',
|
||||
passedChecks: '{{count}} успешных проверок',
|
||||
warnings: '{{count}} предупреждений',
|
||||
errors: '{{count}} ошибок',
|
||||
critical: '{{count}} критических',
|
||||
healthChecks: 'Проверки состояния',
|
||||
results: 'Подробные результаты',
|
||||
noIssues: 'Проблем диагностики не найдено.',
|
||||
ok: 'OK',
|
||||
failed: 'Ошибка',
|
||||
affectedComponent: 'Затронутый компонент',
|
||||
suggestedResolution: 'Рекомендация',
|
||||
severity: { info: 'Инфо', warning: 'Предупреждение', error: 'Ошибка', critical: 'Критично' },
|
||||
checks: {
|
||||
bootstrapLoaded: 'Bootstrap загружен',
|
||||
tenantResolved: 'Tenant определен',
|
||||
runtimeInitialized: 'Runtime инициализирован',
|
||||
themeLoaded: 'Тема загружена',
|
||||
widgetManifestLoaded: 'Манифест виджетов загружен',
|
||||
sectionEngineInitialized: 'Section Engine доступен',
|
||||
configurationEngineInitialized: 'Configuration Engine инициализирован',
|
||||
translationResourcesAvailable: 'Переводы доступны',
|
||||
requiredAssetsAvailable: 'Обязательные assets доступны',
|
||||
},
|
||||
bootstrapMissingTitle: 'Bootstrap отсутствует',
|
||||
bootstrapMissingDescription: 'Конфигурация bootstrap не загружена.',
|
||||
bootstrapMissingResolution: 'Проверьте provider bootstrap и локальный mock.',
|
||||
requiredPropertyMissingTitle: 'Отсутствует обязательное свойство',
|
||||
requiredPropertyMissingDescription: 'В bootstrap отсутствует обязательное свойство.',
|
||||
requiredPropertyMissingResolution: 'Добавьте свойство в bootstrap payload.',
|
||||
unknownWidgetTypeTitle: 'Неизвестный тип виджета',
|
||||
unknownWidgetTypeDescription: 'Тип виджета отсутствует в widget manifest.',
|
||||
unknownWidgetTypeResolution: 'Добавьте виджет в manifest или удалите неверную конфигурацию.',
|
||||
duplicateIdTitle: 'Дублирующийся идентификатор',
|
||||
duplicatePageIdDescription: 'Обнаружен дублирующийся id страницы.',
|
||||
duplicateSectionIdDescription: 'Обнаружен дублирующийся id секции.',
|
||||
duplicateWidgetIdDescription: 'Обнаружен дублирующийся id виджета.',
|
||||
duplicateIdResolution: 'Сделайте id уникальными в bootstrap конфигурации.',
|
||||
unknownLayoutTitle: 'Неизвестный layout',
|
||||
unknownLayoutDescription: 'Значение layout страницы не распознано.',
|
||||
unknownLayoutResolution: 'Используйте поддерживаемый layout или расширьте allow-list.',
|
||||
invalidFeatureFlagTitle: 'Некорректный feature flag',
|
||||
invalidFeatureFlagDescription: 'Значение feature flag должно быть boolean.',
|
||||
invalidFeatureFlagResolution: 'Нормализуйте значение к true или false.',
|
||||
brokenPageDefinitionTitle: 'Некорректное описание страницы',
|
||||
brokenPageDefinitionDescription: 'Описание страницы неполное.',
|
||||
brokenPageDefinitionResolution: 'Добавьте route, title, key или sections.',
|
||||
invalidNavigationTargetTitle: 'Некорректная цель навигации',
|
||||
invalidNavigationTargetDescription: 'Route навигации не совпадает с известными route.',
|
||||
invalidNavigationTargetResolution: 'Исправьте target route или добавьте route.',
|
||||
missingTranslationTitle: 'Отсутствует перевод',
|
||||
missingTranslationDescription: 'Ключ перевода не разрешается.',
|
||||
missingTranslationResolution: 'Добавьте ключ в translation resources.',
|
||||
missingMediaTitle: 'Отсутствует media',
|
||||
missingMediaDescription: 'Ожидаемый branding media ресурс отсутствует.',
|
||||
missingMediaResolution: 'Укажите корректные media URL в branding конфиге.',
|
||||
runtimeNotInitializedTitle: 'Runtime не инициализирован',
|
||||
runtimeNotInitializedDescription: 'Platform runtime state не помечен как initialized.',
|
||||
runtimeNotInitializedResolution: 'Проверьте цепочку initialize в PlatformRuntimeService.',
|
||||
configFallbackUsageTitle: 'Используется fallback конфигурация',
|
||||
configFallbackUsageDescription: 'Runtime разработки использует fallback или mock конфигурацию.',
|
||||
configFallbackUsageResolution: 'Смените provider mode, если нужна проверка реального bootstrap.',
|
||||
missingDatasourceTitle: 'Отсутствует datasource',
|
||||
missingDatasourceDescription: 'Виджет поддерживает datasource, но он не задан.',
|
||||
missingDatasourceResolution: 'Укажите source в props виджета или default settings manifest.',
|
||||
widgetRenderFailureTitle: 'Сбой рендера виджета',
|
||||
widgetRenderFailureDescription: 'Виджет откатился на unknown widget renderer.',
|
||||
widgetRenderFailureResolution: 'Зарегистрируйте компонент виджета или исправьте component key.',
|
||||
brokenRouteTitle: 'Нарушено ожидание route',
|
||||
brokenRouteDescription: 'Ожидаемый route отсутствует.',
|
||||
brokenRouteResolution: 'Верните регистрацию route или обновите правило диагностики.',
|
||||
imageLoadFailedTitle: 'Ошибка загрузки изображения',
|
||||
imageLoadFailedDescription: 'Отображаемое изображение не загрузилось.',
|
||||
imageLoadFailedResolution: 'Проверьте asset path, CORS и доступность media.',
|
||||
optionalDataMissingTitle: 'Отсутствуют необязательные данные',
|
||||
optionalDataMissingDescription: 'Необязательное конфигурационное значение отсутствует.',
|
||||
optionalDataMissingResolution: 'Добавьте значение, если оно нужно UX.',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -466,4 +466,93 @@ export interface Translations {
|
||||
compareSize: string;
|
||||
compareUnknown: string;
|
||||
};
|
||||
diagnostics: {
|
||||
title: string;
|
||||
disabledTitle: string;
|
||||
disabledDescription: string;
|
||||
generatedAt: string;
|
||||
healthScore: string;
|
||||
summary: string;
|
||||
passedChecks: string;
|
||||
warnings: string;
|
||||
errors: string;
|
||||
critical: string;
|
||||
healthChecks: string;
|
||||
results: string;
|
||||
noIssues: string;
|
||||
ok: string;
|
||||
failed: string;
|
||||
affectedComponent: string;
|
||||
suggestedResolution: string;
|
||||
severity: {
|
||||
info: string;
|
||||
warning: string;
|
||||
error: string;
|
||||
critical: string;
|
||||
};
|
||||
checks: {
|
||||
bootstrapLoaded: string;
|
||||
tenantResolved: string;
|
||||
runtimeInitialized: string;
|
||||
themeLoaded: string;
|
||||
widgetManifestLoaded: string;
|
||||
sectionEngineInitialized: string;
|
||||
configurationEngineInitialized: string;
|
||||
translationResourcesAvailable: string;
|
||||
requiredAssetsAvailable: string;
|
||||
};
|
||||
bootstrapMissingTitle: string;
|
||||
bootstrapMissingDescription: string;
|
||||
bootstrapMissingResolution: string;
|
||||
requiredPropertyMissingTitle: string;
|
||||
requiredPropertyMissingDescription: string;
|
||||
requiredPropertyMissingResolution: string;
|
||||
unknownWidgetTypeTitle: string;
|
||||
unknownWidgetTypeDescription: string;
|
||||
unknownWidgetTypeResolution: string;
|
||||
duplicateIdTitle: string;
|
||||
duplicatePageIdDescription: string;
|
||||
duplicateSectionIdDescription: string;
|
||||
duplicateWidgetIdDescription: string;
|
||||
duplicateIdResolution: string;
|
||||
unknownLayoutTitle: string;
|
||||
unknownLayoutDescription: string;
|
||||
unknownLayoutResolution: string;
|
||||
invalidFeatureFlagTitle: string;
|
||||
invalidFeatureFlagDescription: string;
|
||||
invalidFeatureFlagResolution: string;
|
||||
brokenPageDefinitionTitle: string;
|
||||
brokenPageDefinitionDescription: string;
|
||||
brokenPageDefinitionResolution: string;
|
||||
invalidNavigationTargetTitle: string;
|
||||
invalidNavigationTargetDescription: string;
|
||||
invalidNavigationTargetResolution: string;
|
||||
missingTranslationTitle: string;
|
||||
missingTranslationDescription: string;
|
||||
missingTranslationResolution: string;
|
||||
missingMediaTitle: string;
|
||||
missingMediaDescription: string;
|
||||
missingMediaResolution: string;
|
||||
runtimeNotInitializedTitle: string;
|
||||
runtimeNotInitializedDescription: string;
|
||||
runtimeNotInitializedResolution: string;
|
||||
configFallbackUsageTitle: string;
|
||||
configFallbackUsageDescription: string;
|
||||
configFallbackUsageResolution: string;
|
||||
missingDatasourceTitle: string;
|
||||
missingDatasourceDescription: string;
|
||||
missingDatasourceResolution: string;
|
||||
widgetRenderFailureTitle: string;
|
||||
widgetRenderFailureDescription: string;
|
||||
widgetRenderFailureResolution: string;
|
||||
brokenRouteTitle: string;
|
||||
brokenRouteDescription: string;
|
||||
brokenRouteResolution: string;
|
||||
imageLoadFailedTitle: string;
|
||||
imageLoadFailedDescription: string;
|
||||
imageLoadFailedResolution: string;
|
||||
optionalDataMissingTitle: string;
|
||||
optionalDataMissingDescription: string;
|
||||
optionalDataMissingResolution: string;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user