Security added on delete service and list all node + cleaning some code
This commit is contained in:
@ -1,5 +1,4 @@
|
||||
WITH base_data AS (
|
||||
-- On récupère les 60 derniers jours de données
|
||||
SELECT
|
||||
service_id,
|
||||
status,
|
||||
@ -10,7 +9,6 @@ WITH base_data AS (
|
||||
WHERE timestamp >= NOW() - INTERVAL '60 days'
|
||||
),
|
||||
time_slots_minutes AS (
|
||||
-- On génère une série de 60 minutes jusqu'à maintenant
|
||||
SELECT generate_series(
|
||||
date_trunc('minute', now()) - interval '59 minutes',
|
||||
date_trunc('minute', now()),
|
||||
@ -18,12 +16,9 @@ time_slots_minutes AS (
|
||||
) as slot
|
||||
),
|
||||
filled_minute_data AS (
|
||||
-- On crée une ligne pour chaque minute et chaque service
|
||||
SELECT
|
||||
s.id as service_id,
|
||||
ts.slot as timestamp,
|
||||
-- On prend la valeur la plus récente si plusieurs existent dans la même minute,
|
||||
-- sinon 3 s'il n'y a rien (COALESCE)
|
||||
COALESCE(MAX(bd.status), 3) as status
|
||||
FROM time_slots_minutes ts
|
||||
CROSS JOIN services s
|
||||
@ -33,7 +28,6 @@ filled_minute_data AS (
|
||||
GROUP BY s.id, ts.slot
|
||||
),
|
||||
minute_agg AS (
|
||||
-- 60 dernières minutes
|
||||
SELECT
|
||||
service_id,
|
||||
json_agg(
|
||||
@ -45,7 +39,7 @@ minute_agg AS (
|
||||
),
|
||||
time_slots_hours AS (
|
||||
SELECT generate_series(
|
||||
date_trunc('hour', now()) - interval '23 hours', -- 23 car on inclut l'heure actuelle pour faire 24h
|
||||
date_trunc('hour', now()) - interval '23 hours',
|
||||
date_trunc('hour', now()),
|
||||
interval '1 hour'
|
||||
) as slot
|
||||
@ -54,8 +48,6 @@ filled_hours_data AS (
|
||||
SELECT
|
||||
s.id as service_id,
|
||||
ts.slot as timestamp,
|
||||
-- On récupère tous les statuts bruts de base_data qui tombent dans cette heure
|
||||
-- On garde la liste pour calculer le ratio après
|
||||
COALESCE(AVG(CASE WHEN bd.status = 1 THEN 1.0 WHEN bd.status = 3 THEN NULL ELSE 0.0 END), 3) as ratio
|
||||
FROM time_slots_hours ts
|
||||
CROSS JOIN services s
|
||||
@ -71,10 +63,10 @@ hour_agg AS (
|
||||
json_build_object(
|
||||
'timestamp', timestamp,
|
||||
'status', CASE
|
||||
WHEN ratio = 3 THEN 3 -- Aucune donnée (Inconnu)
|
||||
WHEN ratio >= 0.95 THEN 1 -- Presque tout l'heure est OK
|
||||
WHEN ratio >= 0.5 THEN 2 -- Moitié de l'heure instable
|
||||
ELSE 0 -- Majorité de l'heure en panne
|
||||
WHEN ratio = 3 THEN 3
|
||||
WHEN ratio >= 0.95 THEN 1
|
||||
WHEN ratio >= 0.5 THEN 2
|
||||
ELSE 0
|
||||
END
|
||||
) ORDER BY timestamp DESC
|
||||
) as data
|
||||
@ -82,7 +74,6 @@ hour_agg AS (
|
||||
GROUP BY service_id
|
||||
),
|
||||
time_slots_days AS (
|
||||
-- On génère les 60 derniers jours
|
||||
SELECT generate_series(
|
||||
date_trunc('day', now()) - interval '59 days',
|
||||
date_trunc('day', now()),
|
||||
@ -90,12 +81,9 @@ time_slots_days AS (
|
||||
) as slot
|
||||
),
|
||||
filled_days_data AS (
|
||||
-- On calcule le ratio pour chaque jour et chaque service
|
||||
SELECT
|
||||
s.id as service_id,
|
||||
ts.slot as timestamp,
|
||||
-- Ratio d'uptime : (points OK) / (points totaux réels)
|
||||
-- Si aucun point n'existe du tout pour le jour, on met 3 (Inconnu)
|
||||
COALESCE(
|
||||
AVG(CASE WHEN bd.status = 1 THEN 1.0 WHEN bd.status = 3 THEN NULL ELSE 0.0 END),
|
||||
3
|
||||
@ -114,10 +102,10 @@ day_agg AS (
|
||||
json_build_object(
|
||||
'timestamp', timestamp,
|
||||
'status', CASE
|
||||
WHEN ratio = 3 THEN 3 -- Aucune donnée
|
||||
WHEN ratio >= 0.98 THEN 1 -- Seuil d'excellence journalier
|
||||
WHEN ratio >= 0.5 THEN 2 -- Journée instable
|
||||
ELSE 0 -- Service majoritairement HS ce jour-là
|
||||
WHEN ratio = 3 THEN 3
|
||||
WHEN ratio >= 0.98 THEN 1
|
||||
WHEN ratio >= 0.5 THEN 2
|
||||
ELSE 0
|
||||
END
|
||||
) ORDER BY timestamp DESC
|
||||
) as data
|
||||
@ -131,7 +119,7 @@ SELECT
|
||||
json_build_object(
|
||||
'id', s.id,
|
||||
'name', s.name,
|
||||
'command', s.command, -- La virgule ici est cruciale
|
||||
'command', s.command,
|
||||
'history', json_build_object(
|
||||
'minute', COALESCE(ma.data, '[]'::json),
|
||||
'hour', COALESCE(ha.data, '[]'::json),
|
||||
|
||||
Reference in New Issue
Block a user