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) } }