Beispiel #1
0
// ジョブネットワークレコードを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
}
Beispiel #2
0
// ホスト名がhost、ポート番号がportのservantへ接続し、ジョブ実行要求を送信する。
// servantから返信されたジョブ実行結果を関数外へ返す。
//
// param : host ホスト名。
//
// param : port ポート番号。
//
// param : req リクエストメッセージ。
//
// return : 返信メッセージ。
//
// return : エラー情報。
func SendRequest(host string, port int, req string, stCh chan<- string) (string, error) {
	const bufSize = 1024
	timeout := time.Duration(config.Job.ConnectionTimeoutSec) * time.Second

	addr := fmt.Sprintf("%s:%d", host, port)
	conn, err := net.DialTimeout("tcp", addr, timeout)
	if err != nil {
		return ``, err
	}
	defer conn.Close()

	log.Debug(req)
	_, err = conn.Write([]byte(req + MsgEnd))
	if err != nil {
		return ``, err
	}

	scanner := bufio.NewScanner(conn)
	var res *response

WAITRESPONSE:
	for {
		select {
		case res = <-readResponse(scanner):
			if res.err != nil {
				return ``, res.err
			}
			log.Debug(res.msg)
			if res.msg == message.HEARTBEAT {
				// ハートビートメッセージの場合はバッファサイズを初期化する。
				continue
			} else if strings.HasPrefix(res.msg, message.ST_HEADER) {
				st := res.msg[len(message.ST_HEADER):]
				stCh <- st
				continue
			}

			break WAITRESPONSE
		case <-time.After(timeout):
			return ``, fmt.Errorf("Connetion timeout.")
		}
	}

	return res.msg, nil
}
Beispiel #3
0
// ハートビートを開始する。
func (s *Session) startHeartbeat() {
	s.endHeartbeatCh = make(chan endSig, 1)
	go func() {
		t := time.Duration(config.Servant.Job.HeartbeatSpanSec) * time.Second
		for {
			select {
			case <-s.endHeartbeatCh:
				return
			case <-time.After(t):
				log.Debug("send heatbeat...")
				s.Conn.Write([]byte(message.HEARTBEAT + MsgEnd))
			}
		}
	}()
}