wikibot[edit]
Function
|
public.getmanagepercentavailnodewindow
|
CREATE OR REPLACE FUNCTION public.getmanagepercentavailnodewindow(integer, timestamp without time zone, timestamp without time zone)
RETURNS double precision
LANGUAGE plpgsql
AS $function$
DECLARE
nid ALIAS FOR $1;
xtime ALIAS FOR $2;
ytime ALIAS FOR $3;
downtime float8 := 0.0;
count integer := 0;
rollingWindow float := 0;
totalServiceTime float := 0;
BEGIN
IF xtime < ytime THEN
rollingWindow := EXTRACT (EPOCH FROM (ytime - xtime));
downtime := getManagedOutageForNodeInWindow(nid, ytime, xtime)/1000;
ELSE
rollingWindow := EXTRACT (EPOCH FROM (xtime - ytime));
downtime := getManagedOutageForNodeInWindow(nid, xtime, ytime)/1000;
END IF;
count := getManagedServiceCountForNode(nid);
totalServiceTime := count * rollingWindow;
IF totalServiceTime > 0 THEN
RETURN 100 * (1 - (downtime / totalServiceTime));
ELSE
IF totalServiceTime = 0 THEN
RETURN 100;
ELSE
RETURN -1;
END IF;
END IF;
END;
$function$