initialise repo
[debian/orchestra.git] / src / conductor / task_response.go
1 // task_response.go
2 //
3 package main
4
5 import (
6         o "orchestra"
7 )
8
9 type TaskResponse struct {
10         id              uint64                          
11         State           ResponseState                   `json:"state"`
12         Response        map[string]string               `json:"response"`       
13 }
14
15 // Response related magic
16
17 func NewTaskResponse() (resp *TaskResponse) {
18         resp = new(TaskResponse)
19         resp.Response = make(map[string]string)
20
21         return resp
22 }
23
24 func (resp *TaskResponse) IsFinished() bool {
25         return resp.State.Finished()
26 }
27
28 func (resp *TaskResponse) DidFail() bool {
29         return resp.State.Failed()
30 }
31
32 func (resp *TaskResponse) CanRetry() bool {
33         return resp.State.CanRetry()
34 }
35
36
37 func ResponseFromProto(ptr *o.ProtoTaskResponse) (r *TaskResponse) {
38         r = new(TaskResponse)
39
40         switch (*(ptr.Status)) {
41         case o.ProtoTaskResponse_JOB_INPROGRESS:
42                 r.State = RESP_RUNNING
43         case o.ProtoTaskResponse_JOB_SUCCESS:
44                 r.State = RESP_FINISHED
45         case o.ProtoTaskResponse_JOB_FAILED:
46                 r.State = RESP_FAILED
47         case o.ProtoTaskResponse_JOB_HOST_FAILURE:
48                 r.State = RESP_FAILED_HOST_ERROR
49         case o.ProtoTaskResponse_JOB_UNKNOWN:
50                 r.State = RESP_FAILED_UNKNOWN_SCORE
51         case o.ProtoTaskResponse_JOB_UNKNOWN_FAILURE:
52                 fallthrough
53         default:
54                 r.State = RESP_FAILED_UNKNOWN
55         }
56
57         r.id = *(ptr.Id)
58         r.Response = o.MapFromProtoJobParameters(ptr.Response)
59
60         return r
61 }