From da28218d808c2f15b94e810e3f6ab5bdf5eab897 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Tue, 25 Sep 2012 16:49:09 +0200
Subject: [PATCH] Replace a big tuple with a custom data type

This will make it easier to add new parameters.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
---
 htools/Ganeti/HTools/Program/Hinfo.hs | 32 ++++++++++++++++++---------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/htools/Ganeti/HTools/Program/Hinfo.hs b/htools/Ganeti/HTools/Program/Hinfo.hs
index 163c7f812..41a1ef211 100644
--- a/htools/Ganeti/HTools/Program/Hinfo.hs
+++ b/htools/Ganeti/HTools/Program/Hinfo.hs
@@ -59,11 +59,20 @@ options =
   , oShowHelp
   ]
 
+-- | Group information data-type.
+data GroupInfo = GroupInfo { giName      :: String
+                           , giNodeCount :: Int
+                           , giInstCount :: Int
+                           , giBadNodes  :: Int
+                           , giBadInsts  :: Int
+                           , giN1Status  :: Bool
+                           }
+
 -- | Node group statistics.
 calcGroupInfo :: Group.Group
               -> Node.List
               -> Instance.List
-              -> (String, (Int, Int), (Int, Int), Bool)
+              -> GroupInfo
 calcGroupInfo g nl il =
   let nl_size                    = Container.size nl
       il_size                    = Container.size il
@@ -71,17 +80,18 @@ calcGroupInfo g nl il =
       bn_size                    = length bad_nodes
       bi_size                    = length bad_instances
       n1h                        = bn_size == 0
-  in (Group.name g, (nl_size, il_size), (bn_size, bi_size), n1h)
+  in GroupInfo (Group.name g) nl_size il_size bn_size bi_size n1h
 
 -- | Helper to format one group row result.
-groupRowFormatHelper :: (String, (Int, Int), (Int, Int), Bool) -> [String]
-groupRowFormatHelper (gname, (nl_size, il_size), (bn_size, bi_size), n1h) =
-  [ gname
-  , printf "%d" nl_size
-  , printf "%d" il_size
-  , printf "%d" bn_size
-  , printf "%d" bi_size
-  , show n1h ]
+groupRowFormatHelper :: GroupInfo -> [String]
+groupRowFormatHelper gi =
+  [ giName gi
+  , printf "%d" $ giNodeCount gi
+  , printf "%d" $ giInstCount gi
+  , printf "%d" $ giBadNodes gi
+  , printf "%d" $ giBadInsts gi
+  , show $ giN1Status gi
+  ]
 
 -- | Print node group information.
 showGroupInfo :: Int -> Group.List -> Node.List -> Instance.List -> IO ()
@@ -89,7 +99,7 @@ showGroupInfo verbose gl nl il = do
   let cgrs   = map (\(gdx, (gnl, gil)) ->
                  calcGroupInfo (Container.find gdx gl) gnl gil) $
                  Cluster.splitCluster nl il
-      cn1h   = all (\(_, _, _, n1h) -> n1h) cgrs
+      cn1h   = all giN1Status cgrs
       grs    = map groupRowFormatHelper cgrs
       header = ["Group", "Nodes", "Instances", "Bad_Nodes", "Bad_Instances",
                 "N+1"]
-- 
GitLab