himpy-0.5.0: System/Himpy/Recipes/Utils.hs
module System.Himpy.Recipes.Utils where
import System.Himpy.Types
import Data.List
import qualified Data.ByteString.Char8 as B
import qualified Network.Protocol.NetSNMP as Snmp
non_nul :: Char -> Bool
non_nul '\0' = False
non_nul _ = True
snmp_metric :: String -> String -> (String, Double) -> Metric
snmp_metric host suffix (ifname,metric) =
Metric host (ifname ++ " " ++ suffix) "ok" metric
snmp_metrics :: String -> String -> [(String, Double)] -> [Metric]
snmp_metrics host suffix metrics =
[snmp_metric host suffix m | m <- metrics]
snmp_last_str :: Snmp.ASNValue -> String
snmp_last_str v = Snmp.showASNValue v
snmp_last_strs :: Either String [Snmp.SnmpResult] -> [String]
snmp_last_strs (Right results) =
[show r | r <- results]
snmp_num :: Snmp.ASNValue -> Double
snmp_num (Snmp.Integer32 v) = fromIntegral v :: Double
snmp_num (Snmp.Integer64 v) = fromIntegral v :: Double
snmp_num (Snmp.Counter32 v) = fromIntegral v :: Double
snmp_num (Snmp.Counter64 v) = fromIntegral v :: Double
snmp_num (Snmp.Unsigned32 v) = fromIntegral v :: Double
snmp_num (Snmp.Unsigned64 v) = fromIntegral v :: Double
snmp_num (Snmp.Gauge32 v) = fromIntegral v :: Double
snmp_nums :: Either String [Snmp.SnmpResult] -> [Double]
snmp_nums (Right results) =
[snmp_num value | (Snmp.SnmpResult oid value) <- results]
snmp_str :: Snmp.ASNValue -> String
snmp_str (Snmp.OctetString v _) = filter non_nul $ B.unpack v
snmp_str v = "unknown: " ++ (Snmp.showASNValue v)
snmp_strs :: Either String [Snmp.SnmpResult] -> [String]
snmp_strs (Right results) =
[snmp_str value | (Snmp.SnmpResult oid value) <- results]
snmp_walk_str :: String -> String -> Snmp.RawOID -> IO ([String])
snmp_walk_str host comm oid = do
v <- Snmp.snmpWalk Snmp.snmp_version_2c (B.pack host) (B.pack comm) oid
return (snmp_strs v)
snmp_walk_num :: String -> String -> Snmp.RawOID -> IO ([Double])
snmp_walk_num host comm oid = do
v <- Snmp.snmpWalk Snmp.snmp_version_2c (B.pack host) (B.pack comm) oid
return (snmp_nums v)
snmp_walk_last_str :: String -> String -> Snmp.RawOID -> IO ([String])
snmp_walk_last_str host comm oid = do
v <- Snmp.snmpWalk Snmp.snmp_version_2c (B.pack host) (B.pack comm) oid
return (snmp_last_strs v)
snmp_get_num :: String -> String -> Snmp.RawOID -> IO (Double)
snmp_get_num host comm oid = do
v <- Snmp.snmpGet Snmp.snmp_version_2c (B.pack host) (B.pack comm) oid
let out = case v of (Right (Snmp.SnmpResult oid value)) -> snmp_num value
return out