// Create adds a new silence and returns its ID. func (s *Silences) Create(sil *pb.Silence) (id string, err error) { if sil.Id != "" { return "", fmt.Errorf("unexpected ID in new silence") } sil.Id = uuid.NewV4().String() now, err := s.nowProto() if err != nil { return "", err } if sil.StartsAt == nil { sil.StartsAt = now } else if protoBefore(sil.StartsAt, now) { return "", fmt.Errorf("new silence must not start in the past") } sil.UpdatedAt = now if err := validateSilence(sil); err != nil { return "", fmt.Errorf("invalid silence: %s", err) } s.mtx.Lock() defer s.mtx.Unlock() if err := s.setSilence(sil); err != nil { return "", err } return sil.Id, nil }