packages feed

Holumbus-Storage-0.1.0: Programs/StorageNodeDaemon/StorageNodeDaemon.hs

module Main(main) where

import           Holumbus.Common.Logging
import           Holumbus.Common.Utils
import           Holumbus.Network.PortRegistry.PortRegistryPort
import Holumbus.FileSystem.FileSystem
import qualified Holumbus.Console.ServerConsole as Console
import           System.Environment (getArgs)
import           System.Log.Logger
import           System.Exit

version :: String
version = "Holumbus-StorageNodeDaemon 0.1"

prompt :: String
prompt = "# StorageNodeDaemon > "

localLogger :: String
localLogger = "Holumbus.StorageNodeDaemon"

pUsage :: IO ()
pUsage = do
  putStrLn "Usage: StorageNodeDaemon ConsolePort Logfile"

params :: IO [String]
params = do
  args <- getArgs
  if length args /= 2 then do
    errorM localLogger "Wrong argument count"
    pUsage
    exitFailure
    else
      return args

main :: IO ()
main
  = handleAll (\e -> errorM localLogger $ "EXCEPTION: " ++ show e) $ do
    putStrLn ("Starting " ++ version)
    (s_cport:logfile:[]) <- params
    initializeFileLogging logfile [(localLogger, INFO),("Holumbus.Network.DoWithServer",INFO),("measure",ERROR),("Holumbus",ERROR),("Holumbus.Network",ERROR)]
    fs <- initialize
    
    Console.startServerConsole createConsole fs (read s_cport) prompt
    
initialize :: IO (FileSystem)
initialize = do
  p <- newPortRegistryFromXmlFile "/tmp/registry.xml"      
  setPortRegistry p
  fs <- mkFileSystemNode defaultFSNodeConfig
  return fs

    
createConsole :: Console.ConsoleData FileSystem
createConsole = Console.initializeConsole
{-  Console.addConsoleCommand "register"   hdlRegister   "registers a port manually" $
  Console.addConsoleCommand "unregister" hdlUnregister "unregisters a port manually" $
  Console.addConsoleCommand "lookup"   hdlLookup     "gets the socket id for a port" $
  Console.addConsoleCommand "ports"    hdlGetPorts   "lists all ports" $ 
  Console.addConsoleCommand "version"    hdlVersion    "prints the version" $
  Console.initializeConsole -}
      

{- hdlRegister :: FileSystem -> [String] -> IO String
hdlRegister prd opts
  = do
    handleAll (\_ -> return "usage: register <streamname> <hostname> <socketId>") $
      do
      let sn = head opts
      let hn = head $ tail opts
      let po = fromInteger . read . head . tail . tail $ opts
      registerPort sn (SocketId hn po) prd
      return "Register succesfull"


hdlUnregister :: FileSystem -> [String] -> IO String
hdlUnregister prd opts
  = handleAll (\_ -> return "usage: unregister <streamname>") $
      do
      let sn = head opts
      unregisterPort sn prd
      return "Unregister succesfull"


hdlLookup :: FileSystem -> [String] -> IO String
hdlLookup prd opts
  = handleAll (\_ -> return "usage: lookup <streamname>") $
      do
      let sn = head opts
      soid <- lookupPort sn prd
      return . show $ soid


hdlGetPorts :: FileSystem -> [String] -> IO String
hdlGetPorts prd _
  = do
    ls <- getPorts prd
    return . show $ ls


hdlVersion :: FileSystem -> [String] -> IO String
hdlVersion _ _
  = return version -}

-- ------------------------------------------------------------