corpus

self-hosted listenbrainz and last.fm proxy
Log | Files | Refs | README | LICENSE

Metrics.purs (2885B)


      1 module Metrics where
      2 
      3 import Prelude
      4 
      5 import Data.Either (Either(..))
      6 import Data.Function.Uncurried (Fn2, Fn3, Fn6, runFn2, runFn3, runFn6)
      7 import Effect (Effect)
      8 import Effect.Aff (Aff, makeAff, nonCanceler)
      9 import Effect.Exception (error)
     10 import Node.HTTP.Types (IMServer, IncomingMessage, ServerResponse)
     11 
     12 -- | Async: serialises all registered metrics to Prometheus text format.
     13 foreign import getMetricsImpl :: Fn2 (String -> Effect Unit) (String -> Effect Unit) (Effect Unit)
     14 
     15 -- | The MIME type to use for the /metrics response body.
     16 foreign import getContentType :: Effect String
     17 
     18 -- | Attaches a 'finish' listener to record metrics and log the request.
     19 foreign import wrapRequestImpl :: Fn6 String String (String -> Effect Unit) (IncomingMessage IMServer) ServerResponse (Effect Unit) (Effect Unit)
     20 
     21 -- Sync
     22 foreign import incSyncRunsImpl :: Fn3 String String String (Effect Unit)
     23 foreign import incSyncScrobblesImpl :: Fn3 String String Int (Effect Unit)
     24 foreign import setSyncLastSuccessImpl :: Fn2 String String (Effect Unit)
     25 
     26 -- Metadata enrichment
     27 foreign import incEnrichmentFetchImpl :: Fn3 String String String (Effect Unit)
     28 foreign import setEnrichmentQueueSizeImpl :: Fn3 String String Int (Effect Unit)
     29 
     30 -- Cover art
     31 foreign import incCoverRequestImpl :: Fn3 String String String (Effect Unit)
     32 
     33 -- Cosine Club
     34 foreign import incCosineRequestImpl :: Fn2 String String (Effect Unit)
     35 
     36 -- Database backup
     37 foreign import incDbBackupRunImpl :: Fn2 String String (Effect Unit)
     38 foreign import setDbBackupLastSuccess :: String -> Effect Unit
     39 
     40 getMetrics :: Aff String
     41 getMetrics = makeAff \cb -> do
     42   runFn2 getMetricsImpl
     43     (\s -> cb (Right s))
     44     (\e -> cb (Left (error e)))
     45   pure nonCanceler
     46 
     47 wrapRequest :: String -> String -> (String -> Effect Unit) -> IncomingMessage IMServer -> ServerResponse -> Effect Unit -> Effect Unit
     48 wrapRequest method path logFn req res handler = runFn6 wrapRequestImpl method path logFn req res handler
     49 
     50 incSyncRuns :: String -> String -> String -> Effect Unit
     51 incSyncRuns u s r = runFn3 incSyncRunsImpl u s r
     52 
     53 incSyncScrobbles :: String -> String -> Int -> Effect Unit
     54 incSyncScrobbles u s c = runFn3 incSyncScrobblesImpl u s c
     55 
     56 setSyncLastSuccess :: String -> String -> Effect Unit
     57 setSyncLastSuccess u s = runFn2 setSyncLastSuccessImpl u s
     58 
     59 incEnrichmentFetch :: String -> String -> String -> Effect Unit
     60 incEnrichmentFetch u s r = runFn3 incEnrichmentFetchImpl u s r
     61 
     62 setEnrichmentQueueSize :: String -> String -> Int -> Effect Unit
     63 setEnrichmentQueueSize u t n = runFn3 setEnrichmentQueueSizeImpl u t n
     64 
     65 incCoverRequest :: String -> String -> String -> Effect Unit
     66 incCoverRequest u s r = runFn3 incCoverRequestImpl u s r
     67 
     68 incCosineRequest :: String -> String -> Effect Unit
     69 incCosineRequest u r = runFn2 incCosineRequestImpl u r
     70 
     71 incDbBackupRun :: String -> String -> Effect Unit
     72 incDbBackupRun u r = runFn2 incDbBackupRunImpl u r