(runtime *model.Runtime)
| 264 | } |
| 265 | |
| 266 | func SyncRuntimeContainerStatus(runtime *model.Runtime) error { |
| 267 | env, err := gotenv.Unmarshal(runtime.Env) |
| 268 | if err != nil { |
| 269 | return err |
| 270 | } |
| 271 | var containerNames []string |
| 272 | if containerName, ok := env["CONTAINER_NAME"]; !ok { |
| 273 | return buserr.New("ErrContainerNameNotFound") |
| 274 | } else { |
| 275 | containerNames = append(containerNames, containerName) |
| 276 | } |
| 277 | cli, err := docker.NewClient() |
| 278 | if err != nil { |
| 279 | return err |
| 280 | } |
| 281 | defer cli.Close() |
| 282 | containers, err := cli.ListContainersByName(containerNames) |
| 283 | if err != nil { |
| 284 | return err |
| 285 | } |
| 286 | if len(containers) == 0 { |
| 287 | return buserr.WithNameAndErr("ErrContainerNotFound", containerNames[0], nil) |
| 288 | } |
| 289 | container := containers[0] |
| 290 | |
| 291 | switch container.State { |
| 292 | case "exited": |
| 293 | runtime.Status = constant.StatusError |
| 294 | case "running": |
| 295 | runtime.Status = constant.StatusRunning |
| 296 | case "paused": |
| 297 | runtime.Status = constant.StatusStopped |
| 298 | default: |
| 299 | if runtime.Status != constant.StatusBuilding { |
| 300 | runtime.Status = constant.StatusStopped |
| 301 | } |
| 302 | } |
| 303 | |
| 304 | return runtimeRepo.Save(runtime) |
| 305 | } |
| 306 | |
| 307 | func getRuntimeEnv(envStr, key string) string { |
| 308 | env, err := gotenv.Unmarshal(envStr) |
no test coverage detected