Exemplo n.º 1
0
Arquivo: task.go Projeto: GoToolz/Task
func run(messages []sqs.Message) {

	numMessages := len(messages)
	log.Debugln("worker: Received", numMessages, " tasks")

	var wg sync.WaitGroup
	wg.Add(numMessages)
	for i := range messages {
		go func(m *sqs.Message) {
			// launch goroutine
			defer func() {
				if err := recover(); err != nil {

					trace := make([]byte, 2048)
					runtime.Stack(trace, true)

					log.Criticalln("worker:", err, string(trace))
				}
				wg.Done()
			}()

			if err := handleMessage(m); err != nil {
				log.Errorln("worker:", err)
			}
		}(&messages[i])
	}

	wg.Wait()
}
Exemplo n.º 2
0
Arquivo: task.go Projeto: GoToolz/Task
// Task runner daemon loop
func taskRunner() {

	time.Sleep(time.Second * 10)
	log.Debugln("worker: Start polling")

	for {
		resp, err := queue.ReceiveMessage(batchSize)
		if err != nil {
			log.Errorln(err)
			continue
		}

		messages := resp.Messages

		if len(messages) > 0 {
			run(messages)
		} else {
			time.Sleep(time.Millisecond * 500)
		}
	}

	log.Debugln("worker: Leaving polling")
}
Exemplo n.º 3
0
Arquivo: task.go Projeto: GoToolz/Task
func handleMessage(m *sqs.Message) error {

	ts := new(TaskSchedule)
	if err := json.Unmarshal([]byte(m.Body), ts); err != nil {
		return err
	}

	t, ok := tasks[ts.Name]
	if !ok {
		return errors.New("Unknow task: " + ts.Name)
	}

	log.Debugln("worker: call:", ts.Name)
	t.call(ts.Params...)

	_, err := queue.DeleteMessage(m)
	return err
}
Exemplo n.º 4
0
Arquivo: app.go Projeto: Wayt/ImgBot
func main() {

	app := happyngine.NewAPI()

	// Setup seed
	rand.Seed(time.Now().UnixNano())

	// Setup Origin
	if origin := env.Get("ALLOW_ORIGIN"); len(origin) > 0 {
		app.Headers["Access-Control-Allow-Origin"] = origin
	}

	if cacheControl := env.Get("CACHE_CONTROL"); len(cacheControl) > 0 {
		app.Headers["Cache-Control"] = cacheControl
	}

	// Register actions
	app.AddRoute("GET", "/:bucket/:file", newGetFileAction)

	// Setup custuom 404 handler
	app.Error404Handler = func(ctx *happyngine.Context, err interface{}) {

		ctx.Send(http.StatusNotFound, `not found 404`)
	}

	// Setup custuom panic handler
	app.PanicHandler = func(ctx *happyngine.Context, err interface{}) {

		ctx.Send(500, `{"error":"internal_error"}`)

		trace := make([]byte, 1024)
		runtime.Stack(trace, true)

		ctx.Criticalln(err, string(trace))
	}

	log.Debugln("Running...")
	if err := app.Run(":8080"); err != nil {
		log.Criticalln("app.Run:", err)
	}
}