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)