// ジョブの実行要求を受け付けて実行する。 // // param : req マスタからの要求メッセージ。 // // param : conf サーバントの設定情報。 // // param : stCh スタート時刻送信用チャンネル // // return : マスタへ返信するメッセージ。 func DoJobRequest(req *message.Request, conf *config.ServantConfig, stCh chan<- string) *message.Response { job := newJobInstance(req, conf) cmd := job.createShell() err := job.run(cmd, stCh) if err != nil { console.DisplayError("CTS019E", err) job.stat = db.ABNORMAL job.detail = err.Error() } else { rcSt, rcMsg := job.judgeRC() ptnSt, ptnMsg, err := job.writeFileAndJodgeJoblog() if err != nil { console.DisplayError("CTS019E", err) job.stat = db.ABNORMAL job.detail = err.Error() } else { // RCからの結果と、出力MSGの結果を比較し、大きい方(異常の方)を採用する if rcSt > ptnSt { job.stat = rcSt job.detail = rcMsg } else { job.stat = ptnSt job.detail = ptnMsg } } console.Display("CTS011I", job.path, job.nID, job.jID, job.stat, job.rc) job.setVariableValue() } return job.createResponse() }
func main() { console.DisplayError("CTU001I", Version) rc := realMain(fetchArgs()) console.DisplayError("CTU002I", rc) os.Exit(rc) }
// 処理のメインルーチン func realMain(args *arguments) int { if args.v { // バージョン情報表示 showVersion() return rc_OK } if args.help { // Usage表示 showUsage() return rc_OK } // 設定ファイル名の取得 if len(args.config) == 0 { args.config = defaultConfig } if err := config.Load(args.config); err != nil { // 設定ファイル読み込み。 console.DisplayError("CTU006E", args.config) return rc_PARMERR } if len(args.from) == 0 && len(args.to) == 0 { // From-to指定無しの場合は、現在のCPU日付のみを対象とする now := utctime.Now() if args.isUTC { args.from = now.Format(utctime.Date8Num) args.to = args.from } else { args.from = now.FormatLocaltime(utctime.Date8Num) args.to = args.from } } from, to, err := parseFromTo(args.from, args.to, args.isUTC) if err != nil { console.DisplayError("CTU003E", err) showUsage() return rc_PARMERR } status, err := getStatusType(args.status) // status取得 if err != nil { console.DisplayError("CTU003E", fmt.Sprintf("Invalid status option. [%v]", args.status)) showUsage() return rc_PARMERR } gen := getSeparatorType(args.format) // 出力形態 if gen == nil { console.DisplayError("CTU003E", fmt.Sprintf("Invalid [format] format.[%v]", args.format)) showUsage() return rc_PARMERR } param := NewShowParam(args.nid, args.jobnet, from, to, status, gen) rc, err := param.Run(config.DB.DBFile, args.isUTC) if err != nil { console.DisplayError("CTU004E", err) return rc_ERROR } else if rc == 0 { // 出力件数が0 return rc_NOTHING } return rc_OK }
// ユーティリティ実行のメインルーチン // 成功した場合は、出力したジョブネットワークの件数を返します。 func (s *ShowParam) Run(db_name string, isOutputUTC bool) (int, error) { conn, err := db.Open(db_name) if err != nil { return 0, err } defer conn.Close() s.conn = conn // ジョブネットワーク情報の取得 netResults, err := s.getJobnetworkList() if err != nil { return 0, err } else if len(netResults) == 0 { return 0, nil } // 取得したジョブネットワークインスタンス毎に、ジョブを出力する。 var out gen.OutputRoot for _, jobnet := range netResults { oneJobnet := &oneJobnetwork{jobnet: jobnet} err := oneJobnet.getJobList(s.conn) if err != nil { // ジョブネットワーク内のジョブ取得に失敗したが、ジョブネットワークだけでも出力する。 console.DisplayError("CTU005W", oneJobnet.jobnet.ID, err) } out.Jobnetworks = append(out.Jobnetworks, oneJobnet.setOutputStructure(isOutputUTC)) } // ジェネレーターで出力メッセージ作成。 msg, err := s.gen.Generate(&out) if err != nil { return 0, err } fmt.Fprint(os.Stdout, msg) return len(netResults), nil }