github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/Concourse/BuildEvents.elm (about)

     1  module Concourse.BuildEvents exposing
     2      ( dateFromSeconds
     3      , decodeBuildEvent
     4      , decodeBuildEventEnvelope
     5      , decodeErrorEvent
     6      , decodeFinishResource
     7      , decodeOrigin
     8      )
     9  
    10  import Build.StepTree.Models exposing (BuildEvent(..), BuildEventEnvelope, Origin)
    11  import Concourse
    12  import Concourse.BuildStatus
    13  import Dict
    14  import Json.Decode
    15  import Time
    16  
    17  
    18  decodeBuildEventEnvelope : Json.Decode.Decoder BuildEventEnvelope
    19  decodeBuildEventEnvelope =
    20      let
    21          typeDecoder =
    22              Json.Decode.field
    23                  "type"
    24                  Json.Decode.string
    25  
    26          urlDecoder =
    27              Json.Decode.at [ "target", "url" ] Json.Decode.string
    28  
    29          dataDecoder =
    30              typeDecoder
    31                  |> Json.Decode.andThen
    32                      (\t ->
    33                          case t of
    34                              "end" ->
    35                                  Json.Decode.succeed End
    36  
    37                              "open" ->
    38                                  Json.Decode.succeed Opened
    39  
    40                              "error" ->
    41                                  Json.Decode.succeed NetworkError
    42  
    43                              _ ->
    44                                  Json.Decode.field "data" Json.Decode.string
    45                                      |> Json.Decode.andThen
    46                                          (\rawEvent ->
    47                                              case
    48                                                  Json.Decode.decodeString
    49                                                      decodeBuildEvent
    50                                                      rawEvent
    51                                              of
    52                                                  Ok event ->
    53                                                      Json.Decode.succeed event
    54  
    55                                                  Err err ->
    56                                                      Json.Decode.fail <|
    57                                                          Json.Decode.errorToString err
    58                                          )
    59                      )
    60      in
    61      Json.Decode.map2 BuildEventEnvelope
    62          dataDecoder
    63          urlDecoder
    64  
    65  
    66  decodeBuildEvent : Json.Decode.Decoder BuildEvent
    67  decodeBuildEvent =
    68      Json.Decode.field "event" Json.Decode.string
    69          |> Json.Decode.andThen
    70              (\eventType ->
    71                  case eventType of
    72                      "status" ->
    73                          Json.Decode.field
    74                              "data"
    75                              (Json.Decode.map2 BuildStatus
    76                                  (Json.Decode.field "status" Concourse.BuildStatus.decodeBuildStatus)
    77                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
    78                              )
    79  
    80                      "log" ->
    81                          Json.Decode.field
    82                              "data"
    83                              (Json.Decode.map3 Log
    84                                  (Json.Decode.field "origin" <| Json.Decode.lazy (\_ -> decodeOrigin))
    85                                  (Json.Decode.field "payload" Json.Decode.string)
    86                                  (Json.Decode.maybe <| Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
    87                              )
    88  
    89                      "selected-worker" ->
    90                          Json.Decode.field
    91                              "data"
    92                              (Json.Decode.map3 SelectedWorker
    93                                  (Json.Decode.field "origin" <| Json.Decode.lazy (\_ -> decodeOrigin))
    94                                  (Json.Decode.field "selected_worker" Json.Decode.string)
    95                                  (Json.Decode.maybe <| Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
    96                              )
    97  
    98                      "error" ->
    99                          Json.Decode.field "data" decodeErrorEvent
   100  
   101                      "initialize-task" ->
   102                          Json.Decode.field
   103                              "data"
   104                              (Json.Decode.map2 InitializeTask
   105                                  (Json.Decode.field "origin" <| Json.Decode.lazy (\_ -> decodeOrigin))
   106                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   107                              )
   108  
   109                      "start-task" ->
   110                          Json.Decode.field
   111                              "data"
   112                              (Json.Decode.map2 StartTask
   113                                  (Json.Decode.field "origin" decodeOrigin)
   114                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   115                              )
   116  
   117                      "finish-task" ->
   118                          Json.Decode.field
   119                              "data"
   120                              (Json.Decode.map3 FinishTask
   121                                  (Json.Decode.field "origin" decodeOrigin)
   122                                  (Json.Decode.field "exit_status" Json.Decode.int)
   123                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   124                              )
   125  
   126                      "initialize" ->
   127                          Json.Decode.field
   128                              "data"
   129                              (Json.Decode.map2 Initialize
   130                                  (Json.Decode.field "origin" <| Json.Decode.lazy (\_ -> decodeOrigin))
   131                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   132                              )
   133  
   134                      "start" ->
   135                          Json.Decode.field
   136                              "data"
   137                              (Json.Decode.map2 Start
   138                                  (Json.Decode.field "origin" decodeOrigin)
   139                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   140                              )
   141  
   142                      "finish" ->
   143                          Json.Decode.field
   144                              "data"
   145                              (Json.Decode.map3 Finish
   146                                  (Json.Decode.field "origin" decodeOrigin)
   147                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   148                                  (Json.Decode.field "succeeded" Json.Decode.bool)
   149                              )
   150  
   151                      "initialize-get" ->
   152                          Json.Decode.field
   153                              "data"
   154                              (Json.Decode.map2 InitializeGet
   155                                  (Json.Decode.field "origin" decodeOrigin)
   156                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   157                              )
   158  
   159                      "start-get" ->
   160                          Json.Decode.field
   161                              "data"
   162                              (Json.Decode.map2 StartGet
   163                                  (Json.Decode.field "origin" decodeOrigin)
   164                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   165                              )
   166  
   167                      "finish-get" ->
   168                          Json.Decode.field "data" (decodeFinishResource FinishGet)
   169  
   170                      "initialize-put" ->
   171                          Json.Decode.field
   172                              "data"
   173                              (Json.Decode.map2 InitializePut
   174                                  (Json.Decode.field "origin" decodeOrigin)
   175                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   176                              )
   177  
   178                      "start-put" ->
   179                          Json.Decode.field
   180                              "data"
   181                              (Json.Decode.map2 StartPut
   182                                  (Json.Decode.field "origin" decodeOrigin)
   183                                  (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   184                              )
   185  
   186                      "finish-put" ->
   187                          Json.Decode.field "data" (decodeFinishResource FinishPut)
   188  
   189                      "set-pipeline-changed" ->
   190                          Json.Decode.field
   191                              "data"
   192                              (Json.Decode.map2 SetPipelineChanged
   193                                  (Json.Decode.field "origin" decodeOrigin)
   194                                  (Json.Decode.field "changed" Json.Decode.bool)
   195                              )
   196  
   197                      "image-check" ->
   198                          Json.Decode.field "data"
   199                              (Json.Decode.map2 ImageCheck
   200                                  (Json.Decode.field "origin" decodeOrigin)
   201                                  (Json.Decode.field "plan" Concourse.decodeBuildPlan)
   202                              )
   203  
   204                      "image-get" ->
   205                          Json.Decode.field "data"
   206                              (Json.Decode.map2 ImageGet
   207                                  (Json.Decode.field "origin" decodeOrigin)
   208                                  (Json.Decode.field "plan" Concourse.decodeBuildPlan)
   209                              )
   210  
   211                      unknown ->
   212                          Json.Decode.fail ("unknown event type: " ++ unknown)
   213              )
   214  
   215  
   216  dateFromSeconds : Int -> Time.Posix
   217  dateFromSeconds =
   218      Time.millisToPosix << (*) 1000
   219  
   220  
   221  decodeFinishResource :
   222      (Origin
   223       -> Int
   224       -> Concourse.Version
   225       -> Concourse.Metadata
   226       -> Maybe Time.Posix
   227       -> a
   228      )
   229      -> Json.Decode.Decoder a
   230  decodeFinishResource cons =
   231      Json.Decode.map5 cons
   232          (Json.Decode.field "origin" decodeOrigin)
   233          (Json.Decode.field "exit_status" Json.Decode.int)
   234          (Json.Decode.map
   235              (Maybe.withDefault Dict.empty)
   236              << Json.Decode.maybe
   237           <|
   238              Json.Decode.field "version" Concourse.decodeVersion
   239          )
   240          (Json.Decode.map
   241              (Maybe.withDefault [])
   242              << Json.Decode.maybe
   243           <|
   244              Json.Decode.field "metadata" Concourse.decodeMetadata
   245          )
   246          (Json.Decode.maybe <| Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   247  
   248  
   249  decodeErrorEvent : Json.Decode.Decoder BuildEvent
   250  decodeErrorEvent =
   251      Json.Decode.map3
   252          Error
   253          (Json.Decode.field "origin" decodeOrigin)
   254          (Json.Decode.field "message" Json.Decode.string)
   255          (Json.Decode.field "time" <| Json.Decode.map dateFromSeconds Json.Decode.int)
   256  
   257  
   258  decodeOrigin : Json.Decode.Decoder Origin
   259  decodeOrigin =
   260      Json.Decode.map2 Origin
   261          (Json.Decode.map (Maybe.withDefault "") << Json.Decode.maybe <| Json.Decode.field "source" Json.Decode.string)
   262          (Json.Decode.field "id" Json.Decode.string)