X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Database%2FRRDtool.hs;h=45ae91a3a36da7f675fca245a6de2c66abbcf07d;hb=1376286d127998a72ca99d2809405355eafe69cc;hp=6e7b3321503ed72491397bed7b7df21ae75a1e9d;hpb=33f5e740cf2d85750550937a238e2427dcdcd6de;p=hs-rrdtool.git diff --git a/Database/RRDtool.hs b/Database/RRDtool.hs index 6e7b332..45ae91a 100644 --- a/Database/RRDtool.hs +++ b/Database/RRDtool.hs @@ -15,9 +15,12 @@ module Database.RRDtool , CommonBinaryOp(..) , CommonTrinaryOp(..) , CommonSetOp(..) + , TrendOp(..) , VariableShiftPredictOp(..) , FixedShiftPredictOp(..) + , CommonValue(..) , IterativeValue(..) + , IterativeValueOf(..) , AggregativeUnaryOp(..) , createRRD @@ -155,7 +158,7 @@ dsTest = COMPUTE { dsName = "foo" -- , dsExpr = Previous :<: Const 100 -- , dsExpr = Var "foo" :<: Const 100 - , dsExpr = Average (Const 100 .*. Const 200 .*. HNil) + , dsExpr = AverageOf (Const 100 .*. Const 200 .*. HNil) } class (Show e, Eq e) => Expr e @@ -163,7 +166,8 @@ class Expr e => CommonExpr e class Expr e => IterativeExpr e class Expr e => AggregativeExpr e instance CommonExpr e => IterativeExpr e -instance CommonExpr e => AggregativeExpr e + +--class MentionedVars class (Show es, Eq es, HList es) => ExprSet es instance ExprSet HNil @@ -182,11 +186,11 @@ data Constant instance Expr Constant instance CommonExpr Constant -data Variable - = Var !String - deriving (Show, Eq, Ord) -instance Expr Variable -instance CommonExpr Variable +class (Show a, Eq a) => Variable a where + varName :: a -> String + +instance Variable a => Expr a +instance Variable a => CommonExpr a -- Common operators data CommonUnaryOp a @@ -203,8 +207,6 @@ data CommonUnaryOp a | Deg2Rad !a | Rad2Deg !a | Abs !a - | Trend !Variable !a - | TrendNan !Variable !a deriving (Show, Eq, Ord) instance Expr a => Expr (CommonUnaryOp a) instance CommonExpr a => CommonExpr (CommonUnaryOp a) @@ -244,42 +246,80 @@ instance (CommonExpr a, CommonExpr b, CommonExpr c) -- multiple values onto the stack... data CommonSetOp es - = Average !es + = AverageOf !es deriving (Show, Eq, Ord) instance ExprSet es => Expr (CommonSetOp es) instance CommonExprSet es => CommonExpr (CommonSetOp es) -data VariableShiftPredictOp ss w - = VariableShiftPredictAverage !ss !w !Variable - | VariableShiftPredictSigma !ss !w !Variable +data TrendOp v a + = Trend !v !a + | TrendNan !v !a + deriving (Show, Eq, Ord) +instance (Variable v, Expr a) => Expr (TrendOp v a) +instance (Variable v, CommonExpr a) => CommonExpr (TrendOp v a) + +data VariableShiftPredictOp ss w v + = VariableShiftPredictAverage !ss !w !v + | VariableShiftPredictSigma !ss !w !v deriving (Show, Eq, Ord) -instance (ExprSet ss, Expr w) - => Expr (VariableShiftPredictOp ss w) -instance (CommonExprSet ss, CommonExpr w) - => CommonExpr (VariableShiftPredictOp ss w) +instance (ExprSet ss, Expr w, Variable v) + => Expr (VariableShiftPredictOp ss w v) +instance (CommonExprSet ss, CommonExpr w, Variable v) + => CommonExpr (VariableShiftPredictOp ss w v) -data FixedShiftPredictOp sm w - = FixedShiftPredictAverage !sm !w !Variable - | FixedShiftPredictSigma !sm !w !Variable +data FixedShiftPredictOp sm w v + = FixedShiftPredictAverage !sm !w !v + | FixedShiftPredictSigma !sm !w !v deriving (Show, Eq, Ord) -instance (Expr sm, Expr w) - => Expr (FixedShiftPredictOp sm w) -instance (CommonExpr sm, CommonExpr w) - => CommonExpr (FixedShiftPredictOp sm w) +instance (Expr sm, Expr w, Variable v) + => Expr (FixedShiftPredictOp sm w v) +instance (CommonExpr sm, CommonExpr w, Variable v) + => CommonExpr (FixedShiftPredictOp sm w v) + +-- Common special values +data CommonValue + = Unknown + | Infinity + | NegativeInfinity + | Now + deriving (Show, Eq, Ord) +instance Expr CommonValue +instance CommonExpr CommonValue -- Iterative special values data IterativeValue = Previous + | Count + | TakenTime + | TakenLocalTime deriving (Show, Eq, Ord) instance Expr IterativeValue instance IterativeExpr IterativeValue --- Aggregative operators -data AggregativeUnaryOp a - = Maximum !a +data IterativeValueOf v + = PreviousOf !v + deriving (Show, Eq, Ord) +instance Variable v => Expr (IterativeValueOf v) +instance Variable v => IterativeExpr (IterativeValueOf v) + +-- Aggregative operators (fairly restricted due to rrdtool's +-- restriction) +data AggregativeUnaryOp v + = Maximum !v + | Minimum !v + | Average !v + | StandardDeviation !v + | First !v + | Last !v + | Total !v + | Percent !v !Constant + | PercentNan !v !Constant + | LSLSlope !v + | LSLInt !v + | LSLCorrel !v deriving (Show, Eq, Ord) -instance Expr a => Expr (AggregativeUnaryOp a) -instance AggregativeExpr a => AggregativeExpr (AggregativeUnaryOp a) +instance Variable v => Expr (AggregativeUnaryOp v) +instance Variable v => AggregativeExpr (AggregativeUnaryOp v) -- |The 'createRRD' function lets you set up new Round Robin Database -- (RRD) files. The file is created at its final, full size and filled