@@ -30,7 +30,9 @@ import NoThunks.Class
3030import Options.Applicative (execParser )
3131import Prometheus qualified as P
3232import Prometheus.Metric.GHC qualified as P
33+ import Prometheus.Metric.Proc qualified as P
3334import RequireCallStack
35+ import System.Info qualified as System
3436
3537import Flora.Debug.ThreadDump (installThreadDumpHandler , labelCurrentThread )
3638import Flora.Environment
@@ -41,6 +43,7 @@ import Flora.Model.Job
4143import Flora.Tracing qualified as Tracing
4244import FloraJobs.Environment
4345import FloraJobs.Metrics
46+ import FloraJobs.QueueMetrics qualified as QueueMetrics
4447import FloraJobs.Runner qualified as Runner
4548import FloraJobs.Types
4649import FloraWeb.Common.Tracing
@@ -61,29 +64,41 @@ main = do
6164 liftIO $ T. putStrLn $ " 🔥 Exposing Prometheus metrics at " <> baseURL <> " /metrics"
6265 runPrometheusMetrics jobsEnv. metrics $ do
6366 void $ P. register P. ghcMetrics
67+ when (System. os == " linux" ) $ void $ P. register P. procMetrics
6468 setGitHash
6569 withLogger $ \ logger -> do
6670 runLog " flora-server" logger Log. LogTrace $
6771 checkJobsEnvForThunks jobsEnv
68- void . forkIO $ do
69- liftIO $ labelCurrentThread " jobs-http-server"
70- runServer logger floraEnv jobsEnv
72+ when floraEnv. mltp. prometheusEnabled $ do
73+ void . forkIO $ do
74+ liftIO $ labelCurrentThread " jobs-http-server"
75+ runServer logger floraEnv jobsEnv
76+ void . forkIO $ do
77+ liftIO $ labelCurrentThread " jobs-queue-metrics"
78+ runLog (" flora-jobs-" <> display floraEnv. environment) logger defaultLogLevel $
79+ QueueMetrics. runQueueMetricsLoop workerEnv jobsEnv. metrics
7180 defaultConfig <- liftIO $
7281 Worker. defaultBatchedWorkerConfig (connString floraEnv. config. connectionInfo) 50 1 $
7382 \ (job :| _) callbacks -> do
7483 processJob workerEnv jobsEnv logger floraEnv traceRunner job
7584 Worker. ack callbacks job
85+ let instrumentedHooks =
86+ if floraEnv. mltp. prometheusEnabled
87+ then metricsObservabilityHooks jobsEnv. metrics
88+ else Arb. defaultObservabilityHooks
7689 let config =
7790 defaultConfig
7891 { Worker. observabilityHooks =
79- Arb. defaultObservabilityHooks
80- { Arb. onJobFailure = \ job message startTime endTime ->
92+ instrumentedHooks
93+ { Arb. onJobFailure = \ job message startTime endTime -> do
94+ let duration = diffUTCTime endTime startTime
95+ Arb. onJobFailure instrumentedHooks job message startTime endTime
8196 liftIO $
8297 runEff $
8398 Log. runLog (" flora-jobs-" <> display floraEnv. environment) logger defaultLogLevel $
8499 Log. logAttention message $
85100 object
86- [ " duration" .= diffUTCTime endTime startTime
101+ [ " duration" .= duration
87102 , " payload" .= job. payload
88103 ]
89104 }
0 commit comments