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