Skip to content

Commit 97484be

Browse files
authored
Jobs runner metrics in Grafana (#1201)
1 parent 57381a1 commit 97484be

9 files changed

Lines changed: 3046 additions & 54 deletions

File tree

app/jobs/Main.hs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import NoThunks.Class
3030
import Options.Applicative (execParser)
3131
import Prometheus qualified as P
3232
import Prometheus.Metric.GHC qualified as P
33+
import Prometheus.Metric.Proc qualified as P
3334
import RequireCallStack
35+
import System.Info qualified as System
3436

3537
import Flora.Debug.ThreadDump (installThreadDumpHandler, labelCurrentThread)
3638
import Flora.Environment
@@ -41,6 +43,7 @@ import Flora.Model.Job
4143
import Flora.Tracing qualified as Tracing
4244
import FloraJobs.Environment
4345
import FloraJobs.Metrics
46+
import FloraJobs.QueueMetrics qualified as QueueMetrics
4447
import FloraJobs.Runner qualified as Runner
4548
import FloraJobs.Types
4649
import 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

Comments
 (0)