Statistics
| Branch: | Tag: | Revision:

root / htools / Ganeti / HTools / Program / Hinfo.hs @ 2922d2c5

History | View | Annotate | Download (3.2 kB)

1 2922d2c5 René Nussbaumer
{-| Cluster information printer.
2 2922d2c5 René Nussbaumer
3 2922d2c5 René Nussbaumer
-}
4 2922d2c5 René Nussbaumer
5 2922d2c5 René Nussbaumer
{-
6 2922d2c5 René Nussbaumer
7 2922d2c5 René Nussbaumer
Copyright (C) 2012 Google Inc.
8 2922d2c5 René Nussbaumer
9 2922d2c5 René Nussbaumer
This program is free software; you can redistribute it and/or modify
10 2922d2c5 René Nussbaumer
it under the terms of the GNU General Public License as published by
11 2922d2c5 René Nussbaumer
the Free Software Foundation; either version 2 of the License, or
12 2922d2c5 René Nussbaumer
(at your option) any later version.
13 2922d2c5 René Nussbaumer
14 2922d2c5 René Nussbaumer
This program is distributed in the hope that it will be useful, but
15 2922d2c5 René Nussbaumer
WITHOUT ANY WARRANTY; without even the implied warranty of
16 2922d2c5 René Nussbaumer
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 2922d2c5 René Nussbaumer
General Public License for more details.
18 2922d2c5 René Nussbaumer
19 2922d2c5 René Nussbaumer
You should have received a copy of the GNU General Public License
20 2922d2c5 René Nussbaumer
along with this program; if not, write to the Free Software
21 2922d2c5 René Nussbaumer
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 2922d2c5 René Nussbaumer
02110-1301, USA.
23 2922d2c5 René Nussbaumer
24 2922d2c5 René Nussbaumer
-}
25 2922d2c5 René Nussbaumer
26 2922d2c5 René Nussbaumer
module Ganeti.HTools.Program.Hinfo (main, options) where
27 2922d2c5 René Nussbaumer
28 2922d2c5 René Nussbaumer
import Control.Monad
29 2922d2c5 René Nussbaumer
import Data.List
30 2922d2c5 René Nussbaumer
import System.Exit
31 2922d2c5 René Nussbaumer
import System.IO
32 2922d2c5 René Nussbaumer
33 2922d2c5 René Nussbaumer
import Text.Printf (printf)
34 2922d2c5 René Nussbaumer
35 2922d2c5 René Nussbaumer
import qualified Ganeti.HTools.Container as Container
36 2922d2c5 René Nussbaumer
import qualified Ganeti.HTools.Cluster as Cluster
37 2922d2c5 René Nussbaumer
import qualified Ganeti.HTools.Node as Node
38 2922d2c5 René Nussbaumer
import qualified Ganeti.HTools.Instance as Instance
39 2922d2c5 René Nussbaumer
40 2922d2c5 René Nussbaumer
import Ganeti.HTools.CLI
41 2922d2c5 René Nussbaumer
import Ganeti.HTools.ExtLoader
42 2922d2c5 René Nussbaumer
import Ganeti.HTools.Loader
43 2922d2c5 René Nussbaumer
44 2922d2c5 René Nussbaumer
-- | Options list and functions.
45 2922d2c5 René Nussbaumer
options :: [OptType]
46 2922d2c5 René Nussbaumer
options =
47 2922d2c5 René Nussbaumer
  [ oPrintNodes
48 2922d2c5 René Nussbaumer
  , oPrintInsts
49 2922d2c5 René Nussbaumer
  , oDataFile
50 2922d2c5 René Nussbaumer
  , oRapiMaster
51 2922d2c5 René Nussbaumer
  , oLuxiSocket
52 2922d2c5 René Nussbaumer
  , oVerbose
53 2922d2c5 René Nussbaumer
  , oQuiet
54 2922d2c5 René Nussbaumer
  , oOfflineNode
55 2922d2c5 René Nussbaumer
  , oShowVer
56 2922d2c5 René Nussbaumer
  , oShowHelp
57 2922d2c5 René Nussbaumer
  ]
58 2922d2c5 René Nussbaumer
59 2922d2c5 René Nussbaumer
-- | Do a few checks on the cluster data.
60 2922d2c5 René Nussbaumer
checkCluster :: Int -> Node.List -> Instance.List -> IO ()
61 2922d2c5 René Nussbaumer
checkCluster verbose nl il = do
62 2922d2c5 René Nussbaumer
  -- nothing to do on an empty cluster
