diff --git a/DataSentinel/src/components/common/MonitoringCard.jsx b/DataSentinel/src/components/common/MonitoringCard.jsx index 2c43a36..d322a7f 100644 --- a/DataSentinel/src/components/common/MonitoringCard.jsx +++ b/DataSentinel/src/components/common/MonitoringCard.jsx @@ -2,20 +2,14 @@ import { useNavigate } from 'react-router-dom'; import Badge from './Badge'; +import { getStatutMonitoring } from '../../utils/statutMonitoring'; import styles from './MonitoringCard.module.css'; -/* Détermine le statut visuel selon le nombre d'erreurs */ -function getStatut(nbErreurs) { - if (nbErreurs === 0) return { label: 'OK', variant: 'ok', color: 'var(--color-ok)' }; - if (nbErreurs < 10) return { label: 'Attention', variant: 'warning', color: 'var(--color-warning)' }; - return { label: 'Critique', variant: 'critical', color: 'var(--color-primary)' }; -} - export default function MonitoringCard({ monitoring }) { const navigate = useNavigate(); const nbErreurs = monitoring.nb_erreurs ?? monitoring.count ?? 0; const monitoringId = monitoring.id ?? monitoring.id_monito; - const statut = getStatut(nbErreurs); + const statut = getStatutMonitoring(nbErreurs); /* Calcul du pourcentage de la barre de progression (max 100%) */ const progressPct = Math.min((nbErreurs / 20) * 100, 100); diff --git a/DataSentinel/src/pages/MonitoringDetail/MonitoringDetail.jsx b/DataSentinel/src/pages/MonitoringDetail/MonitoringDetail.jsx index 7e66990..097f41e 100644 --- a/DataSentinel/src/pages/MonitoringDetail/MonitoringDetail.jsx +++ b/DataSentinel/src/pages/MonitoringDetail/MonitoringDetail.jsx @@ -9,15 +9,9 @@ import LoadingSpinner from '../../components/common/LoadingSpinner'; import ErrorMessage from '../../components/common/ErrorMessage'; import Badge from '../../components/common/Badge'; import Button from '../../components/common/Button'; +import { getStatutMonitoring } from '../../utils/statutMonitoring'; import styles from './MonitoringDetail.module.css'; -/* Détermine le statut selon le nombre d'erreurs */ -function getStatut(nbErreurs) { - if (nbErreurs === 0) return { label: 'OK', variant: 'ok' }; - if (nbErreurs < 10) return { label: 'Attention', variant: 'warning' }; - return { label: 'Critique', variant: 'critical' }; -} - export default function MonitoringDetail() { const { id } = useParams(); const navigate = useNavigate(); @@ -72,7 +66,7 @@ export default function MonitoringDetail() { if (loading) return ; if (erreur) return ; - const statut = getStatut(count); + const statut = getStatutMonitoring(count); return (
diff --git a/DataSentinel/src/pages/ServiceMonitorings/ServiceMonitorings.jsx b/DataSentinel/src/pages/ServiceMonitorings/ServiceMonitorings.jsx index 890a804..25030ae 100644 --- a/DataSentinel/src/pages/ServiceMonitorings/ServiceMonitorings.jsx +++ b/DataSentinel/src/pages/ServiceMonitorings/ServiceMonitorings.jsx @@ -7,6 +7,7 @@ import DataTable from '../../components/common/DataTable'; import LoadingSpinner from '../../components/common/LoadingSpinner'; import ErrorMessage from '../../components/common/ErrorMessage'; import Button from '../../components/common/Button'; +import { buildMonitoringColumns } from '../../utils/monitoringColumns'; import styles from './ServiceMonitorings.module.css'; export default function ServiceMonitorings({ serviceLabel, serviceName }) { @@ -34,22 +35,7 @@ export default function ServiceMonitorings({ serviceLabel, serviceName }) { if (loading) return ; if (erreur) return ; - const columns = [ - { key: 'nom', label: 'Monitoring' }, - { key: 'service', label: 'Service' }, - { key: 'categorie', label: 'Catégorie' }, - { key: 'bdd_source', label: 'Source' }, - { key: 'nb_erreurs', label: 'Erreurs', render: (val) => val ?? 0 }, - { - key: 'actions', - label: 'Actions', - render: (val, row) => ( - - ) - } - ]; + const columns = buildMonitoringColumns(navigate); return (
diff --git a/DataSentinel/src/pages/VueConso/VueConso.jsx b/DataSentinel/src/pages/VueConso/VueConso.jsx index da8253b..2e28186 100644 --- a/DataSentinel/src/pages/VueConso/VueConso.jsx +++ b/DataSentinel/src/pages/VueConso/VueConso.jsx @@ -9,15 +9,10 @@ import DataTable from '../../components/common/DataTable'; import LoadingSpinner from '../../components/common/LoadingSpinner'; import ErrorMessage from '../../components/common/ErrorMessage'; import Button from '../../components/common/Button'; +import { getStatutMonitoring } from '../../utils/statutMonitoring'; +import { buildMonitoringColumns } from '../../utils/monitoringColumns'; import styles from './VueConso.module.css'; -/* Détermine la couleur selon le statut */ -function getStatusColor(nbErreurs) { - if (nbErreurs === 0) return 'var(--color-ok)'; - if (nbErreurs < 10) return 'var(--color-warning)'; - return 'var(--color-primary)'; -} - export default function VueConso() { const navigate = useNavigate(); const [data, setData] = useState([]); @@ -47,26 +42,10 @@ export default function VueConso() { const chartData = data.map(item => ({ name: item.nom || item.nom_monito || item.libelle || 'Monitoring', erreurs: item.nb_erreurs ?? item.count ?? 0, - fill: getStatusColor(item.nb_erreurs ?? item.count ?? 0) + fill: getStatutMonitoring(item.nb_erreurs ?? item.count ?? 0).color })); - /* Colonnes du tableau */ - const columns = [ - { key: 'nom', label: 'Monitoring' }, - { key: 'service', label: 'Service' }, - { key: 'categorie', label: 'Catégorie' }, - { key: 'bdd_source', label: 'Source' }, - { key: 'nb_erreurs', label: 'Erreurs', render: (val) => val ?? 0 }, - { - key: 'actions', - label: 'Actions', - render: (val, row) => ( - - ) - } - ]; + const columns = buildMonitoringColumns(navigate); return (
diff --git a/DataSentinel/src/utils/monitoringColumns.jsx b/DataSentinel/src/utils/monitoringColumns.jsx new file mode 100644 index 0000000..82984bb --- /dev/null +++ b/DataSentinel/src/utils/monitoringColumns.jsx @@ -0,0 +1,24 @@ +import Button from '../components/common/Button'; + +/* Colonnes du tableau de monitorings partagées par VueConso et + ServiceMonitorings (Contrat/Fournisseur) : même jeu de données + (GET /dashboard), même tableau. Centralisé pour qu'une évolution des + colonnes (ajout, renommage) ne soit faite qu'à un seul endroit. */ +export function buildMonitoringColumns(navigate) { + return [ + { key: 'nom', label: 'Monitoring' }, + { key: 'service', label: 'Service' }, + { key: 'categorie', label: 'Catégorie' }, + { key: 'bdd_source', label: 'Source' }, + { key: 'nb_erreurs', label: 'Erreurs', render: (val) => val ?? 0 }, + { + key: 'actions', + label: 'Actions', + render: (val, row) => ( + + ) + } + ]; +} diff --git a/DataSentinel/src/utils/statutMonitoring.js b/DataSentinel/src/utils/statutMonitoring.js new file mode 100644 index 0000000..9c4de4c --- /dev/null +++ b/DataSentinel/src/utils/statutMonitoring.js @@ -0,0 +1,16 @@ +/* Règle de statut partagée : un monitoring est "OK" sans erreur, "Attention" + en-dessous du seuil, "Critique" au-delà. Centralisé ici pour que le seuil + ne soit corrigé qu'à un seul endroit (il était dupliqué dans MonitoringCard, + MonitoringDetail et VueConso, avec le risque que l'une des copies diverge). */ + +export const SEUIL_ATTENTION = 10; + +export function getStatutMonitoring(nbErreurs) { + if (nbErreurs === 0) { + return { label: 'OK', variant: 'ok', color: 'var(--color-ok)' }; + } + if (nbErreurs < SEUIL_ATTENTION) { + return { label: 'Attention', variant: 'warning', color: 'var(--color-warning)' }; + } + return { label: 'Critique', variant: 'critical', color: 'var(--color-primary)' }; +}