| 729 | } |
| 730 | |
| 731 | func newAlertsLimiter(tenant string, limits Limits, reg prometheus.Registerer) *alertsLimiter { |
| 732 | limiter := &alertsLimiter{ |
| 733 | tenant: tenant, |
| 734 | limits: limits, |
| 735 | sizes: map[model.Fingerprint]int{}, |
| 736 | failureCounter: promauto.With(reg).NewCounter(prometheus.CounterOpts{ |
| 737 | Name: "alertmanager_alerts_insert_limited_total", |
| 738 | Help: "Number of failures to insert new alerts to in-memory alert store.", |
| 739 | }), |
| 740 | } |
| 741 | |
| 742 | promauto.With(reg).NewGaugeFunc(prometheus.GaugeOpts{ |
| 743 | Name: "alertmanager_alerts_limiter_current_alerts", |
| 744 | Help: "Number of alerts tracked by alerts limiter.", |
| 745 | }, func() float64 { |
| 746 | c, _ := limiter.currentStats() |
| 747 | return float64(c) |
| 748 | }) |
| 749 | |
| 750 | promauto.With(reg).NewGaugeFunc(prometheus.GaugeOpts{ |
| 751 | Name: "alertmanager_alerts_limiter_current_alerts_size_bytes", |
| 752 | Help: "Total size of alerts tracked by alerts limiter.", |
| 753 | }, func() float64 { |
| 754 | _, s := limiter.currentStats() |
| 755 | return float64(s) |
| 756 | }) |
| 757 | |
| 758 | return limiter |
| 759 | } |
| 760 | |
| 761 | func (a *alertsLimiter) PreStore(alert *types.Alert, existing bool) error { |
| 762 | if alert == nil { |