A constraint-based approach to fault management for groupware services