示例#1
0
// Set a new silence.
func (s *Silences) Set(sil *types.Silence) (uint64, error) {
	s.mtx.Lock()
	defer s.mtx.Unlock()

	var (
		uid uint64
		err error
	)
	err = s.db.Update(func(tx *bolt.Tx) error {
		b := tx.Bucket(bktSilences)

		// Silences are immutable and we always create a new one.
		uid, err = b.NextSequence()
		if err != nil {
			return err
		}
		sil.ID = uid

		k := make([]byte, 8)
		binary.BigEndian.PutUint64(k, uid)

		msb, err := json.Marshal(sil.Silence)
		if err != nil {
			return err
		}
		return b.Put(k, msb)
	})
	if err != nil {
		return 0, err
	}
	s.cache[uid] = sil
	return uid, nil
}
示例#2
0
// Set impelements the Silences interface.
func (s *MemSilences) Set(sil *types.Silence) (uint64, error) {
	s.mtx.Lock()
	defer s.mtx.Unlock()

	if sil.ID == 0 {
		sil.ID = uint64(len(s.silences) + 1)
	} else {
		if _, ok := s.silences[sil.ID]; !ok {
			return 0, ErrNotFound
		}
	}

	s.silences[sil.ID] = &sil.Silence
	return sil.ID, nil
}