Example #1
0
File: job.go Project: unikk/cuto
// ジョブの実行要求を受け付けて実行する。
//
// 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()
}
Example #2
0
File: main.go Project: unikk/cuto
func main() {
	console.DisplayError("CTU001I", Version)

	rc := realMain(fetchArgs())

	console.DisplayError("CTU002I", rc)
	os.Exit(rc)
}
Example #3
0
File: main.go Project: unikk/cuto
// 処理のメインルーチン
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
}
Example #4
0
File: show.go Project: unikk/cuto
// ユーティリティ実行のメインルーチン
// 成功した場合は、出力したジョブネットワークの件数を返します。
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
}