libjenkins-0.6.0: example/running-jobs-count.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Count running jobs on Jenkins instance
--
-- Usage: count-running-jobs HOST PORT USER APITOKEN
--
-- Uses an awful hack, that is inspecting the job ball color. Jenkins sets
-- it to "blue_anime", meaning "animated blue ball" if job is running
module Main (main) where
import Control.Lens -- lens
import Data.Aeson.Lens -- lens-aeson
import Data.ByteString.Lazy (ByteString) -- bytestring
import Data.String (fromString) -- bytestring
import Jenkins.Rest (Jenkins, (-?-), (-=-))
import qualified Jenkins.Rest as Jenkins -- libjenkins
import System.Environment (getArgs) -- base
import Text.Printf (printf) -- base
main :: IO ()
main = do
url:user:token:_ <- getArgs
let creds = Jenkins.defaultMaster
& Jenkins.url .~ url
& Jenkins.user .~ fromString user
& Jenkins.apiToken .~ fromString token
jobs <- Jenkins.run creds getJobs
printf "Running jobs count: %d\n" (lengthOf (Jenkins._Ok.running) jobs)
getJobs :: Jenkins ByteString
getJobs = Jenkins.get Jenkins.json ("/" -?- "tree" -=- "jobs[color]")
running :: Fold ByteString ()
running = key "jobs".values.key "color"._String.only "blue_anime"