packages feed

libjenkins-0.8.2: example/running-jobs-count.hs

{-# LANGUAGE OverloadedStrings #-}
-- | Count running jobs on Jenkins instance
--
-- 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           Env                               -- envparse
import           Jenkins.Rest (Jenkins, (-?-), (-=-))
import qualified Jenkins.Rest as Jenkins           -- libjenkins
import           Text.Printf (printf)              -- base


main :: IO ()
main = do
  conf <- envConf
  jobs <- Jenkins.run conf getJobs
  printf "Running jobs count: %d\n" (lengthOf (_Right.running) jobs)

envConf :: IO Jenkins.Master
envConf = Env.parse (desc "Get running jobs count") $
  Jenkins.Master <$> var str "JENKINS_URL"       (help "Jenkins URL")
                 <*> var str "JENKINS_USERNAME"  (help "Jenkins username")
                 <*> var str "JENKINS_API_TOKEN" (help "Jenkins API token")

getJobs :: Jenkins ByteString
getJobs = Jenkins.get Jenkins.json ("" -?- "tree" -=- "jobs[color]")

running :: Fold ByteString ()
running = key "jobs".values.key "color"._String.only "blue_anime"