Add data type for data collector category
authorMichele Tartara <mtartara@google.com>
Thu, 14 Mar 2013 12:39:23 +0000 (12:39 +0000)
committerMichele Tartara <mtartara@google.com>
Thu, 28 Mar 2013 13:13:06 +0000 (14:13 +0100)
Also, update the DRBD data collector to use and export it.

Signed-off-by: Michele Tartara <mtartara@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>

src/Ganeti/DataCollectors/Drbd.hs
src/Ganeti/DataCollectors/Types.hs

index 5f50793..805c7e1 100644 (file)
@@ -30,6 +30,7 @@ module Ganeti.DataCollectors.Drbd
   , dcName
   , dcVersion
   , dcFormatVersion
+  , dcCategory
   ) where
 
 
@@ -77,6 +78,10 @@ dcVersion = DCVerBuiltin
 dcFormatVersion :: Int
 dcFormatVersion = 1
 
+-- | The category of this data collector.
+dcCategory :: Maybe DCCategory
+dcCategory = Just DCStorage
+
 -- * Command line options
 
 options :: IO [OptType]
@@ -125,7 +130,7 @@ buildDRBDReport statusFile pairingFile = do
         show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n"
           ++ show contexts ++ "\n" ++ errorMessage
       A.Done _ drbdStatus -> return $ J.showJSON drbdStatus
-  buildReport dcName dcVersion dcFormatVersion jsonData
+  buildReport dcName dcVersion dcFormatVersion dcCategory jsonData
 
 -- | Main function.
 main :: Options -> [String] -> IO ()
index acd2dbc..ed18546 100644 (file)
@@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 module Ganeti.DataCollectors.Types
   ( DCReport(..)
+  , DCCategory(..)
   , DCVersion(..)
   , buildReport
   ) where
@@ -37,6 +38,16 @@ import Ganeti.Constants as C
 import Ganeti.THH
 import Ganeti.Utils (getCurrentTime)
 
+-- | The possible classes a data collector can belong to.
+data DCCategory = DCInstance | DCStorage | DCDaemon | DCHypervisor
+  deriving (Show, Eq)
+
+-- | The JSON instance for DCCategory.
+instance JSON DCCategory where
+  showJSON = showJSON . show
+  readJSON =
+    error "JSON read instance not implemented for type DCCategory"
+
 -- | Type representing the version number of a data collector.
 data DCVersion = DCVerBuiltin | DCVersion String deriving (Show, Eq)
 
@@ -52,6 +63,8 @@ $(buildObject "DCReport" "dcReport"
   , simpleField "version"        [t| DCVersion |]
   , simpleField "format_version" [t| Int |]
   , simpleField "timestamp"      [t| Integer |]
+  , optionalNullSerField $
+      simpleField "category"     [t| DCCategory |]
   , simpleField "data"           [t| JSValue |]
   ])
 
@@ -59,8 +72,9 @@ $(buildObject "DCReport" "dcReport"
 -- timestamp (rounded up to seconds).
 -- If the version is not specified, it will be set to the value indicating
 -- a builtin collector.
-buildReport :: String -> DCVersion -> Int -> JSValue -> IO DCReport
-buildReport name version format_version jsonData = do
+buildReport :: String -> DCVersion -> Int -> Maybe DCCategory -> JSValue
+            -> IO DCReport
+buildReport name version format_version category jsonData = do
   now <- getCurrentTime
   let timestamp = now * 1000000000 :: Integer
-  return $ DCReport name version format_version timestamp jsonData
+  return $ DCReport name version format_version timestamp category jsonData