github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/message/request.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 honda 3 4 package message 5 6 import ( 7 "encoding/json" 8 "fmt" 9 ) 10 11 // リクエストメッセージ送信元masterのバージョン 12 var MasterVersion string 13 14 // 要求メッセージ。 15 type Request struct { 16 Type string `json:"type"` 17 Version string `json:"version"` 18 NID int `json:"nid"` 19 JID string `json:"jid"` 20 Path string `json:"path"` 21 Param string `json:"param"` 22 Env string `json:"env"` 23 Workspace string `json:"workspace"` 24 WarnRC int `json:"warnrc"` 25 WarnStr string `json:"warnstr"` 26 ErrRC int `json:"errrc"` 27 ErrStr string `json:"errstr"` 28 Timeout int `json:"timeout"` 29 } 30 31 const requestMessageType = "request" 32 const DockerTag = "<docker>" 33 34 // ジョブ実行要求JSONメッセージをパースし、Requestオブジェクトのメンバをセットする。 35 // 36 // param : message 受信メッセージ文字列。 37 func (r *Request) ParseJSON(message string) error { 38 byteMessage := []byte(message) 39 40 err := json.Unmarshal(byteMessage, r) 41 42 if err != nil { 43 return err 44 } 45 46 if r.Type != requestMessageType { 47 return fmt.Errorf("Invalid message type.") 48 } 49 50 return nil 51 } 52 53 // Requestオブジェクトの値を元に、ジョブ実行要求JSONメッセージを生成する 54 // 55 // return : JSONメッセージフォーマットの文字列。 56 func (r Request) GenerateJSON() (string, error) { 57 r.Type = requestMessageType 58 r.Version = MasterVersion 59 byteMessage, err := json.Marshal(r) 60 if err != nil { 61 return ``, err 62 } 63 64 return string(byteMessage), nil 65 } 66 67 // masterで利用可能な変数を展開する。 68 func (r *Request) ExpandMasterVars() error { 69 newPath, err := ExpandStringVars(r.Path, plcMaster, kndEnv) 70 if err != nil { 71 return err 72 } 73 newParam, err := ExpandStringVars(r.Param, plcMaster, kndSys, kndEnv, kndJob) 74 if err != nil { 75 return err 76 } 77 newEnv, err := ExpandStringVars(r.Env, plcMaster, kndSys, kndEnv, kndJob) 78 if err != nil { 79 return err 80 } 81 newWork, err := ExpandStringVars(r.Workspace, plcMaster, kndEnv) 82 if err != nil { 83 return err 84 } 85 86 // 全て展開成功した場合のみメッセージの内容を書き換えする 87 r.Path = newPath 88 r.Param = newParam 89 r.Env = newEnv 90 r.Workspace = newWork 91 return nil 92 } 93 94 // servantで利用可能な変数を展開する。 95 func (r *Request) ExpandServantVars() error { 96 newPath, err := ExpandStringVars(r.Path, plcServant, kndSys, kndEnv) 97 if err != nil { 98 return err 99 } 100 newParam, err := ExpandStringVars(r.Param, plcServant, kndSys, kndEnv, kndTime) 101 if err != nil { 102 return err 103 } 104 newEnv, err := ExpandStringVars(r.Env, plcServant, kndSys, kndEnv, kndTime) 105 if err != nil { 106 return err 107 } 108 newWork, err := ExpandStringVars(r.Workspace, plcServant, kndSys, kndEnv) 109 if err != nil { 110 return err 111 } 112 113 // 全て展開成功した場合のみメッセージの内容を書き換えする 114 r.Path = newPath 115 r.Param = newParam 116 r.Env = newEnv 117 r.Workspace = newWork 118 return nil 119 }