Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- newtype Query = Query Text
- data Server = Server {}
- host :: Lens' Server Text
- port :: Lens' Server Int
- ssl :: Lens' Server Bool
- defaultServer :: Server
- secureServer :: Server
- data Credentials = Credentials {}
- credentials :: Text -> Text -> Credentials
- user :: Lens' Credentials Text
- password :: Lens' Credentials Text
- newtype Database = Database {
- databaseName :: Text
- newtype Measurement = Measurement Text
- newtype Key = Key Text
- identifier :: String -> String -> Text
- data Nullability
- type QueryField = Field 'Nullable
- type LineField = Field 'NonNullable
- data Field (n :: Nullability) where
- data RequestType
- data Precision (ty :: RequestType) where
- Nanosecond :: Precision ty
- Microsecond :: Precision ty
- Millisecond :: Precision ty
- Second :: Precision ty
- Minute :: Precision ty
- Hour :: Precision ty
- RFC3339 :: Precision 'QueryRequest
- precisionName :: Precision ty -> Text
- class Timestamp time where
- roundTo :: Precision 'WriteRequest -> time -> Int64
- scaleTo :: Precision 'WriteRequest -> time -> Int64
- roundAt :: RealFrac a => a -> a -> a
- precisionScale :: Fractional a => Precision ty -> a
- timeSpecToSeconds :: TimeSpec -> Double
- data InfluxException
- class HasServer a where
- class HasDatabase a where
- class HasPrecision (ty :: RequestType) a | a -> ty where
- class HasManager a where
- manager :: Lens' a (Either ManagerSettings Manager)
- class HasCredentials a where
- authentication :: Lens' a (Maybe Credentials)
Documentation
>>>
:set -XOverloadedStrings
>>>
import System.Clock (TimeSpec(..))
>>>
import Database.InfluxDB
>>>
import qualified Database.InfluxDB.Format as F
An InfluxDB query.
A spec of the format is available at https://docs.influxdata.com/influxdb/v1.7/query_language/spec/.
A Query
can be constructed using either
- the
IsString
instance with-XOverloadedStrings
- or
formatQuery
.
>>>
:set -XOverloadedStrings
>>>
"SELECT * FROM series" :: Query
"SELECT * FROM series">>>
import qualified Database.InfluxDB.Format as F
>>>
formatQuery ("SELECT * FROM "%F.key) "series"
"SELECT * FROM \"series\""
NOTE: Currently this library doesn't support type-safe query construction.
InfluxDB server to connect to.
Following lenses are available to access its fields:
Instances
Generic Server Source # | |
Show Server Source # | |
Eq Server Source # | |
Ord Server Source # | |
type Rep Server Source # | |
Defined in Database.InfluxDB.Types type Rep Server = D1 ('MetaData "Server" "Database.InfluxDB.Types" "influxdb-1.9.3-IFuqfyTGhfMJQN2h35ot" 'False) (C1 ('MetaCons "Server" 'PrefixI 'True) (S1 ('MetaSel ('Just "_host") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: (S1 ('MetaSel ('Just "_port") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Just "_ssl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool)))) |
ssl :: Lens' Server Bool Source #
If SSL is enabled
For secure connections (HTTPS), consider using one of the following packages:
defaultServer :: Server Source #
Default InfluxDB server settings
Default parameters:
>>>
defaultServer ^. host
"localhost">>>
defaultServer ^. port
8086>>>
defaultServer ^. ssl
False
secureServer :: Server Source #
HTTPS-enabled InfluxDB server settings
data Credentials Source #
Instances
Show Credentials Source # | |
Defined in Database.InfluxDB.Types showsPrec :: Int -> Credentials -> ShowS # show :: Credentials -> String # showList :: [Credentials] -> ShowS # |
user :: Lens' Credentials Text Source #
User name to access InfluxDB.
>>>
let creds = credentials "john" "passw0rd"
>>>
creds ^. user
"john"
password :: Lens' Credentials Text Source #
Password to access InfluxDB
>>>
let creds = credentials "john" "passw0rd"
>>>
creds ^. password
"passw0rd"
Database name.
formatDatabase
can be used to construct a
Database
.
>>>
"test-db" :: Database
"test-db">>>
formatDatabase "test-db"
"test-db">>>
formatDatabase ("test-db-"%F.decimal) 0
"test-db-0"
newtype Measurement Source #
String name that is used for measurements.
formatMeasurement
can be used to construct a
Measurement
.
>>>
"test-series" :: Measurement
"test-series">>>
formatMeasurement "test-series"
"test-series">>>
formatMeasurement ("test-series-"%F.decimal) 0
"test-series-0"
Instances
IsString Measurement Source # | |
Defined in Database.InfluxDB.Types fromString :: String -> Measurement # | |
Show Measurement Source # | |
Defined in Database.InfluxDB.Types showsPrec :: Int -> Measurement -> ShowS # show :: Measurement -> String # showList :: [Measurement] -> ShowS # | |
Eq Measurement Source # | |
Defined in Database.InfluxDB.Types (==) :: Measurement -> Measurement -> Bool # (/=) :: Measurement -> Measurement -> Bool # | |
Ord Measurement Source # | |
Defined in Database.InfluxDB.Types compare :: Measurement -> Measurement -> Ordering # (<) :: Measurement -> Measurement -> Bool # (<=) :: Measurement -> Measurement -> Bool # (>) :: Measurement -> Measurement -> Bool # (>=) :: Measurement -> Measurement -> Bool # max :: Measurement -> Measurement -> Measurement # min :: Measurement -> Measurement -> Measurement # |
String type that is used for tag keys/values and field keys.
formatKey
can be used to construct a Key
.
>>>
"test-key" :: Key
"test-key">>>
formatKey "test-key"
"test-key">>>
formatKey ("test-key-"%F.decimal) 0
"test-key-0"
data Nullability Source #
Nullability of fields.
Queries can contain nulls but the line protocol cannot.
type QueryField = Field 'Nullable Source #
Field type for queries. Queries can contain null values.
type LineField = Field 'NonNullable Source #
Field type for the line protocol. The line protocol doesn't accept null values.
data Field (n :: Nullability) where Source #
FieldInt :: !Int64 -> Field n | Signed 64-bit integers ( |
FieldFloat :: !Double -> Field n | IEEE-754 64-bit floating-point numbers. This is the default numerical type. |
FieldString :: !Text -> Field n | String field. Its length is limited to 64KB, which is not enforced by this library. |
FieldBool :: !Bool -> Field n | Boolean field. |
FieldNull :: Field 'Nullable | Null field. Note that a field can be null only in queries. The line protocol doesn't allow null values. |
data RequestType Source #
Type of a request
QueryRequest | Request for |
WriteRequest | Request for |
Instances
Show RequestType Source # | |
Defined in Database.InfluxDB.Types showsPrec :: Int -> RequestType -> ShowS # show :: RequestType -> String # showList :: [RequestType] -> ShowS # |
data Precision (ty :: RequestType) where Source #
Predefined set of time precision.
RFC3339
is only available for QueryRequest
s.
Nanosecond :: Precision ty | POSIX time in ns |
Microsecond :: Precision ty | POSIX time in μs |
Millisecond :: Precision ty | POSIX time in ms |
Second :: Precision ty | POSIX time in s |
Minute :: Precision ty | POSIX time in minutes |
Hour :: Precision ty | POSIX time in hours |
RFC3339 :: Precision 'QueryRequest | Nanosecond precision time in a human readable format, like
|
precisionName :: Precision ty -> Text Source #
Name of the time precision.
>>>
precisionName Nanosecond
"n">>>
precisionName Microsecond
"u">>>
precisionName Millisecond
"ms">>>
precisionName Second
"s">>>
precisionName Minute
"m">>>
precisionName Hour
"h">>>
precisionName RFC3339
"rfc3339"
class Timestamp time where Source #
A Timestamp
is something that can be converted to a valid
InfluxDB timestamp, which is represented as a 64-bit integer.
roundTo :: Precision 'WriteRequest -> time -> Int64 Source #
Round a time to the given precision and scale it to nanoseconds
scaleTo :: Precision 'WriteRequest -> time -> Int64 Source #
Scale a time to the given precision
Instances
Timestamp TimeSpec Source # |
|
Defined in Database.InfluxDB.Types | |
Timestamp NominalDiffTime Source # |
|
Defined in Database.InfluxDB.Types roundTo :: Precision 'WriteRequest -> NominalDiffTime -> Int64 Source # scaleTo :: Precision 'WriteRequest -> NominalDiffTime -> Int64 Source # | |
Timestamp UTCTime Source # |
|
Defined in Database.InfluxDB.Types |
precisionScale :: Fractional a => Precision ty -> a Source #
Scale of the type precision.
>>>
precisionScale RFC3339
1.0e-9>>>
precisionScale Microsecond
1.0e-6
timeSpecToSeconds :: TimeSpec -> Double Source #
data InfluxException Source #
Exceptions used in this library.
In general, the library tries to convert exceptions from the dependent libraries to the following types of errors.
ServerError String | Server side error. You can expect to get a successful response once the issue is resolved on the server side. |
ClientError String Request | Client side error. You need to fix your query to get a successful response. |
UnexpectedResponse String Request ByteString | Received an unexpected response. The This can happen e.g. when the response from InfluxDB is incompatible with what this library expects due to an upstream format change or when the JSON response doesn't have expected fields etc. |
HTTPException HttpException | HTTP communication error. Typical HTTP errors (4xx and 5xx) are covered by |
Instances
Exception InfluxException Source # | |
Defined in Database.InfluxDB.Types | |
Show InfluxException Source # | |
Defined in Database.InfluxDB.Types showsPrec :: Int -> InfluxException -> ShowS # show :: InfluxException -> String # showList :: [InfluxException] -> ShowS # |
class HasServer a where Source #
Class of data types that have a server field
Instances
HasServer PingParams Source # |
|
Defined in Database.InfluxDB.Ping | |
HasServer QueryParams Source # |
|
Defined in Database.InfluxDB.Query | |
HasServer WriteParams Source # |
|
Defined in Database.InfluxDB.Write |
class HasDatabase a where Source #
Class of data types that have a database field
Instances
HasDatabase ShowQuery Source # |
|
HasDatabase QueryParams Source # |
|
Defined in Database.InfluxDB.Query | |
HasDatabase WriteParams Source # |
|
Defined in Database.InfluxDB.Write |
class HasPrecision (ty :: RequestType) a | a -> ty where Source #
Class of data types that have a precision field
Instances
HasPrecision 'QueryRequest QueryParams Source # | Returning JSON responses contain timestamps in the specified precision/format.
|
Defined in Database.InfluxDB.Query | |
HasPrecision 'WriteRequest WriteParams Source # |
|
Defined in Database.InfluxDB.Write | |
HasPrecision 'WriteRequest WriteParams Source # | Timestamp precision. In the UDP API, all timestamps are sent in nanosecond but you can specify lower precision. The writer just rounds timestamps to the specified precision. |
Defined in Database.InfluxDB.Write.UDP |
class HasManager a where Source #
Class of data types that have a manager field
manager :: Lens' a (Either ManagerSettings Manager) Source #
HTTP manager settings or a manager itself.
If it's set to ManagerSettings
, the library will create a Manager
from
the settings for you.
Instances
HasManager PingParams Source # |
|
Defined in Database.InfluxDB.Ping | |
HasManager QueryParams Source # |
|
Defined in Database.InfluxDB.Query | |
HasManager WriteParams Source # |
|
Defined in Database.InfluxDB.Write |
class HasCredentials a where Source #
Class of data types that has an authentication field
authentication :: Lens' a (Maybe Credentials) Source #
User name and password to be used when sending requests to InfluxDB.
Instances
HasCredentials QueryParams Source # | Authentication info for the query
|
Defined in Database.InfluxDB.Query | |
HasCredentials WriteParams Source # | Authentication info for the write
|
Defined in Database.InfluxDB.Write |