Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions services/binilink/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type Outcome string

const (
OutcomeLinked Outcome = "linked"
OutcomeQueued Outcome = "queued"
OutcomeExists Outcome = "exists"
OutcomeConflict Outcome = "conflict"
OutcomeUnresolved Outcome = "unresolved"
Expand Down Expand Up @@ -67,6 +68,8 @@ func Post(client *http.Client, baseURL, key, userAgent, videoID, appleTrackID st
switch resp.StatusCode {
case http.StatusCreated:
return OutcomeLinked, 0, ""
case http.StatusAccepted:
return OutcomeQueued, 0, ""
case http.StatusOK:
return OutcomeExists, 0, ""
case http.StatusConflict:
Expand Down
1 change: 1 addition & 0 deletions services/binilink/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func TestPostClassifiesStatus(t *testing.T) {
want Outcome
}{
{http.StatusCreated, OutcomeLinked},
{http.StatusAccepted, OutcomeQueued},
{http.StatusOK, OutcomeExists},
{http.StatusConflict, OutcomeConflict},
{http.StatusNotFound, OutcomeUnresolved},
Expand Down
2 changes: 2 additions & 0 deletions stats/persist.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func (s *Stats) Serialize() PersistedStats {
LRCRedFlagErrors: s.LRCRedFlagErrors.Load(),
BiniLinkSent: s.BiniLinkSent.Load(),
BiniLinkLinked: s.BiniLinkLinked.Load(),
BiniLinkQueued: s.BiniLinkQueued.Load(),
BiniLinkExists: s.BiniLinkExists.Load(),
BiniLinkConflict: s.BiniLinkConflict.Load(),
BiniLinkUnresolved: s.BiniLinkUnresolved.Load(),
Expand Down Expand Up @@ -77,6 +78,7 @@ func (s *Stats) Restore(p PersistedStats) {
s.LRCRedFlagErrors.Store(p.LRCRedFlagErrors)
s.BiniLinkSent.Store(p.BiniLinkSent)
s.BiniLinkLinked.Store(p.BiniLinkLinked)
s.BiniLinkQueued.Store(p.BiniLinkQueued)
s.BiniLinkExists.Store(p.BiniLinkExists)
s.BiniLinkConflict.Store(p.BiniLinkConflict)
s.BiniLinkUnresolved.Store(p.BiniLinkUnresolved)
Expand Down
4 changes: 4 additions & 0 deletions stats/stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type Stats struct {
// BiniLink YouTube ingress
BiniLinkSent atomic.Int64
BiniLinkLinked atomic.Int64
BiniLinkQueued atomic.Int64
BiniLinkExists atomic.Int64
BiniLinkConflict atomic.Int64
BiniLinkUnresolved atomic.Int64
Expand Down Expand Up @@ -296,6 +297,8 @@ func (s *Stats) RecordBiniLink(outcome string) {
switch outcome {
case "linked":
s.BiniLinkLinked.Add(1)
case "queued":
s.BiniLinkQueued.Add(1)
case "exists":
s.BiniLinkExists.Add(1)
case "conflict":
Expand Down Expand Up @@ -499,6 +502,7 @@ func (s *Stats) Snapshot() map[string]interface{} {
"binilink": map[string]interface{}{
"sent": s.BiniLinkSent.Load(),
"linked": s.BiniLinkLinked.Load(),
"queued": s.BiniLinkQueued.Load(),
"exists": s.BiniLinkExists.Load(),
"conflict": s.BiniLinkConflict.Load(),
"unresolved": s.BiniLinkUnresolved.Load(),
Expand Down
12 changes: 6 additions & 6 deletions stats/stats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,29 +45,29 @@ func TestLRCRedCounters_PersistRoundTrip(t *testing.T) {

func TestRecordBiniLink(t *testing.T) {
s := newStats()
for _, outcome := range []string{"linked", "linked", "exists", "conflict", "unresolved", "no_isrc", "invalid", "retry"} {
for _, outcome := range []string{"linked", "linked", "queued", "exists", "conflict", "unresolved", "no_isrc", "invalid", "retry"} {
s.RecordBiniLink(outcome)
}
got := []int64{
s.BiniLinkSent.Load(), s.BiniLinkLinked.Load(), s.BiniLinkExists.Load(),
s.BiniLinkSent.Load(), s.BiniLinkLinked.Load(), s.BiniLinkQueued.Load(), s.BiniLinkExists.Load(),
s.BiniLinkConflict.Load(), s.BiniLinkUnresolved.Load(), s.BiniLinkErrors.Load(),
}
want := []int64{8, 2, 1, 1, 2, 2}
want := []int64{9, 2, 1, 1, 1, 2, 2}
for i := range want {
if got[i] != want[i] {
t.Fatalf("sent/linked/exists/conflict/unresolved/errors = %v, want %v", got, want)
t.Fatalf("sent/linked/queued/exists/conflict/unresolved/errors = %v, want %v", got, want)
}
}
}

func TestBiniLinkCounters_PersistRoundTrip(t *testing.T) {
s := newStats()
for _, outcome := range []string{"linked", "exists", "conflict", "unresolved", "retry"} {
for _, outcome := range []string{"linked", "queued", "exists", "conflict", "unresolved", "retry"} {
s.RecordBiniLink(outcome)
}
restored := newStats()
restored.Restore(s.Serialize())
if restored.BiniLinkSent.Load() != 5 || restored.BiniLinkLinked.Load() != 1 || restored.BiniLinkExists.Load() != 1 ||
if restored.BiniLinkSent.Load() != 6 || restored.BiniLinkLinked.Load() != 1 || restored.BiniLinkQueued.Load() != 1 || restored.BiniLinkExists.Load() != 1 ||
restored.BiniLinkConflict.Load() != 1 || restored.BiniLinkUnresolved.Load() != 1 || restored.BiniLinkErrors.Load() != 1 {
t.Fatal("round-trip lost binilink counters")
}
Expand Down
1 change: 1 addition & 0 deletions stats/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ type PersistedStats struct {
LRCRedFlagErrors int64 `json:"lrcred_flag_errors"`
BiniLinkSent int64 `json:"binilink_sent"`
BiniLinkLinked int64 `json:"binilink_linked"`
BiniLinkQueued int64 `json:"binilink_queued"`
BiniLinkExists int64 `json:"binilink_exists"`
BiniLinkConflict int64 `json:"binilink_conflict"`
BiniLinkUnresolved int64 `json:"binilink_unresolved"`
Expand Down
Loading