{-# LANGUAGE OverloadedStrings #-}
-- | Discover Jenkins server on the network
module Main (main) where

import           Data.Monoid ((<>), mempty) -- base
import           Data.Text (Text)           -- text
import qualified Data.Text as T             -- text
import qualified Data.Text.IO as T          -- text
import           Jenkins.Discover           -- libjenkins
import           System.Exit (exitFailure)  -- base


main :: IO ()
main = do
  -- send discover broadcast with 100ms timeout
  discoveries <- discover 100000
  case discoveries of
    -- no Jenkins responded
    [] -> exitFailure
    -- pretty print responses
    _  -> mapM_ (T.putStrLn . pretty) discoveries

-- | Pretty print Jenkins discovery responses
pretty :: Discover -> Text
pretty x = T.unwords $
  ["Jenkins", version x] ++ maybe mempty (return . between "(" ")") (server_id x) ++ ["at", url x]
 where
  between l r t = l <> t <> r