mirror of
https://github.com/prometheus/alertmanager
synced 2024-12-11 17:06:22 +00:00
309c6af4b2
Building a hash over an entire set of alerts causes problems, because the hash differs, on any change, whereas we only want to send notifications if the alert and it's state have changed. Therefore this introduces a list of alerts that are active and a list of alerts that are resolved. If the currently active alerts of a group are a subset of the ones that have been notified about before then they are deduplicated. The resolved notifications work the same way, with a separate list of resolved notifications that have already been sent.
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
// Copyright 2017 Prometheus Team
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package nflogpb
|
|
|
|
// IsFiringSubset returns whether the given subset is a subset of the alerts
|
|
// that were firing at the time of the last notification.
|
|
func (m *Entry) IsFiringSubset(subset map[uint64]struct{}) bool {
|
|
set := map[uint64]struct{}{}
|
|
for i := range m.FiringAlerts {
|
|
set[m.FiringAlerts[i]] = struct{}{}
|
|
}
|
|
|
|
return isSubset(set, subset)
|
|
}
|
|
|
|
// IsFiringSubset returns whether the given subset is a subset of the alerts
|
|
// that were resolved at the time of the last notification.
|
|
func (m *Entry) IsResolvedSubset(subset map[uint64]struct{}) bool {
|
|
set := map[uint64]struct{}{}
|
|
for i := range m.ResolvedAlerts {
|
|
set[m.ResolvedAlerts[i]] = struct{}{}
|
|
}
|
|
|
|
return isSubset(set, subset)
|
|
}
|
|
|
|
func isSubset(set, subset map[uint64]struct{}) bool {
|
|
for k, _ := range subset {
|
|
_, exists := set[k]
|
|
if !exists {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|