Skip to content

A snaplet providing an influxdb connection pool built from a configuration.

License

Notifications You must be signed in to change notification settings

ixmatus/snaplet-influxdb

Repository files navigation

Welcome!

https://img.shields.io/hackage/v/snaplet-influxdb.svg?style=flat https://travis-ci.org/ixmatus/snaplet-influxdb.svg?branch=master

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

About

A snaplet providing an influxdb connection pool built from a configuration.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published