hriemann alternatives and similar packages
Based on the "Web" category.
Alternatively, view hriemann alternatives based on common mentions on social networks and blogs.
-
haskell-bitmex-rest
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
scotty
Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp (Official Repository) -
servant
Main repository for the servant libraries — DSL for describing, serving, querying, mocking, documenting web applications and more! -
swagger-petstore
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
yesod-persistent
A RESTful Haskell web framework built on WAI. -
neuron
Future-proof note-taking and publishing based on Zettelkasten (superseded by Emanote: https://github.com/srid/emanote) -
airship
Helium + Webmachine = Airship. A toolkit for building declarative, RESTful web apps. -
apecs-gloss
a fast, extensible, type driven Haskell ECS framework for games -
haskell-kubernetes
Haskell bindings to the Kubernetes API (via swagger-codegen) -
digestive-functors
A general way to consume input using applicative functors -
servant-elm
Automatically derive Elm functions to query servant webservices -
tagsoup
Haskell library for parsing and extracting information from (possibly malformed) HTML/XML documents -
hbro
[Unmaintained] A minimal web-browser written and configured in Haskell. -
kubernetes-client-core
Haskell client for the kubernetes API. A work in progress. -
backprop
Heterogeneous automatic differentiation ("backpropagation") in Haskell -
keera-hails-reactive-htmldom
Keera Hails: Haskell on Rails - Reactive Programming Framework for Interactive Haskell applications -
engine-io
A Haskell server implementation of the Engine.IO and Socket.IO (1.0) protocols -
ghcjs-dom
Make Document Object Model (DOM) apps that run in any browser and natively using WebKitGtk
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of hriemann or a related project?
README
A Riemann Client for Haskell
This is a Riemann client for Haskell with an API based on my experience using Riemann in a production environment.
It was initially inspired by riemann-hs however I felt things could be a little simpler.
- No Lenses
- Doesn't use a monad transformer
- Currently this library is only for sending events, not querying
- No UDP client
- Async TCP sending
- Batching and async error handling
- Deal with back pressure
Please be aware that this is currently a work in progress and hasn't been well tested yet. I still have the following features to add:
- Tests!!!
- Timeout if events take too long to send
Use pipes?
Originally I wanted to avoid pipes as it's just another dependency and Unagi seems to be quite a bit faster, however after implementing most of the required features I can see that it would be really nice if the 'Clients' were made of individual components that compose. You would have 1 producer which is connected to sendEvent
, consumers such as a TCP consumer and a stdout consumer as well as pipes such as batch pipe and overflow pipe.
Usage
module Main where
import Data.Function
import qualified Network.Monitoring.Riemann.Event as Event
import Network.Monitoring.Riemann.TCP
import qualified Data.Sequence as Seq
main :: IO ()
main = do
c <- tcpConnection "localhost" 5555
putStrLn "doing some IO work"
let event1 = Event.ok "my service"
& Event.description "my description"
& Event.metric (length [ "some data" ])
& Event.ttl 20
& Event.tags [ "tag1", "tag2" ]
Event.sendEvents c (Seq.singleton event1)
putStrLn "do something else"
let event2 = Event.ok "my other service"
Event.sendEvents c (Seq.singleton event2)
putStrLn "finished"
Events are built by composing helper functions that set Riemann fields and applying to one of the Event constructors:
Event.ok "my service"
& Event.description "my description"
& Event.metric (length [ "some data" ])
& Event.ttl 20
& Event.tags ["tag1", "tag2"]
With this design you are encouraged to create an event with one of Event.ok
, Event.warn
or Event.failure
.
This has been done because we found that it is best to avoid services like my.service.success
and my.service.error
(that's what the Riemann state field is for).
You can use your own states using Event.info & Event.state "trace"
however this is discouraged as it doesn't show up nicely in riemann-dash.
Alternatively there is a Monoid based api for creating events:
import Data.Monoid (Endo, (<>))
import Network.Monitoring.Riemann.Event.Monoid
eventA :: Endo Event
eventA = ttl 10 <> metric (1 :: Int) <> attributes [attribute "something" Nothing]
eventB :: Endo Event
eventB = tags ["tag 1"]
compositeEvent :: Event
compositeEvent = ok "some service" (eventA <> eventB)