func main() { cfg.Init() defer cfg.Finalize() n := 0 for _, e := range cfg.Config.Engines { for i := 0; i < e.Workers; i++ { sigchan = append(sigchan, workerSentry(e, i)) n++ } } registerSignals(n) wg.Add(n) glog.Infoln("Waiting To Finish") wg.Wait() glog.Infoln("Gracefully terminated Program") }
func main() { cfg.Init() defer cfg.Finalize() for _, e := range cfg.Config.Engines { registerQueue(http.DefaultServeMux, e) engineNames = append(engineNames, e.Name) // Add to list of engines } httpHandleStripped("/files/", http.FileServer(http.Dir(*store))) httpHandleStripped("/console/", http.FileServer(http.Dir("./console"))) httpHandleStripped("/result/", http.HandlerFunc(handleResult)) httpHandleStripped(link, http.HandlerFunc(handleLink)) httpHandleStripped("/monitor/jobs/paginate", http.HandlerFunc(handleGetPagination)) httpHandleStripped("/monitor/jobs/", http.HandlerFunc(handleGetJobs)) httpHandleStripped("/monitor/queues", http.HandlerFunc(handleQueues)) glog.Infoln("Listening on", *addr) err := http.ListenAndServe(*addr, nil) if err != nil { glog.Errorln("Couldn't listen", err) } }
func main() { cfg.Init() defer cfg.Finalize() engine = NewEngineContainerWrap(*engineType, *workerIndex) // TODO: pull image before reading from the queue conn, err := cfg.NewRabbitmqConn() if err != nil { glog.Errorln("Couldn't connect to rabbitmq", err) return } defer conn.Close() ch, err := conn.Channel() if err != nil { glog.Errorln("Couldn't open rabbitmq channel", err) return } defer ch.Close() q, err := ch.QueueDeclare( *engineType, // name true, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) if err != nil { glog.Errorln("Couldn't open rabbitmq queue", *engineType, err) return } // make sure we fetch one at a time err = ch.Qos( 1, // prefetch count 0, // prefetch size false, // global ) if err != nil { glog.Errorln("Failed to set QoS to RmQ channel") return } consumer := fmt.Sprintf("pid-%d", os.Getpid()) msgs, err := ch.Consume( q.Name, // queue consumer, // consumer string false, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) if err != nil { glog.Errorln("Failed to start RmQ consumption loop") return } for i := 0; i < *joblimit || *joblimit == 0; i++ { if d, gotMsg := <-msgs; gotMsg { work(d) } else { glog.Warningln("Message channel closed. Exiting.") break } } ch.Cancel(consumer, true) }