packages feed

snaplet-influxdb-1.0.0.1: README.org

* Welcome!
  [[https://hackage.haskell.org/package/snaplet-influxdb][https://img.shields.io/hackage/v/snaplet-influxdb.svg?style=flat]]
  [[https://travis-ci.org/ixmatus/snaplet-influxdb][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:

  #+BEGIN_SRC
  {-# 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
  #+END_SRC