module Buffet.Parse.ParseHealthCheck
  ( get
  ) where

import qualified Buffet.Toolbox.DockerTools as DockerTools
import qualified Data.Maybe as Maybe
import qualified Data.Text as T
import qualified Language.Docker as Docker
import Prelude (Maybe(Just, Nothing), ($), (.), reverse)

get :: Docker.Dockerfile -> Maybe T.Text
get :: Dockerfile -> Maybe Text
get Dockerfile
stage =
  case Dockerfile -> Maybe (Check Text)
lastHealthcheck Dockerfile
stage of
    Just (Docker.Check CheckArgs Text
checkArguments) ->
      Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text)
-> (Arguments Text -> Text) -> Arguments Text -> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Arguments Text -> Text
DockerTools.printArguments (Arguments Text -> Maybe Text) -> Arguments Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ CheckArgs Text -> Arguments Text
forall args. CheckArgs args -> Arguments args
Docker.checkCommand CheckArgs Text
checkArguments
    Maybe (Check Text)
_ -> Maybe Text
forall a. Maybe a
Nothing

lastHealthcheck :: Docker.Dockerfile -> Maybe (Docker.Check T.Text)
lastHealthcheck :: Dockerfile -> Maybe (Check Text)
lastHealthcheck = [Check Text] -> Maybe (Check Text)
forall a. [a] -> Maybe a
Maybe.listToMaybe ([Check Text] -> Maybe (Check Text))
-> (Dockerfile -> [Check Text]) -> Dockerfile -> Maybe (Check Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Check Text] -> [Check Text]
forall a. [a] -> [a]
reverse ([Check Text] -> [Check Text])
-> (Dockerfile -> [Check Text]) -> Dockerfile -> [Check Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (InstructionPos Text -> Maybe (Check Text))
-> Dockerfile -> [Check Text]
forall a b. (a -> Maybe b) -> [a] -> [b]
Maybe.mapMaybe InstructionPos Text -> Maybe (Check Text)
forall args. InstructionPos args -> Maybe (Check args)
maybeHealthcheck
  where
    maybeHealthcheck :: InstructionPos args -> Maybe (Check args)
maybeHealthcheck (Docker.InstructionPos (Docker.Healthcheck Check args
check) Text
_ Linenumber
_) =
      Check args -> Maybe (Check args)
forall a. a -> Maybe a
Just Check args
check
    maybeHealthcheck InstructionPos args
_ = Maybe (Check args)
forall a. Maybe a
Nothing