himpy-0.5.0: System/Himpy/Recipes/Network.hs
module System.Himpy.Recipes.Network where
import System.Himpy.Recipes.Utils
import System.Himpy.Mib
import System.Himpy.Types
import System.Himpy.Logger
import System.Himpy.Output.Riemann
import System.Himpy.Index
import Control.Concurrent.STM.TChan (TChan)
hasMetric :: ((String,String), Maybe Double) -> Bool
hasMetric ((_,_), Nothing) = False
hasMetric ((_, _), (Just _)) = True
buildMetric ((host,service), (Just metric)) =
Metric host service "ok" metric
net_rcp :: TChan ([Metric]) -> TChan (String) -> HimpyHost -> HIndex -> IO ()
net_rcp chan logchan (Host host comm _) index = do
names <- snmp_walk_str host comm ifName
opstatus <- snmp_walk_num host comm ifOperStatus
rx <- snmp_walk_num host comm ifInOctets
tx <- snmp_walk_num host comm ifOutOctets
let bw_in_keys = map (\x -> (host, x ++ " bandwidth in")) names
let bw_out_keys = map (\x -> (host, x ++ " bandwidth out")) names
all_bw_in <- mapM (\(x,y) -> (deriveMetric index 10 x y)) (zip bw_in_keys rx)
all_bw_out <- mapM (\(x,y) -> (deriveMetric index 10 x y)) (zip bw_out_keys tx)
let bw_in = [buildMetric t | t <- (zip bw_in_keys all_bw_in), hasMetric t]
let bw_out = [buildMetric t | t <- (zip bw_out_keys all_bw_out), hasMetric t]
conn <- snmp_walk_num host comm ifConnectorPresent
adminstatus <- snmp_walk_num host comm ifAdminStatus
let mtrs = concat [snmp_metrics host "opstatus" $ zip names opstatus,
bw_in,
bw_out,
snmp_metrics host "conn" $ zip names conn,
snmp_metrics host "adminstatus" $ zip names adminstatus]
riemann_send chan mtrs