Ejemplo n.º 1
0
//Injest data from queue and ship the data off to be swallowed
func OpenWide(chewChan chan *messaging.Food, done chan interface{}, wg *sync.WaitGroup, port int) {
	var (
		msg []byte
		err error
	)

	defer close(chewChan)
	socket, err := nano.NewPullSocket()
	if nil != err {
		log.Error(err)
	}
	defer socket.Close()
	r := rep.NewReporter()
	//repeat stats with 0 if nothing is reported
	r.RegisterStatWIndex("lips", "timeout")
	r.RegisterStatWIndex("lips", "good")
	r.RegisterStatWIndex("lips", "bad")

	socket.SetRecvTimeout(1000 * time.Millisecond)
	sport := strconv.Itoa(port)
	_, err = socket.Bind("tcp://*:" + sport)
	if nil != err {
		log.Error(err)
	}

	log.Info("Connected and ready to receive data")
main:
	for {
		select {
		case <-done:
			{
				log.Info("Got done signal")
				break main
			}
		default:
			{
				msg, err = socket.Recv(0)
				if nil != err {
					r.AddStatWIndex("lips", 1, "timeout")
					//we hit timeout
				}
				if nil != msg {
					food := new(messaging.Food)
					err = food.Unmarshal(msg)
					if nil != err {
						log.Error("Invalid message: ", err)
						r.AddStatWIndex("lips", 1, "bad")
						continue
					}
					r.AddStatWIndex("lips", 1, "good")
					chewChan <- food

				}
			}
		}
	}

	log.Info("Closing lips")
	log.Flush()
	wg.Done()

}