func TestUpdateJob_ジョブの更新処理(t *testing.T) { conn, err := db.Open(db_name) if err != nil { t.Fatal(err) } defer conn.Close() jobres := &db.JobResult{ ID: 122, JobId: "JOB002", JobName: "XYZ.vbs", StartDate: utctime.Now().String(), Status: db.RUNNING, Node: "TestNode02", Port: 9999, } err = InsertJob(conn, jobres, &mutex) if err != nil { t.Fatal("ジョブテーブルへの登録に失敗しました。 - ", err) } jobres.Status = db.ABNORMAL jobres.Variable = "VAR" jobres.EndDate = utctime.Now().String() jobres.Detail = "Attention!!" jobres.Rc = 4 err = UpdateJob(conn, jobres, &mutex) if err != nil { t.Error("ジョブテーブルの更新に失敗しました。 - ", err) } }
// ジョブネットワークレコードをInsertする。 func (r *ResultMap) insertJobNetwork() error { var isCommit bool tx, err := r.conn.GetDbMap().Begin() if err != nil { return err } defer func() { if !isCommit { tx.Rollback() } }() now := utctime.Now().String() r.JobnetResult.CreateDate = now r.JobnetResult.UpdateDate = now err = tx.Insert(r.JobnetResult) if err != nil { return err } if err = tx.Commit(); err != nil { return err } log.Debug(fmt.Sprintf("networkId[%v]", r.JobnetResult.ID)) isCommit = true return nil }
// JOBテーブルへUPDATEする。 // // param - conn DBコネクション // // param - job JOBレコード構造体ポインタ func UpdateJob(conn db.IConnection, job *db.JobResult, mutex *sync.Mutex) error { mutex.Lock() defer mutex.Unlock() var isCommit bool tx, err := conn.GetDbMap().Begin() if err != nil { return err } defer func() { if !isCommit { tx.Rollback() } }() job.UpdateDate = utctime.Now().String() if _, err = tx.Update(job); err != nil { return err } if err = tx.Commit(); err != nil { return err } isCommit = true return nil }
// 処理のメインルーチン 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 }
// ジョブネットワークの開始状態を記録する。 // // param : jobnetName ジョブネットワーク名。 // // param : dbname データベース名。 // // return : ジョブ実行結果を保持する構造体ポインタ。 // // return : error func StartJobNetwork(jobnetName string, dbname string) (*ResultMap, error) { jn := db.NewJobNetworkResult(jobnetName, utctime.Now().String(), db.RUNNING) conn, err := db.Open(dbname) if err != nil { return nil, err } resMap := &ResultMap{jn, make(JobMap), conn} if err := resMap.insertJobNetwork(); err != nil { return nil, err } return resMap, nil }
func TestNewJobNetworkResult_初期化できる(t *testing.T) { name := "ABC" start := utctime.Now().String() status := NORMAL net := NewJobNetworkResult(name, start, status) if net.JobnetWork != name { t.Errorf("ジョブネット名を[%v]で初期化しましたが、[%v]が返りました。", name, net.JobnetWork) } if net.StartDate != start { t.Errorf("開始日時を[%v]で初期化しましたが、[%v]が返りました。", start, net.StartDate) } if net.Status != status { t.Errorf("ジョブネット名を[%v]で初期化しましたが、[%v]が返りました。", status, net.Status) } }
func TestUpdateJob_ジョブの登録前に更新(t *testing.T) { conn, err := db.Open(dummy_db) if err != nil { t.Fatal(err) } defer conn.Close() jobres := &db.JobResult{ ID: 132, JobId: "JOB002", JobName: "XYZ.vbs", StartDate: utctime.Now().String(), Status: db.RUNNING, Node: "TestNode02", Port: 9999, } err = UpdateJob(conn, jobres, &mutex) if err == nil { t.Error("予定していた失敗が返りませんでした。 - ") } }
func TestInsertJob_ジョブの新規登録失敗(t *testing.T) { conn, err := db.Open(dummy_db) if err != nil { t.Fatal(err) } defer conn.Close() err = InsertJob(conn, &db.JobResult{ ID: 131, JobId: "JOB001", JobName: "abcjob.bat", StartDate: utctime.Now().String(), Status: db.RUNNING, Node: "TestNode01", Port: 9999, }, &mutex) if err == nil { t.Error("予定していた失敗が返りませんでした。 - ") } }
func TestInsertJob_ジョブの新規登録処理(t *testing.T) { conn, err := db.Open(db_name) if err != nil { t.Fatal(err) } defer conn.Close() err = InsertJob(conn, &db.JobResult{ ID: 121, JobId: "JOB001", JobName: "abcjob.bat", StartDate: utctime.Now().String(), Status: db.RUNNING, Node: "TestNode01", Port: 9999, }, &mutex) if err != nil { t.Error("ジョブテーブルへの登録に失敗しました。 - ", err) } }
// ジョブネットワークレコードをUpdateする。 func (r *ResultMap) updateJobNetwork() error { var isCommit bool tx, err := r.conn.GetDbMap().Begin() if err != nil { return err } defer func() { if !isCommit { tx.Rollback() } }() r.JobnetResult.UpdateDate = utctime.Now().String() if _, err = tx.Update(r.JobnetResult); err != nil { return err } if err = tx.Commit(); err != nil { return err } isCommit = true return nil }
// ネットワーク終了時に結果情報を設定する。同時にDBコネクションも切断する。 // // param : status ジョブネットワークのステータス。 // // param : detail ジョブネットワークに記録する詳細メッセージ。 // // return : error func (r *ResultMap) EndJobNetwork(status int, detail string) error { if r.conn == nil { return fmt.Errorf("Can't access DB file.") } defer r.conn.Close() if r.JobnetResult == nil { return fmt.Errorf("Invalid Jobnetwork info.") } r.JobnetResult.EndDate = utctime.Now().String() r.JobnetResult.Status = status r.JobnetResult.Detail = detail for _, jobresult := range r.Jobresults { if r.JobnetResult.Status < jobresult.Status { r.JobnetResult.Status = jobresult.Status } } if err := r.updateJobNetwork(); err != nil { return err } return nil }