@ -10,6 +10,13 @@ let
# Get a submodule without any embedded metadata:
_filter = x : filterAttrs ( k : v : k != " _ m o d u l e " ) x ;
# a wrapper that verifies that the configuration is valid
promtoolCheck = what : name : file : pkgs . runCommand " ${ name } - ${ what } - c h e c k e d "
{ buildInputs = [ cfg . package ] ; } ''
ln - s $ { file } $ out
promtool $ { what } $ out
'' ;
# Pretty-print JSON to a file
writePrettyJSON = name : x :
pkgs . runCommand name { } ''
@ -19,18 +26,19 @@ let
# This becomes the main config file
promConfig = {
global = cfg . globalConfig ;
rule_files = cfg . ruleFiles ++ [
rule_files = map ( promtoolCheck " c h e c k - r u l e s " " r u l e s " ) ( cfg . ruleFiles ++ [
( pkgs . writeText " p r o m e t h e u s . r u l e s " ( concatStringsSep " \n " cfg . rules ) )
] ;
] ) ;
scrape_configs = cfg . scrapeConfigs ;
} ;
generatedPrometheusYml = writePrettyJSON " p r o m e t h e u s . y m l " promConfig ;
prometheusYml =
if cfg . configText != null then
prometheusYml = let
yml = if cfg . configText != null then
pkgs . writeText " p r o m e t h e u s . y m l " cfg . configText
else generatedPrometheusYml ;
else generatedPrometheusYml ;
in promtoolCheck " c h e c k - c o n f i g " " p r o m e t h e u s . y m l " yml ;
cmdlineArgs = cfg . extraFlags ++ [
" - s t o r a g e . l o c a l . p a t h = ${ cfg . dataDir } / m e t r i c s "