graphing: serve rrdtool graphs over http
This commit is contained in:
+42
-1
@@ -2,6 +2,8 @@
|
||||
|
||||
module GraphingSpec (spec) where
|
||||
|
||||
import Control.Exception (SomeException, finally, try)
|
||||
import qualified Data.ByteString as BS
|
||||
import HomeAssistant.Runtime.Graphing
|
||||
( GraphSpec (..)
|
||||
, Range (..)
|
||||
@@ -11,7 +13,12 @@ import HomeAssistant.Runtime.Graphing
|
||||
, parseNameParam
|
||||
, parseRange
|
||||
, rangeStart
|
||||
, readProcessBytes
|
||||
)
|
||||
import qualified HomeAssistant.Runtime.Metrics as Metrics
|
||||
import System.Directory (findExecutable, getTemporaryDirectory, removeFile)
|
||||
import System.Exit (ExitCode (..))
|
||||
import System.Process (readProcessWithExitCode)
|
||||
import Test.Hspec
|
||||
|
||||
traffic :: GraphSpec
|
||||
@@ -82,4 +89,38 @@ spec = do
|
||||
, "CDEF:svc_min=svc,60,*"
|
||||
, "LINE2:trig_min#0066cc:triggers in/min"
|
||||
, "LINE2:svc_min#cc0000:services out/min"
|
||||
]
|
||||
]
|
||||
|
||||
describe "end-to-end (rrdtool-gated)" $ do
|
||||
it "renders a PNG for the traffic graph" $ do
|
||||
mRrdtool <- findExecutable "rrdtool"
|
||||
case mRrdtool of
|
||||
Nothing -> pendingWith "rrdtool not on PATH"
|
||||
Just rrdtool -> do
|
||||
tmp <- getTemporaryDirectory
|
||||
let rrdPath = tmp ++ "/hass-controller-graph-test.rrd"
|
||||
cleanup = try (removeFile rrdPath) :: IO (Either SomeException ())
|
||||
schema =
|
||||
[ ("hass_trigger_in", Metrics.Derive)
|
||||
, ("hass_service_out", Metrics.Derive)
|
||||
]
|
||||
pngMagic = BS.pack [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]
|
||||
_ <- cleanup
|
||||
( do
|
||||
(createCode, _, _) <-
|
||||
readProcessWithExitCode rrdtool (Metrics.buildCreateArgs rrdPath 10 schema) ""
|
||||
createCode `shouldBe` ExitSuccess
|
||||
(updateCode, _, _) <-
|
||||
readProcessWithExitCode
|
||||
rrdtool
|
||||
(Metrics.buildUpdateArgs
|
||||
rrdPath
|
||||
["hass_trigger_in", "hass_service_out"]
|
||||
[Just 5, Just 3])
|
||||
""
|
||||
updateCode `shouldBe` ExitSuccess
|
||||
(code, out, _) <- readProcessBytes rrdtool (buildGraphArgs rrdPath traffic OneHour)
|
||||
code `shouldBe` ExitSuccess
|
||||
out `shouldSatisfy` BS.isPrefixOf pngMagic
|
||||
)
|
||||
`finally` cleanup
|
||||
Reference in New Issue
Block a user