20 lines
1.1 KiB
JavaScript
20 lines
1.1 KiB
JavaScript
export function serviceImpact(service, services = []) {
|
|
if (!['down', 'degraded'].includes(service.status)) return null;
|
|
const scope = service.availabilityStatus === 'operational' && ['down', 'degraded'].includes(service.scenario?.status) ? 'scenario' : 'availability';
|
|
const message = service.impactPolicy?.[scope] || {
|
|
ru: 'Возможны ограничения в работе сервиса. Подробности уточняются.',
|
|
en: 'The service may have limitations. Details are being confirmed.',
|
|
};
|
|
const advice = service.impactPolicy?.advice || null;
|
|
const alternatives = (service.impactPolicy?.fallbacks || []).flatMap(id => {
|
|
const target = services.find(item => item.id === id);
|
|
return target?.status === 'operational' ? [{ id: target.id, name: target.name, url: target.publicUrl }] : [];
|
|
});
|
|
return { scope, message, advice, alternatives };
|
|
}
|
|
|
|
export function incidentImpact(incident, services) {
|
|
const service = services.find(item => item.id === incident.serviceId);
|
|
return service?.impactPolicy?.[incident.scope || 'availability'] || null;
|
|
}
|