код написан
This commit is contained in:
66
frontend/src/lib/stores/health.js
Normal file
66
frontend/src/lib/stores/health.js
Normal file
@@ -0,0 +1,66 @@
|
||||
// [DEF:health_store:Store]
|
||||
// @TIER: STANDARD
|
||||
// @PURPOSE: Manage dashboard health summary state and failing counts for UI badges.
|
||||
// @LAYER: UI
|
||||
// @RELATION: DEPENDS_ON -> api.getHealthSummary
|
||||
|
||||
import { writable, derived } from 'svelte/store';
|
||||
import { api } from '../api.js';
|
||||
|
||||
/**
|
||||
* @typedef {Object} HealthState
|
||||
* @property {Array} items - List of dashboard health items
|
||||
* @property {number} pass_count - Number of passing dashboards
|
||||
* @property {number} warn_count - Number of warning dashboards
|
||||
* @property {number} fail_count - Number of failing dashboards
|
||||
* @property {number} unknown_count - Number of unknown status dashboards
|
||||
* @property {boolean} loading - Loading state
|
||||
* @property {Date|null} lastUpdated - Last successful fetch timestamp
|
||||
*/
|
||||
|
||||
function createHealthStore() {
|
||||
const { subscribe, set, update } = writable({
|
||||
items: [],
|
||||
pass_count: 0,
|
||||
warn_count: 0,
|
||||
fail_count: 0,
|
||||
unknown_count: 0,
|
||||
loading: false,
|
||||
lastUpdated: null
|
||||
});
|
||||
|
||||
/**
|
||||
* Refresh health summary from API
|
||||
* @param {string|null} environmentId - Optional environment filter
|
||||
*/
|
||||
async function refresh(environmentId = null) {
|
||||
update(s => ({ ...s, loading: true }));
|
||||
try {
|
||||
console.log(`[HealthStore][Action] Refreshing health summary context={{'environmentId': '${environmentId}'}}`);
|
||||
const summary = await api.getHealthSummary(environmentId);
|
||||
set({
|
||||
...summary,
|
||||
loading: false,
|
||||
lastUpdated: new Date()
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[HealthStore][Coherence:Failed] Failed to fetch health summary:', error);
|
||||
update(s => ({ ...s, loading: false }));
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
refresh
|
||||
};
|
||||
}
|
||||
|
||||
export const healthStore = createHealthStore();
|
||||
|
||||
/**
|
||||
* Derived store for the total count of failing dashboards.
|
||||
* Used for sidebar badges and global notifications.
|
||||
*/
|
||||
export const failingCount = derived(healthStore, $health => $health.fail_count);
|
||||
|
||||
// [/DEF:health_store:Store]
|
||||
Reference in New Issue
Block a user