email-exporter: Count Pardot API errors encountered (#8175)
This commit is contained in:
parent
faa07f5e36
commit
b6887a945e
|
@ -41,6 +41,7 @@ type ExporterImpl struct {
|
||||||
limiter *rate.Limiter
|
limiter *rate.Limiter
|
||||||
client PardotClient
|
client PardotClient
|
||||||
emailsHandledCounter prometheus.Counter
|
emailsHandledCounter prometheus.Counter
|
||||||
|
pardotErrorCounter prometheus.Counter
|
||||||
log blog.Logger
|
log blog.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,12 +63,19 @@ func NewExporterImpl(client PardotClient, perDayLimit float64, maxConcurrentRequ
|
||||||
})
|
})
|
||||||
scope.MustRegister(emailsHandledCounter)
|
scope.MustRegister(emailsHandledCounter)
|
||||||
|
|
||||||
|
pardotErrorCounter := prometheus.NewCounter(prometheus.CounterOpts{
|
||||||
|
Name: "email_exporter_errors",
|
||||||
|
Help: "Total number of Pardot API errors encountered by the email exporter",
|
||||||
|
})
|
||||||
|
scope.MustRegister(pardotErrorCounter)
|
||||||
|
|
||||||
impl := &ExporterImpl{
|
impl := &ExporterImpl{
|
||||||
maxConcurrentRequests: maxConcurrentRequests,
|
maxConcurrentRequests: maxConcurrentRequests,
|
||||||
limiter: limiter,
|
limiter: limiter,
|
||||||
toSend: make([]string, 0, contactsQueueCap),
|
toSend: make([]string, 0, contactsQueueCap),
|
||||||
client: client,
|
client: client,
|
||||||
emailsHandledCounter: emailsHandledCounter,
|
emailsHandledCounter: emailsHandledCounter,
|
||||||
|
pardotErrorCounter: pardotErrorCounter,
|
||||||
log: logger,
|
log: logger,
|
||||||
}
|
}
|
||||||
impl.wake = sync.NewCond(&impl.Mutex)
|
impl.wake = sync.NewCond(&impl.Mutex)
|
||||||
|
@ -145,6 +153,7 @@ func (impl *ExporterImpl) Start(daemonCtx context.Context) {
|
||||||
|
|
||||||
err = impl.client.SendContact(email)
|
err = impl.client.SendContact(email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
impl.pardotErrorCounter.Inc()
|
||||||
impl.log.Errf("Sending Contact to Pardot: %s", err)
|
impl.log.Errf("Sending Contact to Pardot: %s", err)
|
||||||
}
|
}
|
||||||
impl.emailsHandledCounter.Inc()
|
impl.emailsHandledCounter.Inc()
|
||||||
|
|
|
@ -12,6 +12,8 @@ import (
|
||||||
blog "github.com/letsencrypt/boulder/log"
|
blog "github.com/letsencrypt/boulder/log"
|
||||||
"github.com/letsencrypt/boulder/metrics"
|
"github.com/letsencrypt/boulder/metrics"
|
||||||
"github.com/letsencrypt/boulder/test"
|
"github.com/letsencrypt/boulder/test"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ctx = context.Background()
|
var ctx = context.Background()
|
||||||
|
@ -88,6 +90,9 @@ func TestSendContacts(t *testing.T) {
|
||||||
}
|
}
|
||||||
test.AssertSliceContains(t, gotContacts, wantContacts[0])
|
test.AssertSliceContains(t, gotContacts, wantContacts[0])
|
||||||
test.AssertSliceContains(t, gotContacts, wantContacts[1])
|
test.AssertSliceContains(t, gotContacts, wantContacts[1])
|
||||||
|
|
||||||
|
// Check that the error counter was not incremented.
|
||||||
|
test.AssertMetricWithLabelsEquals(t, exporter.pardotErrorCounter, prometheus.Labels{}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSendContactsQueueFull(t *testing.T) {
|
func TestSendContactsQueueFull(t *testing.T) {
|
||||||
|
@ -130,3 +135,31 @@ func TestSendContactsQueueDrains(t *testing.T) {
|
||||||
|
|
||||||
test.AssertEquals(t, 100, len(clientImpl.getCreatedContacts()))
|
test.AssertEquals(t, 100, len(clientImpl.getCreatedContacts()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type mockAlwaysFailClient struct{}
|
||||||
|
|
||||||
|
func (m *mockAlwaysFailClient) SendContact(email string) error {
|
||||||
|
return fmt.Errorf("simulated failure")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSendContactsErrorMetrics(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
mockClient := &mockAlwaysFailClient{}
|
||||||
|
exporter := NewExporterImpl(mockClient, 1000000, 5, metrics.NoopRegisterer, blog.NewMock())
|
||||||
|
|
||||||
|
daemonCtx, cancel := context.WithCancel(context.Background())
|
||||||
|
exporter.Start(daemonCtx)
|
||||||
|
|
||||||
|
_, err := exporter.SendContacts(ctx, &emailpb.SendContactsRequest{
|
||||||
|
Emails: []string{"test@example.com"},
|
||||||
|
})
|
||||||
|
test.AssertNotError(t, err, "Error creating contacts")
|
||||||
|
|
||||||
|
// Drain the queue.
|
||||||
|
cancel()
|
||||||
|
exporter.Drain()
|
||||||
|
|
||||||
|
// Check that the error counter was incremented.
|
||||||
|
test.AssertMetricWithLabelsEquals(t, exporter.pardotErrorCounter, prometheus.Labels{}, 1)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue