fork of indigo with slightly nicer lexgen

Add more metrics to the relay

Changed files
+54 -1
bgs
did
repomgr
+5
bgs/bgs.go
··· 876 repoCommitsReceivedCounter.WithLabelValues(host.Host).Add(1) 877 evt := env.RepoCommit 878 log.Debugw("bgs got repo append event", "seq", evt.Seq, "pdsHost", host.Host, "repo", evt.Repo) 879 u, err := bgs.lookupUserByDid(ctx, evt.Repo) 880 if err != nil { 881 if !errors.Is(err, gorm.ErrRecordNotFound) { 882 return fmt.Errorf("looking up event user: %w", err) 883 } 884 885 newUsersDiscovered.Inc() 886 subj, err := bgs.createExternalUser(ctx, evt.Repo) 887 if err != nil { 888 return fmt.Errorf("fed event create external user: %w", err) 889 }
··· 876 repoCommitsReceivedCounter.WithLabelValues(host.Host).Add(1) 877 evt := env.RepoCommit 878 log.Debugw("bgs got repo append event", "seq", evt.Seq, "pdsHost", host.Host, "repo", evt.Repo) 879 + 880 + s := time.Now() 881 u, err := bgs.lookupUserByDid(ctx, evt.Repo) 882 + userLookupDuration.Observe(time.Since(s).Seconds()) 883 if err != nil { 884 if !errors.Is(err, gorm.ErrRecordNotFound) { 885 return fmt.Errorf("looking up event user: %w", err) 886 } 887 888 newUsersDiscovered.Inc() 889 + start := time.Now() 890 subj, err := bgs.createExternalUser(ctx, evt.Repo) 891 + newUserDiscoveryDuration.Observe(time.Since(start).Seconds()) 892 if err != nil { 893 return fmt.Errorf("fed event create external user: %w", err) 894 }
+12
bgs/metrics.go
··· 81 Buckets: prometheus.ExponentialBuckets(100, 10, 8), 82 }, []string{"code", "method", "path"}) 83 84 // MetricsMiddleware defines handler function for metrics middleware 85 func MetricsMiddleware(next echo.HandlerFunc) echo.HandlerFunc { 86 return func(c echo.Context) error {
··· 81 Buckets: prometheus.ExponentialBuckets(100, 10, 8), 82 }, []string{"code", "method", "path"}) 83 84 + var userLookupDuration = promauto.NewHistogram(prometheus.HistogramOpts{ 85 + Name: "relay_user_lookup_duration", 86 + Help: "A histogram of user lookup latencies", 87 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 88 + }) 89 + 90 + var newUserDiscoveryDuration = promauto.NewHistogram(prometheus.HistogramOpts{ 91 + Name: "relay_new_user_discovery_duration", 92 + Help: "A histogram of new user discovery latencies", 93 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 94 + }) 95 + 96 // MetricsMiddleware defines handler function for metrics middleware 97 func MetricsMiddleware(next echo.HandlerFunc) echo.HandlerFunc { 98 return func(c echo.Context) error {
+6
did/metrics.go
··· 9 Name: "multiresolver_resolved_dids_total", 10 Help: "Total number of DIDs resolved", 11 }, []string{"resolver"})
··· 9 Name: "multiresolver_resolved_dids_total", 10 Help: "Total number of DIDs resolved", 11 }, []string{"resolver"}) 12 + 13 + var mrResolveDuration = promauto.NewHistogramVec(prometheus.HistogramOpts{ 14 + Name: "indigo_multiresolver_resolve_duration", 15 + Help: "A histogram of resolve latencies", 16 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 17 + }, []string{"resolver"})
+6
did/multi.go
··· 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/whyrusleeping/go-did" 8 ) ··· 43 } 44 45 func (mr *MultiResolver) GetDocument(ctx context.Context, didstr string) (*did.Document, error) { 46 pdid, err := did.ParseDID(didstr) 47 if err != nil { 48 return nil, err
··· 3 import ( 4 "context" 5 "fmt" 6 + "time" 7 8 "github.com/whyrusleeping/go-did" 9 ) ··· 44 } 45 46 func (mr *MultiResolver) GetDocument(ctx context.Context, didstr string) (*did.Document, error) { 47 + s := time.Now() 48 + defer func() { 49 + mrResolveDuration.WithLabelValues(didstr).Observe(time.Since(s).Seconds()) 50 + }() 51 + 52 pdid, err := did.ParseDID(didstr) 53 if err != nil { 54 return nil, err
+18
repomgr/metrics.go
··· 9 Name: "repomgr_repo_ops_imported", 10 Help: "Number of repo ops imported", 11 })
··· 9 Name: "repomgr_repo_ops_imported", 10 Help: "Number of repo ops imported", 11 }) 12 + 13 + var openAndSigCheckDuration = promauto.NewHistogram(prometheus.HistogramOpts{ 14 + Name: "repomgr_open_and_sig_check_duration", 15 + Help: "Duration of opening and signature check", 16 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 17 + }) 18 + 19 + var calcDiffDuration = promauto.NewHistogram(prometheus.HistogramOpts{ 20 + Name: "repomgr_calc_diff_duration", 21 + Help: "Duration of calculating diff", 22 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 23 + }) 24 + 25 + var writeCarSliceDuration = promauto.NewHistogram(prometheus.HistogramOpts{ 26 + Name: "repomgr_write_car_slice_duration", 27 + Help: "Duration of writing car slice", 28 + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), 29 + })
+7 -1
repomgr/repomgr.go
··· 8 "io" 9 "strings" 10 "sync" 11 12 atproto "github.com/bluesky-social/indigo/api/atproto" 13 bsky "github.com/bluesky-social/indigo/api/bsky" ··· 538 unlock := rm.lockUser(ctx, uid) 539 defer unlock() 540 541 root, ds, err := rm.cs.ImportSlice(ctx, uid, since, carslice) 542 if err != nil { 543 return fmt.Errorf("importing external carslice: %w", err) ··· 551 if err := rm.CheckRepoSig(ctx, r, did); err != nil { 552 return err 553 } 554 555 var skipcids map[cid.Cid]bool 556 if ds.BaseCid().Defined() { ··· 571 } 572 } 573 574 if err := ds.CalcDiff(ctx, skipcids); err != nil { 575 return fmt.Errorf("failed while calculating mst diff (since=%v): %w", since, err) 576 - 577 } 578 579 evtops := make([]RepoOp, 0, len(ops)) 580 ··· 631 } 632 } 633 634 rslice, err := ds.CloseWithRoot(ctx, root, nrev) 635 if err != nil { 636 return fmt.Errorf("close with root: %w", err) 637 } 638 639 if rm.events != nil { 640 rm.events(ctx, &RepoEvent{
··· 8 "io" 9 "strings" 10 "sync" 11 + "time" 12 13 atproto "github.com/bluesky-social/indigo/api/atproto" 14 bsky "github.com/bluesky-social/indigo/api/bsky" ··· 539 unlock := rm.lockUser(ctx, uid) 540 defer unlock() 541 542 + start := time.Now() 543 root, ds, err := rm.cs.ImportSlice(ctx, uid, since, carslice) 544 if err != nil { 545 return fmt.Errorf("importing external carslice: %w", err) ··· 553 if err := rm.CheckRepoSig(ctx, r, did); err != nil { 554 return err 555 } 556 + openAndSigCheckDuration.Observe(time.Since(start).Seconds()) 557 558 var skipcids map[cid.Cid]bool 559 if ds.BaseCid().Defined() { ··· 574 } 575 } 576 577 + start = time.Now() 578 if err := ds.CalcDiff(ctx, skipcids); err != nil { 579 return fmt.Errorf("failed while calculating mst diff (since=%v): %w", since, err) 580 } 581 + calcDiffDuration.Observe(time.Since(start).Seconds()) 582 583 evtops := make([]RepoOp, 0, len(ops)) 584 ··· 635 } 636 } 637 638 + start = time.Now() 639 rslice, err := ds.CloseWithRoot(ctx, root, nrev) 640 if err != nil { 641 return fmt.Errorf("close with root: %w", err) 642 } 643 + writeCarSliceDuration.Observe(time.Since(start).Seconds()) 644 645 if rm.events != nil { 646 rm.events(ctx, &RepoEvent{