classy-influxdb-simple 0.1.0.4 → 0.2.0.0
raw patch · 4 files changed
+98/−23 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Database.InfluxDB.Simple.Classy.Types: Hours :: Precision
+ Database.InfluxDB.Simple.Classy.Types: Microseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types: Milliseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types: Minutes :: Precision
+ Database.InfluxDB.Simple.Classy.Types: Nanoseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types: Seconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types: _Hours :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: _Microseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: _Milliseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: _Minutes :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: _Nanoseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: _Precision :: AsPrecision r_adLo => Prism' r_adLo Precision
+ Database.InfluxDB.Simple.Classy.Types: _Seconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types: class AsPrecision r_adLo where _Nanoseconds = (.) _Precision _Nanoseconds _Microseconds = (.) _Precision _Microseconds _Milliseconds = (.) _Precision _Milliseconds _Seconds = (.) _Precision _Seconds _Minutes = (.) _Precision _Minutes _Hours = (.) _Precision _Hours
+ Database.InfluxDB.Simple.Classy.Types: data Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Hours :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Microseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Milliseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Minutes :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Nanoseconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: Seconds :: Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Hours :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Microseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Milliseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Minutes :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Nanoseconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Precision :: AsPrecision r_adLo => Prism' r_adLo Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: _Seconds :: AsPrecision r_adLo => Prism' r_adLo ()
+ Database.InfluxDB.Simple.Classy.Types.Precision: class AsPrecision r_adLo where _Nanoseconds = (.) _Precision _Nanoseconds _Microseconds = (.) _Precision _Microseconds _Milliseconds = (.) _Precision _Milliseconds _Seconds = (.) _Precision _Seconds _Minutes = (.) _Precision _Minutes _Hours = (.) _Precision _Hours
+ Database.InfluxDB.Simple.Classy.Types.Precision: data Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance Database.InfluxDB.Simple.Classy.Types.Precision.AsPrecision Data.ByteString.Internal.ByteString
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance Database.InfluxDB.Simple.Classy.Types.Precision.AsPrecision Data.Text.Internal.Text
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance Database.InfluxDB.Simple.Classy.Types.Precision.AsPrecision Database.InfluxDB.Simple.Classy.Types.Precision.Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance Database.InfluxDB.Simple.Classy.Types.Precision.AsPrecision GHC.Base.String
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance GHC.Classes.Eq Database.InfluxDB.Simple.Classy.Types.Precision.Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance GHC.Classes.Ord Database.InfluxDB.Simple.Classy.Types.Precision.Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance GHC.Enum.Enum Database.InfluxDB.Simple.Classy.Types.Precision.Precision
+ Database.InfluxDB.Simple.Classy.Types.Precision: instance GHC.Show.Show Database.InfluxDB.Simple.Classy.Types.Precision.Precision
- Database.InfluxDB.Simple.Classy: queryData :: (CanInflux m e, IsDb db) => InfluxDBConfig -> db -> InfluxQuery -> m Value
+ Database.InfluxDB.Simple.Classy: queryData :: (CanInflux m e, IsDb db) => InfluxDBConfig -> db -> Precision -> InfluxQuery -> m Value
- Database.InfluxDB.Simple.Classy: queryDataToCSV :: (CanInflux m e, IsDb db) => InfluxDBConfig -> db -> InfluxQuery -> m ByteString
+ Database.InfluxDB.Simple.Classy: queryDataToCSV :: (CanInflux m e, IsDb db) => InfluxDBConfig -> db -> Precision -> InfluxQuery -> m ByteString
- Database.InfluxDB.Simple.Classy: writeData :: (CanInflux m e, IsDb db, ToLine l) => InfluxDBConfig -> db -> l -> m ()
+ Database.InfluxDB.Simple.Classy: writeData :: (CanInflux m e, IsDb db, ToLine l) => InfluxDBConfig -> db -> Precision -> l -> m ()
- Database.InfluxDB.Simple.Classy.Types: _CommsOrInfluxError :: AsInfluxDbError r_aeyR => Prism' r_aeyR ByteString
+ Database.InfluxDB.Simple.Classy.Types: _CommsOrInfluxError :: AsInfluxDbError r_aiXe => Prism' r_aiXe ByteString
- Database.InfluxDB.Simple.Classy.Types: _InfluxDbError :: AsInfluxDbError r_aeyR => Prism' r_aeyR InfluxDbError
+ Database.InfluxDB.Simple.Classy.Types: _InfluxDbError :: AsInfluxDbError r_aiXe => Prism' r_aiXe InfluxDbError
- Database.InfluxDB.Simple.Classy.Types: _ParseError :: AsInfluxDbError r_aeyR => Prism' r_aeyR ByteString
+ Database.InfluxDB.Simple.Classy.Types: _ParseError :: AsInfluxDbError r_aiXe => Prism' r_aiXe ByteString
- Database.InfluxDB.Simple.Classy.Types: _UnknownError :: AsInfluxDbError r_aeyR => Prism' r_aeyR (InfluxRqType, SomeException)
+ Database.InfluxDB.Simple.Classy.Types: _UnknownError :: AsInfluxDbError r_aiXe => Prism' r_aiXe (InfluxRqType, SomeException)
- Database.InfluxDB.Simple.Classy.Types: basicInfluxOpts :: IsDb a => Options -> InfluxDBConfig -> a -> Options
+ Database.InfluxDB.Simple.Classy.Types: basicInfluxOpts :: IsDb a => Options -> InfluxDBConfig -> a -> Precision -> Options
- Database.InfluxDB.Simple.Classy.Types: class AsInfluxDbError r_aeyR where _CommsOrInfluxError = (.) _InfluxDbError _CommsOrInfluxError _ParseError = (.) _InfluxDbError _ParseError _UnknownError = (.) _InfluxDbError _UnknownError
+ Database.InfluxDB.Simple.Classy.Types: class AsInfluxDbError r_aiXe where _CommsOrInfluxError = (.) _InfluxDbError _CommsOrInfluxError _ParseError = (.) _InfluxDbError _ParseError _UnknownError = (.) _InfluxDbError _UnknownError
- Database.InfluxDB.Simple.Classy.Types: class HasInfluxDBConfig c_aenD where idbHost = (.) influxDBConfig idbHost idbPass = (.) influxDBConfig idbPass idbPort = (.) influxDBConfig idbPort idbUser = (.) influxDBConfig idbUser
+ Database.InfluxDB.Simple.Classy.Types: class HasInfluxDBConfig c_aiNx where idbHost = (.) influxDBConfig idbHost idbPass = (.) influxDBConfig idbPass idbPort = (.) influxDBConfig idbPort idbUser = (.) influxDBConfig idbUser
- Database.InfluxDB.Simple.Classy.Types: idbHost :: HasInfluxDBConfig c_aenD => Lens' c_aenD ByteString
+ Database.InfluxDB.Simple.Classy.Types: idbHost :: HasInfluxDBConfig c_aiNx => Lens' c_aiNx ByteString
- Database.InfluxDB.Simple.Classy.Types: idbPass :: HasInfluxDBConfig c_aenD => Lens' c_aenD ByteString
+ Database.InfluxDB.Simple.Classy.Types: idbPass :: HasInfluxDBConfig c_aiNx => Lens' c_aiNx ByteString
- Database.InfluxDB.Simple.Classy.Types: idbPort :: HasInfluxDBConfig c_aenD => Lens' c_aenD Int
+ Database.InfluxDB.Simple.Classy.Types: idbPort :: HasInfluxDBConfig c_aiNx => Lens' c_aiNx Int
- Database.InfluxDB.Simple.Classy.Types: idbUser :: HasInfluxDBConfig c_aenD => Lens' c_aenD ByteString
+ Database.InfluxDB.Simple.Classy.Types: idbUser :: HasInfluxDBConfig c_aiNx => Lens' c_aiNx ByteString
- Database.InfluxDB.Simple.Classy.Types: influxDBConfig :: HasInfluxDBConfig c_aenD => Lens' c_aenD InfluxDBConfig
+ Database.InfluxDB.Simple.Classy.Types: influxDBConfig :: HasInfluxDBConfig c_aiNx => Lens' c_aiNx InfluxDBConfig
Files
- classy-influxdb-simple.cabal +2/−1
- src/Database/InfluxDB/Simple/Classy.hs +10/−7
- src/Database/InfluxDB/Simple/Classy/Types.hs +24/−15
- src/Database/InfluxDB/Simple/Classy/Types/Precision.hs +62/−0
classy-influxdb-simple.cabal view
@@ -1,5 +1,5 @@ name: classy-influxdb-simple-version: 0.1.0.4+version: 0.2.0.0 synopsis: Super simple InfluxDB package in Classy-MTL style -- description: homepage: https://github.com/mankyKitty/classy-influxdb-simple#readme@@ -17,6 +17,7 @@ hs-source-dirs: src exposed-modules: Database.InfluxDB.Simple.Classy , Database.InfluxDB.Simple.Classy.Types+ , Database.InfluxDB.Simple.Classy.Types.Precision build-depends: base >= 4.7 && < 5 , wreq , lens
src/Database/InfluxDB/Simple/Classy.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-} module Database.InfluxDB.Simple.Classy ( writeData , queryData@@ -22,6 +21,7 @@ import Database.InfluxDB.Simple.Classy.Types (AsInfluxDbError (..), CanInflux,+ Precision, HasInfluxDBConfig (..), InfluxDBConfig, InfluxDbError (..),@@ -74,13 +74,14 @@ ) => InfluxDBConfig -> db+ -> Precision -> l -> m ()-writeData c db l =+writeData c db prec l = runInflux (W.postWith o (writeUrl c) (toLine l)) Write win where win = pure . const ()- o = basicInfluxOpts W.defaults c db+ o = basicInfluxOpts W.defaults c db prec -- | -- Ask Influx for some data and return any results in CSV format:@@ -105,12 +106,13 @@ ) => InfluxDBConfig -> db+ -> Precision -> InfluxQuery -> m ByteString-queryDataToCSV c db (InfluxQuery q) =+queryDataToCSV c db prec (InfluxQuery q) = runInflux (W.getWith o (queryUrl c)) QueryCSV (pure . view W.responseBody) where- o = basicInfluxOpts W.defaults c db+ o = basicInfluxOpts W.defaults c db prec & W.param "q" .~ [Text.decodeUtf8 q] & W.header "Accept" .~ ["application/csv"] @@ -123,13 +125,14 @@ ) => InfluxDBConfig -> db+ -> Precision -> InfluxQuery -> m Value-queryData c db (InfluxQuery q) =+queryData c db prec (InfluxQuery q) = runInflux (W.getWith o (queryUrl c)) Query success where success r = either (throwing _ParseError . BS8.pack) pure $ r ^. W.responseBody . to A.eitherDecode - o = basicInfluxOpts W.defaults c db+ o = basicInfluxOpts W.defaults c db prec & W.param "q" .~ [Text.decodeUtf8 q]
src/Database/InfluxDB/Simple/Classy/Types.hs view
@@ -11,32 +11,39 @@ , HasInfluxDBConfig (..) , InfluxDbError (..) , AsInfluxDbError (..)+ , Precision (..)+ , AsPrecision (..) , CanInflux , basicInfluxOpts , rqWinCode ) where -import Control.Exception (SomeException)-import Control.Lens (makeClassy, makeClassyPrisms, (.~),- (?~), (^.))-import Control.Monad.Except (MonadError)-import Control.Monad.IO.Class (MonadIO)+import Control.Exception (SomeException)+import Control.Lens (makeClassy, makeClassyPrisms,+ prism', re,+ (.~), (?~),+ (^.))+import Control.Monad.Except (MonadError)+import Control.Monad.IO.Class (MonadIO) -import Data.ByteString (ByteString)-import qualified Data.ByteString.Char8 as BS8+import Data.ByteString (ByteString)+import qualified Data.ByteString.Char8 as BS8+import Data.String (IsString (..)) -import Data.Function ((&))+import Data.Function ((&)) -import Data.Text (Text)+import Data.Text (Text) -import Data.Vector (Vector)-import qualified Data.Vector as V+import Data.Vector (Vector)+import qualified Data.Vector as V -import GHC.Word (Word32)+import GHC.Word (Word32) -import Network.Wreq (Options)-import qualified Network.Wreq as W+import Network.Wreq (Options)+import qualified Network.Wreq as W +import Database.InfluxDB.Simple.Classy.Types.Precision (AsPrecision (..),+ Precision (..)) -- | -- Used to differentiate what action we were trying to perform on the InfluxDB -- when an error occurred.@@ -111,9 +118,11 @@ => Options -> InfluxDBConfig -> a+ -> Precision -> Options-basicInfluxOpts o env db = o+basicInfluxOpts o env db prec = o & W.param "db" .~ [toDbName db]+ & W.param "precision" .~ [prec ^. re _Precision] & W.auth ?~ W.basicAuth user' pass' where user' = env ^. idbUser
+ src/Database/InfluxDB/Simple/Classy/Types/Precision.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TemplateHaskell #-}+module Database.InfluxDB.Simple.Classy.Types.Precision+ ( Precision (..)+ , AsPrecision (..)+ ) where++import Control.Lens (Lens', Prism', makeClassyPrisms, preview,+ prism', re, view, (^?))++import Data.ByteString (ByteString)+import Data.ByteString.Lens (packedChars, unpackedChars)+import Data.Text (Text)+import Data.Text.Lens (packed, unpacked)++-- |+-- Precision of the timestamp in the writes or queries to Influx+-- [n,u,ms,s,m,h]+data Precision+ = Nanoseconds+ | Microseconds+ | Milliseconds+ | Seconds+ | Minutes+ | Hours+ deriving (Eq, Ord, Enum)+makeClassyPrisms ''Precision++instance AsPrecision String where+ _Precision = prism'+ (\case+ Nanoseconds -> "n"+ Microseconds -> "u"+ Milliseconds -> "ms"+ Seconds -> "s"+ Minutes -> "m"+ Hours -> "h"+ )+ (\case+ "n" -> Just Nanoseconds+ "u" -> Just Microseconds+ "ms" -> Just Milliseconds+ "s" -> Just Seconds+ "m" -> Just Minutes+ "h" -> Just Hours+ _ -> Nothing+ )++{-# INLINABLE pris' #-}+pris' :: Lens' a String -> Lens' String a -> Prism' a Precision+pris' f t = prism' (view (re _Precision . t)) (preview (f . _Precision))++instance AsPrecision Text where+ _Precision = pris' unpacked packed++instance AsPrecision ByteString where+ _Precision = pris' unpackedChars packedChars++instance Show Precision where+ show = view (re _Precision)