// 標準出力へメッセージコードcodeに対応したメッセージを表示する。 // // param : code メッセージコードID。 // // param : a... メッセージの書式制御文字に渡す内容。 // // return : 出力文字数。 // // return : エラー情報。 func Display(code string, a ...interface{}) (int, error) { msg := GetMessage(code, a...) log.Info(msg) for _, s := range stack_msg { if code == s { PrintStack() } } return fmt.Println(msg) }
func isEndSig(sig os.Signal) bool { log.Info("Receive Signal : ", sig) if sig == syscall.SIGHUP { // ハングアップ? config.ReloadConfig() } else if sig == syscall.SIGTERM || sig == syscall.SIGINT { // 終了シグナル return true } return false }
// readerから読み込んだ拡張ジョブ定義CSVをパースする。 // 空のカラムにはゼロ値をセットする。 // // param : reader ファイルリーダー。 // // return : 拡張ジョブ情報のパース後Map。 // // return : エラー情報。 func ParseJobEx(reader io.Reader) (map[string]*JobEx, error) { r := csv.NewReader(reader) jobExMap := make(map[string]*JobEx) for i := 1; ; i++ { record, err := r.Read() if err == io.EOF { break } else if err != nil { return nil, err } if i == 1 { // タイトル行を無視する continue } if len(record) != noSecondary && len(record) != withSecondary { log.Info("Jobex line[%d] was ignored: Irregal column count[%d].", i, len(record)) continue } name := record[nameIdx] if len(name) == 0 { log.Info("Jobex line[%d] was ignored: Empty job name.", i) continue } je := NewJobEx() je.Node = record[nodeIdx] if port, err := strconv.Atoi(record[portIdx]); err == nil { je.Port = port } je.FilePath = record[pathIdx] je.Param = record[paramIdx] je.Env = record[envIdx] je.Workspace = record[workIdx] if wrc, err := strconv.Atoi(record[wrcIdx]); err == nil { je.WrnRC = wrc } je.WrnPtn = record[wptIdx] if erc, err := strconv.Atoi(record[ercIdx]); err == nil { je.ErrRC = erc } je.ErrPtn = record[eptIdx] if tmout, err := strconv.Atoi(record[tmoutIdx]); err == nil { je.TimeoutMin = tmout } if len(record) >= withSecondary { je.SecondaryNode = record[secNodeIdx] if port, err := strconv.Atoi(record[secPortIdx]); err == nil { je.SecondaryPort = port } } jobExMap[name] = je } return jobExMap, nil }