flatironinstitute/slurm-prometheus-exporter

Compilation issues. Does precompiled version of exporter exist?

rd178639 opened this issue · 1 comments

Hi there,

I was trying to compile your exporter under Slurm 21.08.1, but I encountered many issues on my way, starting from missing library (libslurmdb.so), through issues related to permissions and finally this appeared:

error: In file included from .stack-work/dist/x86_64-linux/Cabal-3.0.1.0/build/slurm-exporter/slurm-exporter-tmp/Slurm/Node_hsc_make.c:1:0: Node.hsc: In function ‘main’: Node.hsc:48:76: error: ‘NODE_STATE_REBOOT’ undeclared (first use in this function) /root/.stack/programs/x86_64-linux/ghc-8.8.4/lib/ghc-8.8.4/template-hsc.h:112:10: note: in definition of macro ‘hsc_enum’ if ((x) < 0) \ ^ Node.hsc:48:76: note: each undeclared identifier is reported only once for each function it appears in /root/.stack/programs/x86_64-linux/ghc-8.8.4/lib/ghc-8.8.4/template-hsc.h:112:10: note: in definition of macro ‘hsc_enum’ if ((x) < 0) \ ^
I decided to stop doing this as it consumes lots plenty of time and there is no guarantee it will work. However, would be great if you could share pre-compiled version (if you have).

Thanks,
Radek

I am guessing you are using slurm 21 which does require some changes. Here's a patch that might work.

diff --git a/Node.hs b/Node.hs
index 8875326..82f0408 100644
--- a/Node.hs
+++ b/Node.hs
@@ -79,7 +79,7 @@ addNode :: Bool -> Node -> ResMap -> ResMap
 addNode withreason Node{..} = ar ResAlloc nodeAlloc
     { allocTime = if alloc then allocTime nodeAlloc else 0 }
   . ar (case nodeInfoState nodeInfo of
-    s | s == nodeStateDrain && s /= nodeStateReboot -> ResDrain
+    s | s == nodeStateDrain && s /= nodeStateRebootRequest -> ResDrain
       | s == nodeStateDown -> ResDown
       | s == nodeStateRes -> ResResv
       | otherwise -> ResFree)
diff --git a/Slurm/Node.hsc b/Slurm/Node.hsc
index 0bf7e9e..44e31b9 100644
--- a/Slurm/Node.hsc
+++ b/Slurm/Node.hsc
@@ -9,7 +9,7 @@ module Slurm.Node
   , nodeStateMixed
   , nodeStateDrain
   , nodeStateMaint
-  , nodeStateReboot
+  , nodeStateRebootRequest
   , nodeStateRes
   , NodeInfo(..)
   , unknownNodeInfo
@@ -46,7 +46,7 @@ newtype NodeState = NodeState Word32
   NODE_STATE_RES,       \
   NODE_STATE_DRAIN,     \
   NODE_STATE_MAINT,     \
-  NODE_STATE_REBOOT
+  NODE_STATE_REBOOT_REQUEST
 
 -- sort of a hacky, assymetric, broken "equals"
 instance Eq NodeState where
diff --git a/slurm-prometheus-exporter.cabal b/slurm-prometheus-exporter.cabal
index 0fb845e..da86c2b 100644
--- a/slurm-prometheus-exporter.cabal
+++ b/slurm-prometheus-exporter.cabal
@@ -52,4 +52,4 @@ executable slurm-exporter
   if flag(pkgconfig)
     pkgconfig-depends: slurm
   else
-    extra-libraries: slurmfull slurmdb
+    extra-libraries: slurmfull