Example #1
0
File: main.go Project: nqn/angstrom
func taskHandler(driver *mesos.ExecutorDriver, taskInfo mesos.TaskInfo) {
	for {
		var request payload.SampleRequest
		err := json.Unmarshal(taskInfo.Data, &request)
		if err != nil {
			log.Println("Could not parse request: " + err.Error())
		} else {
			log.Println(request.Slave)

			samples := sample(request.Slave)
			if samples == nil {
				continue
			}

			// TODO(nnielsen): Do local aggregation so samples can be sent in bulks.
			// TODO(nnielsen): Return type should be (node_count, available, allocated, used).
			body, err := json.Marshal(samples)
			if err != nil {
				continue
			}
			log.Println("Sending framework data...")
			driver.SendFrameworkMessage(string(body))

			// TODO(nnielsen): Add terminal state.
			// driver.SendStatusUpdate(&mesos.TaskStatus{
			// 	TaskId:  taskInfo.TaskId,
			// 	State:   mesos.NewTaskState(mesos.TaskState_TASK_FINISHED),
			// 	Message: proto.String("Angstrom task YYY sampling completed"),
			// })
		}

		time.Sleep(500 * time.Millisecond)
	}

}