| 759 | } |
| 760 | |
| 761 | func (a *alertsLimiter) PreStore(alert *types.Alert, existing bool) error { |
| 762 | if alert == nil { |
| 763 | return nil |
| 764 | } |
| 765 | |
| 766 | fp := alert.Fingerprint() |
| 767 | |
| 768 | countLimit := a.limits.AlertmanagerMaxAlertsCount(a.tenant) |
| 769 | sizeLimit := a.limits.AlertmanagerMaxAlertsSizeBytes(a.tenant) |
| 770 | |
| 771 | sizeDiff := alertSize(alert.Alert) |
| 772 | |
| 773 | a.mx.Lock() |
| 774 | defer a.mx.Unlock() |
| 775 | |
| 776 | if !existing && countLimit > 0 && (a.count+1) > countLimit { |
| 777 | a.failureCounter.Inc() |
| 778 | return fmt.Errorf(errTooManyAlerts, countLimit, alert.Name()) |
| 779 | } |
| 780 | |
| 781 | if existing { |
| 782 | sizeDiff -= a.sizes[fp] |
| 783 | } |
| 784 | |
| 785 | if sizeLimit > 0 && (a.totalSize+sizeDiff) > sizeLimit { |
| 786 | a.failureCounter.Inc() |
| 787 | return fmt.Errorf(errAlertsTooBig, sizeLimit) |
| 788 | } |
| 789 | |
| 790 | return nil |
| 791 | } |
| 792 | |
| 793 | func (a *alertsLimiter) PostStore(alert *types.Alert, existing bool) { |
| 794 | if alert == nil { |