Snap framework snaplet for the InfluxDB library

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

BSD3 licensed by Parnell Springmeyer
* Welcome!

=snaplet-influxdb= provides a convenience interface to the Haskell
InfluxDB package.

*NOTE: this code only builds a pool with the one server description
provided in the config. When I get around to it the configuration
will be more advanced allowing you to specify a pool of servers for
the InfluxDB client to use.*

Usage is simple, make sure you've configured the connections
correctly in the InfluxDB snaplet:

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}

module Main where

import Control.Lens
import Data.ByteString.Char8 as C8
import Database.InfluxDB
import Snap
import Snap.Snaplet.InfluxDB

data App = App
{ _influx :: Snaplet InfluxState

makeLenses ''App

instance HasInfluxPool (Handler b App) where
getInfluxPool = with influx getInfluxPool

-- | The application's routes.
routes :: [(ByteString, Handler App App ())]
routes = [ ("/" , writeText "hello")
, ("test", fooHandler)

fooHandler :: Handler App App ()
fooHandler = do

-- If you want full control over the type of post, precision,
-- maybe even the db to post to...

runInflux $ \c -> do
post c "db" $ writeSeries "myseries" "somevalue"

-- OR if you want to use the database you've configured with a
-- default precision of Seconds...

runInfluxPost $ writeSeries "myseries" "somevalue"

modifyResponse $ setResponseCode 204

-- | The application initializer.
app :: SnapletInit App App
app = makeSnaplet "app" "An snaplet example application." Nothing $ do
m <- nestSnaplet "influx" influx $ initInflux
addRoutes routes
return $ App m

main :: IO ()
main = serveSnaplet defaultConfig app
comments powered byDisqus