X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/446d8827ab570f6d0b8a52a5ee397102f5de488b..a80bf544154b056030ce80d23700763f52c08845:/hscan.hs?ds=sidebyside diff --git a/hscan.hs b/hscan.hs index fb9a897..2a6981d 100644 --- a/hscan.hs +++ b/hscan.hs @@ -2,11 +2,31 @@ -} +{- + +Copyright (C) 2009 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +-} + module Main (main) where import Data.List import Data.Function -import Data.Maybe(fromJust) import Monad import System import System.IO @@ -74,13 +94,12 @@ options = ] -- | Generate node file data from node objects -serializeNodes :: Cluster.NodeList -> String -> Cluster.NameList -> String -serializeNodes nl csf ktn = - let etn = map (\(idx, name) -> (idx, name ++ csf)) ktn - nodes = Container.elems nl +serializeNodes :: Node.List -> String -> String +serializeNodes nl csf = + let nodes = Container.elems nl nlines = map (\node -> - let name = (fromJust $ lookup (Node.idx node) etn) + let name = Node.name node ++ csf t_mem = (truncate $ Node.t_mem node)::Int t_dsk = (truncate $ Node.t_dsk node)::Int in @@ -93,18 +112,16 @@ serializeNodes nl csf ktn = in unlines nlines -- | Generate instance file data from instance objects -serializeInstances :: Cluster.InstanceList -> String - -> Cluster.NameList -> Cluster.NameList -> String -serializeInstances il csf ktn kti = - let etn = map (\(idx, name) -> (idx, name ++ csf)) ktn - eti = map (\(idx, name) -> (idx, name ++ csf)) kti - instances = Container.elems il +serializeInstances :: Node.List -> Instance.List + -> String -> String +serializeInstances nl il csf = + let instances = Container.elems il nlines = map (\inst -> let - iname = fromJust $ lookup (Instance.idx inst) eti - pnode = fromJust $ lookup (Instance.pnode inst) etn - snode = fromJust $ lookup (Instance.snode inst) etn + iname = Instance.name inst ++ csf + pnode = Container.nameOf nl $ Instance.pnode inst + snode = Container.nameOf nl $ Instance.snode inst in printf "%s|%d|%d|%s|%s|%s" iname (Instance.mem inst) (Instance.dsk inst) @@ -115,20 +132,20 @@ serializeInstances il csf ktn kti = in unlines nlines -- | Return a one-line summary of cluster state -printCluster :: Cluster.NodeList -> Cluster.InstanceList - -> Cluster.NameList -> Cluster.NameList +printCluster :: Node.List -> Instance.List -> String -printCluster nl il ktn kti = +printCluster nl il = let (bad_nodes, bad_instances) = Cluster.computeBadItems nl il ccv = Cluster.compCV nl nodes = Container.elems nl + insts = Container.elems il t_ram = truncate . sum . map Node.t_mem $ nodes t_dsk = truncate . sum . map Node.t_dsk $ nodes f_ram = sum . map Node.f_mem $ nodes f_dsk = sum . map Node.f_dsk $ nodes in printf "%5d %5d %5d %5d %6d %6d %6d %6d %.8f" - (length ktn) (length kti) + (length nodes) (length insts) (length bad_nodes) (length bad_instances) (t_ram::Integer) f_ram ((t_dsk::Integer) `div` 1024) (f_dsk `div` 1024) @@ -165,13 +182,13 @@ main = do Bad err -> printf "\nError: failed to load data. \ \Details:\n%s\n" err Ok x -> do - let (nl, il, csf, ktn, kti) = x - (_, fix_nl) = Loader.checkData nl il ktn kti - putStrLn $ printCluster fix_nl il ktn kti + let (nl, il, csf) = x + (_, fix_nl) = Loader.checkData nl il + putStrLn $ printCluster fix_nl il when (optShowNodes opts) $ do - putStr $ Cluster.printNodes ktn fix_nl - let ndata = serializeNodes nl csf ktn - idata = serializeInstances il csf ktn kti + putStr $ Cluster.printNodes fix_nl + let ndata = serializeNodes nl csf + idata = serializeInstances nl il csf oname = odir (fixSlash name) writeFile (oname <.> "nodes") ndata writeFile (oname <.> "instances") idata)