// Watch takes a variable number of events to match against. The subscriber // will receive events that match any of the arguments passed to Watch. // // Examples: // // // subscribe to all events // Watch(q) // // // subscribe to all UpdateTask events // Watch(q, EventUpdateTask{}) // // // subscribe to all task-related events // Watch(q, EventUpdateTask{}, EventCreateTask{}, EventDeleteTask{}) // // // subscribe to UpdateTask for node 123 // Watch(q, EventUpdateTask{Task: &api.Task{NodeID: 123}, // Checks: []TaskCheckFunc{TaskCheckNodeID}}) // // // subscribe to UpdateTask for node 123, as well as CreateTask // // for node 123 that also has ServiceID set to "abc" // Watch(q, EventUpdateTask{Task: &api.Task{NodeID: 123}, // Checks: []TaskCheckFunc{TaskCheckNodeID}}, // EventCreateTask{Task: &api.Task{NodeID: 123, ServiceID: "abc"}, // Checks: []TaskCheckFunc{TaskCheckNodeID, // func(t1, t2 *api.Task) bool { // return t1.ServiceID == t2.ServiceID // }}}) func Watch(queue *watch.Queue, specifiers ...Event) (eventq chan events.Event, cancel func()) { if len(specifiers) == 0 { return queue.Watch() } return queue.CallbackWatch(events.MatcherFunc(func(event events.Event) bool { for _, s := range specifiers { if s.matches(event) { return true } } return false })) }
// Watch takes a variable number of events to match against. The subscriber // will receive events that match any of the arguments passed to Watch. // // Examples: // // // subscribe to all events // Watch(q) // // // subscribe to all UpdateTask events // Watch(q, EventUpdateTask{}) // // // subscribe to all task-related events // Watch(q, EventUpdateTask{}, EventCreateTask{}, EventDeleteTask{}) // // // subscribe to UpdateTask for node 123 // Watch(q, EventUpdateTask{Task: &api.Task{NodeID: 123}, // Checks: []TaskCheckFunc{TaskCheckNodeID}}) // // // subscribe to UpdateTask for node 123, as well as CreateTask // // for node 123 that also has ServiceID set to "abc" // Watch(q, EventUpdateTask{Task: &api.Task{NodeID: 123}, // Checks: []TaskCheckFunc{TaskCheckNodeID}}, // EventCreateTask{Task: &api.Task{NodeID: 123, ServiceID: "abc"}, // Checks: []TaskCheckFunc{TaskCheckNodeID, // func(t1, t2 *api.Task) bool { // return t1.ServiceID == t2.ServiceID // }}}) func Watch(queue *watch.Queue, specifiers ...Event) (eventq chan events.Event, cancel func()) { if len(specifiers) == 0 { return queue.Watch() } return queue.CallbackWatch(Matcher(specifiers...)) }