Skip to content
This repository has been archived by the owner on Dec 22, 2022. It is now read-only.

Commit

Permalink
Prometheus Refactor (prebid#1108)
Browse files Browse the repository at this point in the history
  • Loading branch information
SyntaxNode committed Nov 27, 2019
1 parent 214e354 commit 0145341
Show file tree
Hide file tree
Showing 15 changed files with 1,450 additions and 1,099 deletions.
2 changes: 1 addition & 1 deletion endpoints/cookie_sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (deps *cookieSyncDeps) Endpoint(w http.ResponseWriter, r *http.Request, _ h

defer deps.pbsAnalytics.LogCookieSyncObject(&co)

deps.metrics.RecordCookieSync(pbsmetrics.Labels{})
deps.metrics.RecordCookieSync()
userSyncCookie := usersync.ParsePBSCookieFromRequest(r, deps.hostCookie)
if !userSyncCookie.AllowSyncs() {
http.Error(w, "User has opted out", http.StatusUnauthorized)
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@ github.com/prebid/go-gdpr v0.6.0 h1:/GKrygGkUbsgd96HIkjAu7/6CHtRedvcojRtfAd4Igc=
github.com/prebid/go-gdpr v0.6.0/go.mod h1:FPY0uxSrl9/Mz237LnPo3ge4aCG0wQ9FWf2b4WhwNn0=
github.com/prometheus/client_golang v0.0.0-20180623155954-77e8f2ddcfed h1:0dloFFFNNDG7c+8qtkYw2FdADrWy9s5cI8wHp6tK3Mg=
github.com/prometheus/client_golang v0.0.0-20180623155954-77e8f2ddcfed/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e h1:n/3MEhJQjQxrOUCzh1Y3Re6aJUUWRp2M9+Oc3eVn/54=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273 h1:agujYaXJSxSo18YNX3jzl+4G6Bstwt+kqv47GS12uL0=
Expand Down
29 changes: 6 additions & 23 deletions pbsmetrics/config/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,9 @@ func (me *MultiMetricsEngine) RecordAdapterTime(labels pbsmetrics.AdapterLabels,
}

// RecordCookieSync across all engines
func (me *MultiMetricsEngine) RecordCookieSync(labels pbsmetrics.Labels) {
func (me *MultiMetricsEngine) RecordCookieSync() {
for _, thisME := range *me {
thisME.RecordCookieSync(labels)
thisME.RecordCookieSync()
}
}

Expand Down Expand Up @@ -175,9 +175,9 @@ func (me *MultiMetricsEngine) RecordUserIDSet(userLabels pbsmetrics.UserLabels)
}

// RecordPrebidCacheRequestTime across all engines
func (me *MultiMetricsEngine) RecordPrebidCacheRequestTime(labels pbsmetrics.RequestLabels, length time.Duration) {
func (me *MultiMetricsEngine) RecordPrebidCacheRequestTime(success bool, length time.Duration) {
for _, thisME := range *me {
thisME.RecordPrebidCacheRequestTime(labels, length)
thisME.RecordPrebidCacheRequestTime(success, length)
}
}

Expand All @@ -186,85 +186,68 @@ type DummyMetricsEngine struct{}

// RecordRequest as a noop
func (me *DummyMetricsEngine) RecordRequest(labels pbsmetrics.Labels) {
return
}

// RecordConnectionAccept as a noop
func (me *DummyMetricsEngine) RecordConnectionAccept(success bool) {
return
}

// RecordConnectionClose as a noop
func (me *DummyMetricsEngine) RecordConnectionClose(success bool) {
return
}

// RecordImps as a noop
func (me *DummyMetricsEngine) RecordImps(implabels pbsmetrics.ImpLabels) {
return
}

// RecordLegacyImps as a noop
func (me *DummyMetricsEngine) RecordLegacyImps(labels pbsmetrics.Labels, numImps int) {
return
}

// RecordRequestTime as a noop
func (me *DummyMetricsEngine) RecordRequestTime(labels pbsmetrics.Labels, length time.Duration) {
return
}

// RecordAdapterPanic as a noop
func (me *DummyMetricsEngine) RecordAdapterPanic(labels pbsmetrics.AdapterLabels) {
return
}

// RecordAdapterRequest as a noop
func (me *DummyMetricsEngine) RecordAdapterRequest(labels pbsmetrics.AdapterLabels) {
return
}

// RecordAdapterBidReceived as a noop
func (me *DummyMetricsEngine) RecordAdapterBidReceived(labels pbsmetrics.AdapterLabels, bidType openrtb_ext.BidType, hasAdm bool) {
return
}

// RecordAdapterPrice as a noop
func (me *DummyMetricsEngine) RecordAdapterPrice(labels pbsmetrics.AdapterLabels, cpm float64) {
return
}

// RecordAdapterTime as a noop
func (me *DummyMetricsEngine) RecordAdapterTime(labels pbsmetrics.AdapterLabels, length time.Duration) {
return
}

// RecordCookieSync as a noop
func (me *DummyMetricsEngine) RecordCookieSync(labels pbsmetrics.Labels) {
return
func (me *DummyMetricsEngine) RecordCookieSync() {
}

// RecordAdapterCookieSync as a noop
func (me *DummyMetricsEngine) RecordAdapterCookieSync(adapter openrtb_ext.BidderName, gdprBlocked bool) {
return
}

// RecordUserIDSet as a noop
func (me *DummyMetricsEngine) RecordUserIDSet(userLabels pbsmetrics.UserLabels) {
return
}

// RecordStoredReqCacheResult as a noop
func (me *DummyMetricsEngine) RecordStoredReqCacheResult(cacheResult pbsmetrics.CacheResult, inc int) {
return
}

// RecordStoredImpCacheResult as a noop
func (me *DummyMetricsEngine) RecordStoredImpCacheResult(cacheResult pbsmetrics.CacheResult, inc int) {
return
}

// RecordPrebidCacheRequestTime as a noop
func (me *DummyMetricsEngine) RecordPrebidCacheRequestTime(labels pbsmetrics.RequestLabels, length time.Duration) {
return
func (me *DummyMetricsEngine) RecordPrebidCacheRequestTime(success bool, length time.Duration) {
}
5 changes: 1 addition & 4 deletions pbsmetrics/config/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ func TestMultiMetricsEngine(t *testing.T) {
AudioImps: true,
NativeImps: true,
}
requestLabels := pbsmetrics.RequestLabels{
RequestStatus: pbsmetrics.RequestStatusOK,
}
for i := 0; i < 5; i++ {
metricsEngine.RecordRequest(labels)
metricsEngine.RecordImps(impTypeLabels)
Expand All @@ -88,7 +85,7 @@ func TestMultiMetricsEngine(t *testing.T) {
metricsEngine.RecordAdapterPrice(pubLabels, 1.34)
metricsEngine.RecordAdapterBidReceived(pubLabels, openrtb_ext.BidTypeBanner, true)
metricsEngine.RecordAdapterTime(pubLabels, time.Millisecond*20)
metricsEngine.RecordPrebidCacheRequestTime(requestLabels, time.Millisecond*20)
metricsEngine.RecordPrebidCacheRequestTime(true, time.Millisecond*20)
}
labelsBlacklist := []pbsmetrics.Labels{
{
Expand Down
11 changes: 5 additions & 6 deletions pbsmetrics/go_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ func (me *Metrics) RecordAdapterTime(labels AdapterLabels, length time.Duration)
}

// RecordCookieSync implements a part of the MetricsEngine interface. Records a cookie sync request
func (me *Metrics) RecordCookieSync(labels Labels) {
func (me *Metrics) RecordCookieSync() {
me.CookieSyncMeter.Mark(1)
}

Expand Down Expand Up @@ -518,13 +518,12 @@ func (me *Metrics) RecordStoredImpCacheResult(cacheResult CacheResult, inc int)

// RecordPrebidCacheRequestTime implements a part of the MetricsEngine interface. Records the
// amount of time taken to store the auction result in Prebid Cache.
func (me *Metrics) RecordPrebidCacheRequestTime(labels RequestLabels, length time.Duration) {
if labels.RequestStatus == RequestStatusOK {
func (me *Metrics) RecordPrebidCacheRequestTime(success bool, length time.Duration) {
if success {
me.PrebidCacheRequestTimerSuccess.Update(length)
return
} else {
me.PrebidCacheRequestTimerError.Update(length)
}

me.PrebidCacheRequestTimerError.Update(length)
}

func doMark(bidder openrtb_ext.BidderName, meters map[openrtb_ext.BidderName]metrics.Meter) {
Expand Down
12 changes: 4 additions & 8 deletions pbsmetrics/go_metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,25 +172,21 @@ func TestNewMetricsWithDisabledConfig(t *testing.T) {
assert.True(t, m.MetricsDisabled.AccountAdapterDetails, "Accound adapter metrics should be disabled")
}

func TestRecordPrebidCacheRequestTimeWithSuccessLabel(t *testing.T) {
func TestRecordPrebidCacheRequestTimeWithSuccess(t *testing.T) {
registry := metrics.NewRegistry()
m := NewMetrics(registry, []openrtb_ext.BidderName{openrtb_ext.BidderAppnexus}, config.DisabledMetrics{AccountAdapterDetails: true})

m.RecordPrebidCacheRequestTime(RequestLabels{
RequestStatus: RequestStatusOK,
}, 42)
m.RecordPrebidCacheRequestTime(true, 42)

assert.Equal(t, m.PrebidCacheRequestTimerSuccess.Count(), int64(1))
assert.Equal(t, m.PrebidCacheRequestTimerError.Count(), int64(0))
}

func TestRecordPrebidCacheRequestTimeWithErrorLabel(t *testing.T) {
func TestRecordPrebidCacheRequestTimeWithNotSuccess(t *testing.T) {
registry := metrics.NewRegistry()
m := NewMetrics(registry, []openrtb_ext.BidderName{openrtb_ext.BidderAppnexus}, config.DisabledMetrics{AccountAdapterDetails: true})

m.RecordPrebidCacheRequestTime(RequestLabels{
RequestStatus: RequestStatusErr,
}, 42)
m.RecordPrebidCacheRequestTime(false, 42)

assert.Equal(t, m.PrebidCacheRequestTimerSuccess.Count(), int64(0))
assert.Equal(t, m.PrebidCacheRequestTimerError.Count(), int64(1))
Expand Down
14 changes: 12 additions & 2 deletions pbsmetrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,16 @@ const (
RequestActionErr RequestAction = "err"
)

// RequestActions returns possible setuid action labels
func RequestActions() []RequestAction {
return []RequestAction{
RequestActionSet,
RequestActionOptOut,
RequestActionGDPR,
RequestActionErr,
}
}

// MetricsEngine is a generic interface to record PBS metrics into the desired backend
// The first three metrics function fire off once per incoming request, so total metrics
// will equal the total numer of incoming requests. The remaining 5 fire off per outgoing
Expand All @@ -256,10 +266,10 @@ type MetricsEngine interface {
RecordAdapterBidReceived(labels AdapterLabels, bidType openrtb_ext.BidType, hasAdm bool)
RecordAdapterPrice(labels AdapterLabels, cpm float64)
RecordAdapterTime(labels AdapterLabels, length time.Duration)
RecordCookieSync(labels Labels) // May ignore all labels
RecordCookieSync()
RecordAdapterCookieSync(adapter openrtb_ext.BidderName, gdprBlocked bool)
RecordUserIDSet(userLabels UserLabels) // Function should verify bidder values
RecordStoredReqCacheResult(cacheResult CacheResult, inc int)
RecordStoredImpCacheResult(cacheResult CacheResult, inc int)
RecordPrebidCacheRequestTime(labels RequestLabels, length time.Duration)
RecordPrebidCacheRequestTime(success bool, length time.Duration)
}
8 changes: 4 additions & 4 deletions pbsmetrics/metrics_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ func (me *MetricsEngineMock) RecordAdapterTime(labels AdapterLabels, length time
}

// RecordCookieSync mock
func (me *MetricsEngineMock) RecordCookieSync(labels Labels) {
me.Called(labels)
func (me *MetricsEngineMock) RecordCookieSync() {
me.Called()
}

// RecordAdapterCookieSync mock
Expand All @@ -93,6 +93,6 @@ func (me *MetricsEngineMock) RecordStoredImpCacheResult(cacheResult CacheResult,
}

// RecordPrebidCacheRequestTime mock
func (me *MetricsEngineMock) RecordPrebidCacheRequestTime(labels RequestLabels, length time.Duration) {
me.Called(labels, length)
func (me *MetricsEngineMock) RecordPrebidCacheRequestTime(success bool, length time.Duration) {
me.Called(success, length)
}
Loading

0 comments on commit 0145341

Please sign in to comment.