63 2922d2c5 René Nussbaumer
  when (Container.null il) $ do
64 2922d2c5 René Nussbaumer
         printf "Cluster is empty, exiting.\n"::IO ()
65 2922d2c5 René Nussbaumer
         exitWith ExitSuccess
66 2922d2c5 René Nussbaumer
67 2922d2c5 René Nussbaumer
  -- hbal doesn't currently handle split clusters
68 2922d2c5 René Nussbaumer
  let split_insts = Cluster.findSplitInstances nl il
69 2922d2c5 René Nussbaumer
  unless (null split_insts) $ do
70 2922d2c5 René Nussbaumer
    hPutStrLn stderr "Found instances belonging to multiple node groups:"
71 2922d2c5 René Nussbaumer
    mapM_ (\i -> hPutStrLn stderr $ "  " ++ Instance.name i) split_insts
72 2922d2c5 René Nussbaumer
    hPutStrLn stderr "Aborting."
73 2922d2c5 René Nussbaumer
    exitWith $ ExitFailure 1
74 2922d2c5 René Nussbaumer
75 2922d2c5 René Nussbaumer
  printf "Loaded %d nodes, %d instances\n"
76 2922d2c5 René Nussbaumer
             (Container.size nl)
77 2922d2c5 René Nussbaumer
             (Container.size il)::IO ()
78 2922d2c5 René Nussbaumer
79 2922d2c5 René Nussbaumer
  let csf = commonSuffix nl il
80 2922d2c5 René Nussbaumer
  when (not (null csf) && verbose > 1) $
81 2922d2c5 René Nussbaumer
       printf "Note: Stripping common suffix of '%s' from names\n" csf
82 2922d2c5 René Nussbaumer
83 2922d2c5 René Nussbaumer
-- | Main function.
84 2922d2c5 René Nussbaumer
main :: Options -> [String] -> IO ()
85 2922d2c5 René Nussbaumer
main opts args = do
86 2922d2c5 René Nussbaumer
  unless (null args) $ do
87 2922d2c5 René Nussbaumer
         hPutStrLn stderr "Error: this program doesn't take any arguments."
88 2922d2c5 René Nussbaumer
         exitWith $ ExitFailure 1
89 2922d2c5 René Nussbaumer
90 2922d2c5 René Nussbaumer
  let verbose = optVerbose opts
91 2922d2c5 René Nussbaumer
      shownodes = optShowNodes opts
92 2922d2c5 René Nussbaumer
      showinsts = optShowInsts opts
93 2922d2c5 René Nussbaumer
94 2922d2c5 René Nussbaumer
  (ClusterData gl fixed_nl ilf ctags ipol) <- loadExternalData opts
95 2922d2c5 René Nussbaumer
96 2922d2c5 René Nussbaumer
  when (verbose > 1) $ do
97 2922d2c5 René Nussbaumer
       putStrLn $ "Loaded cluster tags: " ++ intercalate "," ctags
98 2922d2c5 René Nussbaumer
       putStrLn $ "Loaded cluster ipolicy: " ++ show ipol
99 2922d2c5 René Nussbaumer
       putStrLn $ "Loaded node groups: " ++ show gl
100 2922d2c5 René Nussbaumer
101 2922d2c5 René Nussbaumer
  nlf <- setNodeStatus opts fixed_nl
102 2922d2c5 René Nussbaumer
  checkCluster verbose nlf ilf
103 2922d2c5 René Nussbaumer
104 2922d2c5 René Nussbaumer
  printf "Cluster has %d node group(s)\n" (Container.size gl)::IO ()
105 2922d2c5 René Nussbaumer
106 2922d2c5 René Nussbaumer
  maybePrintInsts showinsts "Instances" (Cluster.printInsts nlf ilf)
107 2922d2c5 René Nussbaumer
108 2922d2c5 René Nussbaumer
  maybePrintNodes shownodes "Cluster" (Cluster.printNodes nlf)
109 2922d2c5 René Nussbaumer
110 2922d2c5 René Nussbaumer
  printf "Cluster coefficients:\n%s" (Cluster.printStats "  " nlf)::IO ()
111 2922d2c5 René Nussbaumer
  printf "Cluster score: %.8f\n" (Cluster.compCV nlf)