From a2bb6e8edf22e7339f4835ca022ebd9bc812c231 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Mon, 5 Sep 2016 16:38:44 +0200 Subject: [PATCH 01/10] metrics: update prometheus License: MIT Signed-off-by: Jakub Sztandera --- cmd/ipfs/daemon.go | 16 ++++++++-------- core/builder.go | 4 +++- core/corehttp/metrics.go | 4 ++-- package.json | 16 ++++++++++++++-- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index f30c9f4bd..1aa1c9ce4 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -11,11 +11,6 @@ import ( "sort" "sync" - "gx/ipfs/QmPpRcbNUXauP3zWZ1NJMLWpe4QnmEHrd2ba2D3yqWznw7/go-multiaddr-net" - _ "gx/ipfs/QmV3NSS3A1kX5s28r7yLczhDsXzkgo65cqRgKFXYunWZmD/metrics/runtime" - - ma "gx/ipfs/QmYzDkkgAEmrcNzFCiYo6L1dTX4EAG1gZkbtdbd9trL4vd/go-multiaddr" - cmds "github.com/ipfs/go-ipfs/commands" "github.com/ipfs/go-ipfs/core" commands "github.com/ipfs/go-ipfs/core/commands" @@ -25,10 +20,16 @@ import ( nodeMount "github.com/ipfs/go-ipfs/fuse/node" fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo" migrate "github.com/ipfs/go-ipfs/repo/fsrepo/migrations" + + "gx/ipfs/QmPpRcbNUXauP3zWZ1NJMLWpe4QnmEHrd2ba2D3yqWznw7/go-multiaddr-net" + "gx/ipfs/QmR3KwhXCRLTNZB59vELb2HhEWrGy9nuychepxFtj3wWYa/client_golang/prometheus" conn "gx/ipfs/QmUuwQUJmtvC6ReYcu7xaYKEUM3pD46H18dFn3LBhVt2Di/go-libp2p/p2p/net/conn" + ma "gx/ipfs/QmYzDkkgAEmrcNzFCiYo6L1dTX4EAG1gZkbtdbd9trL4vd/go-multiaddr" util "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util" pstore "gx/ipfs/QmdMfSLMDBDYhtc4oF3NYGCZr5dy4wQb6Ji26N4D4mdxa2/go-libp2p-peerstore" - prometheus "gx/ipfs/QmdhsRK1EK2fvAz2i2SH5DEfkL6seDuyMYEsxKa9Braim3/client_golang/prometheus" + + _ "gx/ipfs/QmV3NSS3A1kX5s28r7yLczhDsXzkgo65cqRgKFXYunWZmD/metrics/runtime" + _ "gx/ipfs/QmWTHakXvEmW44Muyy1wGGzoWA4tntuuvd8BhBbmLYBzSx/go-metrics-prometheus" ) const ( @@ -359,8 +360,7 @@ func daemonFunc(req cmds.Request, res cmds.Response) { } // initialize metrics collector - prometheus.MustRegisterOrGet(&corehttp.IpfsNodeCollector{Node: node}) - prometheus.EnableCollectChecks(true) + prometheus.MustRegister(&corehttp.IpfsNodeCollector{Node: node}) fmt.Printf("Daemon is ready\n") // collect long-running errors and block for shutdown diff --git a/core/builder.go b/core/builder.go index 8c459767f..d578f54d2 100644 --- a/core/builder.go +++ b/core/builder.go @@ -16,14 +16,15 @@ import ( pin "github.com/ipfs/go-ipfs/pin" repo "github.com/ipfs/go-ipfs/repo" cfg "github.com/ipfs/go-ipfs/repo/config" - key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" retry "gx/ipfs/QmPF5kxTYFkzhaY5LmkExood7aTTZBHWQC6cjdDQBuGrjp/retry-datastore" goprocessctx "gx/ipfs/QmSF8fPo3jgVBAy8fpdjjYqgG87dkJgUprRBHRd2tmfgpP/goprocess/context" + metrics "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" ci "gx/ipfs/QmVoi5es8D5fNHZDqoW6DgDAEPEV5hQp8GBz161vZXiwpQ/go-libp2p-crypto" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ds "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore" dsync "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore/sync" + key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" pstore "gx/ipfs/QmdMfSLMDBDYhtc4oF3NYGCZr5dy4wQb6Ji26N4D4mdxa2/go-libp2p-peerstore" ) @@ -109,6 +110,7 @@ func NewNode(ctx context.Context, cfg *BuildCfg) (*IpfsNode, error) { if err != nil { return nil, err } + ctx = metrics.CtxScope(ctx, "ipfs") n := &IpfsNode{ mode: offlineMode, diff --git a/core/corehttp/metrics.go b/core/corehttp/metrics.go index 4dee41aed..5e16d04f4 100644 --- a/core/corehttp/metrics.go +++ b/core/corehttp/metrics.go @@ -4,9 +4,9 @@ import ( "net" "net/http" - prometheus "gx/ipfs/QmdhsRK1EK2fvAz2i2SH5DEfkL6seDuyMYEsxKa9Braim3/client_golang/prometheus" - core "github.com/ipfs/go-ipfs/core" + + prometheus "gx/ipfs/QmR3KwhXCRLTNZB59vELb2HhEWrGy9nuychepxFtj3wWYa/client_golang/prometheus" ) // This adds the scraping endpoint which Prometheus uses to fetch metrics. diff --git a/package.json b/package.json index 32e9fce22..3221625e1 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "version": "0.0.0" }, { - "hash": "QmdhsRK1EK2fvAz2i2SH5DEfkL6seDuyMYEsxKa9Braim3", + "hash": "QmR3KwhXCRLTNZB59vELb2HhEWrGy9nuychepxFtj3wWYa", "name": "client_golang", - "version": "0.0.0" + "version": "0.1.0" }, { "hash": "Qma1FrGRasghpuETfCtsKdFtXKQffpNnakv3wG3QaMwCVi", @@ -239,6 +239,18 @@ "hash": "QmYrv4LgCC8FhG2Ab4bwuq5DqBdwMtx3hMb3KKJDZcr2d7", "name": "go-libp2p-loggables", "version": "1.0.11" + }, + { + "author": "ipfs", + "hash": "QmWTHakXvEmW44Muyy1wGGzoWA4tntuuvd8BhBbmLYBzSx", + "name": "go-metrics-prometheus", + "version": "0.1.1" + }, + { + "author": "ipfs", + "hash": "QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe", + "name": "go-metrics-interface", + "version": "0.1.1" } ], "gxVersion": "0.4.0", From 3251c29f15d8b01769935a82f58e236057dd5d77 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Mon, 5 Sep 2016 17:04:30 +0200 Subject: [PATCH 02/10] metrics: add hit counter for ARC and bloom caches License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/arc_cache.go | 16 +++++++++++++--- blocks/blockstore/arc_cache_test.go | 2 +- blocks/blockstore/bloom_cache.go | 11 +++++++++-- blocks/blockstore/caching.go | 6 +++++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/blocks/blockstore/arc_cache.go b/blocks/blockstore/arc_cache.go index da50bd470..e2293472f 100644 --- a/blocks/blockstore/arc_cache.go +++ b/blocks/blockstore/arc_cache.go @@ -1,9 +1,11 @@ package blockstore import ( - "github.com/ipfs/go-ipfs/blocks" key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" + "github.com/ipfs/go-ipfs/blocks" + + "gx/ipfs/QmRg1gKTHzc3CZXSKzem8aR4E3TubFhbgXwfVuWnSK5CC5/go-metrics-interface" lru "gx/ipfs/QmVYxfoJQiZijTgPNHCHgHELvQpbsJNTg6Crmc3dQkj3yy/golang-lru" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ds "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore" @@ -12,15 +14,21 @@ import ( type arccache struct { arc *lru.ARCCache blockstore Blockstore + + hits metrics.Counter + total metrics.Counter } -func arcCached(bs Blockstore, lruSize int) (*arccache, error) { +func newARCCachedBS(bs Blockstore, ctx context.Context, lruSize int) (*arccache, error) { arc, err := lru.NewARC(lruSize) if err != nil { return nil, err } + c := &arccache{arc: arc, blockstore: bs} + c.hits = metrics.NewCtx(ctx, "arc.hits_total", "Number of ARC cache hits").Counter() + c.total = metrics.NewCtx(ctx, "arc_total", "Total number of ARC cache requests").Counter() - return &arccache{arc: arc, blockstore: bs}, nil + return c, nil } func (b *arccache) DeleteBlock(k key.Key) error { @@ -42,6 +50,7 @@ func (b *arccache) DeleteBlock(k key.Key) error { // if ok == false has is inconclusive // if ok == true then has respons to question: is it contained func (b *arccache) hasCached(k key.Key) (has bool, ok bool) { + b.total.Inc() if k == "" { // Return cache invalid so the call to blockstore happens // in case of invalid key and correct error is created. @@ -50,6 +59,7 @@ func (b *arccache) hasCached(k key.Key) (has bool, ok bool) { h, ok := b.arc.Get(k) if ok { + b.hits.Inc() return h.(bool), true } return false, false diff --git a/blocks/blockstore/arc_cache_test.go b/blocks/blockstore/arc_cache_test.go index a8c2227b8..02caf1429 100644 --- a/blocks/blockstore/arc_cache_test.go +++ b/blocks/blockstore/arc_cache_test.go @@ -140,7 +140,7 @@ func TestGetAndDeleteFalseShortCircuit(t *testing.T) { } func TestArcCreationFailure(t *testing.T) { - if arc, err := arcCached(nil, -1); arc != nil || err == nil { + if arc, err := newARCCachedBS(nil, context.TODO(), -1); arc != nil || err == nil { t.Fatal("expected error and no cache") } } diff --git a/blocks/blockstore/bloom_cache.go b/blocks/blockstore/bloom_cache.go index af8422d0f..79bf81e31 100644 --- a/blocks/blockstore/bloom_cache.go +++ b/blocks/blockstore/bloom_cache.go @@ -6,6 +6,7 @@ import ( "github.com/ipfs/go-ipfs/blocks" key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" + "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" bloom "gx/ipfs/QmWQ2SJisXwcCLsUXLwYCKSfyExXjFRW2WbBH5sqCUnwX5/bbloom" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ) @@ -18,6 +19,10 @@ func bloomCached(bs Blockstore, ctx context.Context, bloomSize, hashCount int) ( return nil, err } bc := &bloomcache{blockstore: bs, bloom: bl} + bc.hits = metrics.NewCtx(ctx, "bloom.hits_total", + "Number of cache hits in bloom cache").Counter() + bc.total = metrics.NewCtx(ctx, "bloom_total", + "Total number of requests to bloom cache").Counter() bc.Invalidate() go bc.Rebuild(ctx) @@ -33,8 +38,8 @@ type bloomcache struct { blockstore Blockstore // Statistics - hits uint64 - misses uint64 + hits metrics.Counter + total metrics.Counter } func (b *bloomcache) Invalidate() { @@ -84,6 +89,7 @@ func (b *bloomcache) DeleteBlock(k key.Key) error { // if ok == false has is inconclusive // if ok == true then has respons to question: is it contained func (b *bloomcache) hasCached(k key.Key) (has bool, ok bool) { + b.total.Inc() if k == "" { // Return cache invalid so call to blockstore // in case of invalid key is forwarded deeper @@ -92,6 +98,7 @@ func (b *bloomcache) hasCached(k key.Key) (has bool, ok bool) { if b.BloomActive() { blr := b.bloom.HasTS([]byte(k)) if blr == false { // not contained in bloom is only conclusive answer bloom gives + b.hits.Inc() return false, true } } diff --git a/blocks/blockstore/caching.go b/blocks/blockstore/caching.go index f691f89f8..a0c4c27f5 100644 --- a/blocks/blockstore/caching.go +++ b/blocks/blockstore/caching.go @@ -3,6 +3,7 @@ package blockstore import ( "errors" + "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ) @@ -33,11 +34,14 @@ func CachedBlockstore(bs GCBlockstore, if opts.HasBloomFilterSize != 0 && opts.HasBloomFilterHashes == 0 { return nil, errors.New("bloom filter hash count can't be 0 when there is size set") } + + ctx = metrics.CtxSubScope(ctx, "bs.cache") + if opts.HasBloomFilterSize != 0 { cbs, err = bloomCached(cbs, ctx, opts.HasBloomFilterSize, opts.HasBloomFilterHashes) } if opts.HasARCCacheSize > 0 { - cbs, err = arcCached(cbs, opts.HasARCCacheSize) + cbs, err = newARCCachedBS(cbs, ctx, opts.HasARCCacheSize) } return cbs, err From 66a031f17cb26d094648d0001120926eee01b6ca Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Mon, 5 Sep 2016 17:05:36 +0200 Subject: [PATCH 03/10] blockstore: move ARC cache below the bloom cache ARC cache is influenced by requests and bloom isn't This means that if bloom is able to remove some requests caching them in ARC is pointless. License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/caching.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blocks/blockstore/caching.go b/blocks/blockstore/caching.go index a0c4c27f5..8e2c6cad1 100644 --- a/blocks/blockstore/caching.go +++ b/blocks/blockstore/caching.go @@ -37,12 +37,12 @@ func CachedBlockstore(bs GCBlockstore, ctx = metrics.CtxSubScope(ctx, "bs.cache") - if opts.HasBloomFilterSize != 0 { - cbs, err = bloomCached(cbs, ctx, opts.HasBloomFilterSize, opts.HasBloomFilterHashes) - } if opts.HasARCCacheSize > 0 { cbs, err = newARCCachedBS(cbs, ctx, opts.HasARCCacheSize) } + if opts.HasBloomFilterSize != 0 { + cbs, err = bloomCached(cbs, ctx, opts.HasBloomFilterSize, opts.HasBloomFilterHashes) + } return cbs, err } From d1237f1c900829c503feb61e0e0204e5490a086a Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 6 Sep 2016 08:03:05 +0200 Subject: [PATCH 04/10] blockstore: change order of newARCCachedBS parmaeters so the context is first one License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/arc_cache.go | 2 +- blocks/blockstore/arc_cache_test.go | 2 +- blocks/blockstore/caching.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/blocks/blockstore/arc_cache.go b/blocks/blockstore/arc_cache.go index e2293472f..5cc2ff433 100644 --- a/blocks/blockstore/arc_cache.go +++ b/blocks/blockstore/arc_cache.go @@ -19,7 +19,7 @@ type arccache struct { total metrics.Counter } -func newARCCachedBS(bs Blockstore, ctx context.Context, lruSize int) (*arccache, error) { +func newARCCachedBS(ctx context.Context, bs Blockstore, lruSize int) (*arccache, error) { arc, err := lru.NewARC(lruSize) if err != nil { return nil, err diff --git a/blocks/blockstore/arc_cache_test.go b/blocks/blockstore/arc_cache_test.go index 02caf1429..eb8086a79 100644 --- a/blocks/blockstore/arc_cache_test.go +++ b/blocks/blockstore/arc_cache_test.go @@ -140,7 +140,7 @@ func TestGetAndDeleteFalseShortCircuit(t *testing.T) { } func TestArcCreationFailure(t *testing.T) { - if arc, err := newARCCachedBS(nil, context.TODO(), -1); arc != nil || err == nil { + if arc, err := newARCCachedBS(context.TODO(), nil, -1); arc != nil || err == nil { t.Fatal("expected error and no cache") } } diff --git a/blocks/blockstore/caching.go b/blocks/blockstore/caching.go index 8e2c6cad1..08a841d5f 100644 --- a/blocks/blockstore/caching.go +++ b/blocks/blockstore/caching.go @@ -38,7 +38,7 @@ func CachedBlockstore(bs GCBlockstore, ctx = metrics.CtxSubScope(ctx, "bs.cache") if opts.HasARCCacheSize > 0 { - cbs, err = newARCCachedBS(cbs, ctx, opts.HasARCCacheSize) + cbs, err = newARCCachedBS(ctx, cbs, opts.HasARCCacheSize) } if opts.HasBloomFilterSize != 0 { cbs, err = bloomCached(cbs, ctx, opts.HasBloomFilterSize, opts.HasBloomFilterHashes) From 95dca1ecdf4a77a21ec19d2f01fe7bce7eaffff1 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 6 Sep 2016 09:17:42 +0200 Subject: [PATCH 05/10] blockstore: update bbloom License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/bloom_cache.go | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/blocks/blockstore/bloom_cache.go b/blocks/blockstore/bloom_cache.go index 79bf81e31..0eafb7203 100644 --- a/blocks/blockstore/bloom_cache.go +++ b/blocks/blockstore/bloom_cache.go @@ -7,8 +7,8 @@ import ( key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" - bloom "gx/ipfs/QmWQ2SJisXwcCLsUXLwYCKSfyExXjFRW2WbBH5sqCUnwX5/bbloom" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" + bloom "gx/ipfs/QmeiMCBkYHxkDkDfnDadzz4YxY5ruL5Pj499essE4vRsGM/bbloom" ) // bloomCached returns Blockstore that caches Has requests using Bloom filter diff --git a/package.json b/package.json index 3221625e1..0c4675cf9 100644 --- a/package.json +++ b/package.json @@ -170,9 +170,9 @@ }, { "author": "kubuxu", - "hash": "QmWQ2SJisXwcCLsUXLwYCKSfyExXjFRW2WbBH5sqCUnwX5", + "hash": "QmeiMCBkYHxkDkDfnDadzz4YxY5ruL5Pj499essE4vRsGM", "name": "bbloom", - "version": "0.0.2" + "version": "0.1.0" }, { "author": "whyrusleeping", From 5f0be2eaa94ca703ab0d64935f357ab11a0dec35 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 6 Sep 2016 09:46:06 +0200 Subject: [PATCH 06/10] blockstore: add Bloom fill ratio metric License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/bloom_cache.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/blocks/blockstore/bloom_cache.go b/blocks/blockstore/bloom_cache.go index 0eafb7203..03fa58348 100644 --- a/blocks/blockstore/bloom_cache.go +++ b/blocks/blockstore/bloom_cache.go @@ -2,6 +2,7 @@ package blockstore import ( "sync/atomic" + "time" "github.com/ipfs/go-ipfs/blocks" key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" @@ -23,9 +24,25 @@ func bloomCached(bs Blockstore, ctx context.Context, bloomSize, hashCount int) ( "Number of cache hits in bloom cache").Counter() bc.total = metrics.NewCtx(ctx, "bloom_total", "Total number of requests to bloom cache").Counter() + + fill := metrics.NewCtx(ctx, "bloom_fill_ratio", + "Ratio of bloom filter fullnes, (updated once a minute)").Gauge() + bc.Invalidate() go bc.Rebuild(ctx) - + go func() { + <-bc.rebuildChan + t := time.NewTicker(1 * time.Minute) + for { + select { + case <-ctx.Done(): + t.Stop() + return + case <-t.C: + fill.Set(bc.bloom.FillRatio()) + } + } + }() return bc, nil } From 7faa32459af68ee8b49b7ec2bf54030b31a0f139 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 6 Sep 2016 09:49:59 +0200 Subject: [PATCH 07/10] metrics: fix peer number metric in offline mode License: MIT Signed-off-by: Jakub Sztandera --- core/corehttp/metrics.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/corehttp/metrics.go b/core/corehttp/metrics.go index 5e16d04f4..0ef0ba6f4 100644 --- a/core/corehttp/metrics.go +++ b/core/corehttp/metrics.go @@ -53,6 +53,9 @@ func (c IpfsNodeCollector) Collect(ch chan<- prometheus.Metric) { func (c IpfsNodeCollector) PeersTotalValues() map[string]float64 { vals := make(map[string]float64) + if c.Node.PeerHost == nil { + return vals + } for _, conn := range c.Node.PeerHost.Network().Conns() { tr := "" for _, proto := range conn.RemoteMultiaddr().Protocols() { From a5899a4fb9a3fa03b25254b3bcf4a512573dc838 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Wed, 7 Sep 2016 18:12:16 +0200 Subject: [PATCH 08/10] deps: update go-metrics-interface and -prometheus to 0.1.2 License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/bloom_cache.go | 2 +- blocks/blockstore/caching.go | 2 +- cmd/ipfs/daemon.go | 2 +- core/builder.go | 2 +- package.json | 8 ++++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/blocks/blockstore/bloom_cache.go b/blocks/blockstore/bloom_cache.go index 03fa58348..1f54e5482 100644 --- a/blocks/blockstore/bloom_cache.go +++ b/blocks/blockstore/bloom_cache.go @@ -7,7 +7,7 @@ import ( "github.com/ipfs/go-ipfs/blocks" key "gx/ipfs/Qmce4Y4zg3sYr7xKM5UueS67vhNni6EeWgCRnb7MbLJMew/go-key" - "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" + "gx/ipfs/QmRg1gKTHzc3CZXSKzem8aR4E3TubFhbgXwfVuWnSK5CC5/go-metrics-interface" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" bloom "gx/ipfs/QmeiMCBkYHxkDkDfnDadzz4YxY5ruL5Pj499essE4vRsGM/bbloom" ) diff --git a/blocks/blockstore/caching.go b/blocks/blockstore/caching.go index 08a841d5f..d482e0459 100644 --- a/blocks/blockstore/caching.go +++ b/blocks/blockstore/caching.go @@ -3,7 +3,7 @@ package blockstore import ( "errors" - "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" + "gx/ipfs/QmRg1gKTHzc3CZXSKzem8aR4E3TubFhbgXwfVuWnSK5CC5/go-metrics-interface" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 1aa1c9ce4..0ea566c1e 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -28,8 +28,8 @@ import ( util "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util" pstore "gx/ipfs/QmdMfSLMDBDYhtc4oF3NYGCZr5dy4wQb6Ji26N4D4mdxa2/go-libp2p-peerstore" + _ "gx/ipfs/QmSd7rE8qjihopcQpg7VXzcPX8X4FJ5XkXVkUQggmmWyvG/go-metrics-prometheus" _ "gx/ipfs/QmV3NSS3A1kX5s28r7yLczhDsXzkgo65cqRgKFXYunWZmD/metrics/runtime" - _ "gx/ipfs/QmWTHakXvEmW44Muyy1wGGzoWA4tntuuvd8BhBbmLYBzSx/go-metrics-prometheus" ) const ( diff --git a/core/builder.go b/core/builder.go index d578f54d2..ea6fb4d45 100644 --- a/core/builder.go +++ b/core/builder.go @@ -18,8 +18,8 @@ import ( cfg "github.com/ipfs/go-ipfs/repo/config" retry "gx/ipfs/QmPF5kxTYFkzhaY5LmkExood7aTTZBHWQC6cjdDQBuGrjp/retry-datastore" + metrics "gx/ipfs/QmRg1gKTHzc3CZXSKzem8aR4E3TubFhbgXwfVuWnSK5CC5/go-metrics-interface" goprocessctx "gx/ipfs/QmSF8fPo3jgVBAy8fpdjjYqgG87dkJgUprRBHRd2tmfgpP/goprocess/context" - metrics "gx/ipfs/QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe/go-metrics-interface" ci "gx/ipfs/QmVoi5es8D5fNHZDqoW6DgDAEPEV5hQp8GBz161vZXiwpQ/go-libp2p-crypto" context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ds "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore" diff --git a/package.json b/package.json index 0c4675cf9..c8e457a07 100644 --- a/package.json +++ b/package.json @@ -242,15 +242,15 @@ }, { "author": "ipfs", - "hash": "QmWTHakXvEmW44Muyy1wGGzoWA4tntuuvd8BhBbmLYBzSx", + "hash": "QmSd7rE8qjihopcQpg7VXzcPX8X4FJ5XkXVkUQggmmWyvG", "name": "go-metrics-prometheus", - "version": "0.1.1" + "version": "0.1.2" }, { "author": "ipfs", - "hash": "QmVWBQQAz4Cd2XgW9KgQoqXXrU8KJoCb9WCrhWRFVBKvFe", + "hash": "QmRg1gKTHzc3CZXSKzem8aR4E3TubFhbgXwfVuWnSK5CC5", "name": "go-metrics-interface", - "version": "0.1.1" + "version": "0.1.2" } ], "gxVersion": "0.4.0", From c7d89662a153cca35fcfd9c57ff64646dd2bb91c Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Wed, 7 Sep 2016 18:32:35 +0200 Subject: [PATCH 09/10] metrics: do not run bloom fillrate collector when metrics are inactive License: MIT Signed-off-by: Jakub Sztandera --- blocks/blockstore/bloom_cache.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/blocks/blockstore/bloom_cache.go b/blocks/blockstore/bloom_cache.go index 1f54e5482..9607561cb 100644 --- a/blocks/blockstore/bloom_cache.go +++ b/blocks/blockstore/bloom_cache.go @@ -25,24 +25,26 @@ func bloomCached(bs Blockstore, ctx context.Context, bloomSize, hashCount int) ( bc.total = metrics.NewCtx(ctx, "bloom_total", "Total number of requests to bloom cache").Counter() - fill := metrics.NewCtx(ctx, "bloom_fill_ratio", - "Ratio of bloom filter fullnes, (updated once a minute)").Gauge() - bc.Invalidate() go bc.Rebuild(ctx) - go func() { - <-bc.rebuildChan - t := time.NewTicker(1 * time.Minute) - for { - select { - case <-ctx.Done(): - t.Stop() - return - case <-t.C: - fill.Set(bc.bloom.FillRatio()) + if metrics.Active() { + go func() { + fill := metrics.NewCtx(ctx, "bloom_fill_ratio", + "Ratio of bloom filter fullnes, (updated once a minute)").Gauge() + + <-bc.rebuildChan + t := time.NewTicker(1 * time.Minute) + for { + select { + case <-ctx.Done(): + t.Stop() + return + case <-t.C: + fill.Set(bc.bloom.FillRatio()) + } } - } - }() + }() + } return bc, nil } From 9cbeffa376f19f09b3ad9f78d387da6be762d01d Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Mon, 12 Sep 2016 19:27:33 +0200 Subject: [PATCH 10/10] metrics: do explicit metrics injection License: MIT Signed-off-by: Jakub Sztandera --- cmd/ipfs/daemon.go | 7 ++++++- package.json | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 0ea566c1e..dd7649460 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -23,12 +23,13 @@ import ( "gx/ipfs/QmPpRcbNUXauP3zWZ1NJMLWpe4QnmEHrd2ba2D3yqWznw7/go-multiaddr-net" "gx/ipfs/QmR3KwhXCRLTNZB59vELb2HhEWrGy9nuychepxFtj3wWYa/client_golang/prometheus" + conn "gx/ipfs/QmUuwQUJmtvC6ReYcu7xaYKEUM3pD46H18dFn3LBhVt2Di/go-libp2p/p2p/net/conn" + mprome "gx/ipfs/QmXWro6iddJRbGWUoZDpTu6tjo5EXX4xJHHR9VczeoGZbw/go-metrics-prometheus" ma "gx/ipfs/QmYzDkkgAEmrcNzFCiYo6L1dTX4EAG1gZkbtdbd9trL4vd/go-multiaddr" util "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util" pstore "gx/ipfs/QmdMfSLMDBDYhtc4oF3NYGCZr5dy4wQb6Ji26N4D4mdxa2/go-libp2p-peerstore" - _ "gx/ipfs/QmSd7rE8qjihopcQpg7VXzcPX8X4FJ5XkXVkUQggmmWyvG/go-metrics-prometheus" _ "gx/ipfs/QmV3NSS3A1kX5s28r7yLczhDsXzkgo65cqRgKFXYunWZmD/metrics/runtime" ) @@ -360,6 +361,10 @@ func daemonFunc(req cmds.Request, res cmds.Response) { } // initialize metrics collector + err = mprome.Inject() + if err != nil { + log.Warningf("Injecting prometheus handler for metrics failed with message: %s\n", err.Error()) + } prometheus.MustRegister(&corehttp.IpfsNodeCollector{Node: node}) fmt.Printf("Daemon is ready\n") diff --git a/package.json b/package.json index c8e457a07..d28c1f3cd 100644 --- a/package.json +++ b/package.json @@ -242,9 +242,9 @@ }, { "author": "ipfs", - "hash": "QmSd7rE8qjihopcQpg7VXzcPX8X4FJ5XkXVkUQggmmWyvG", + "hash": "QmXWro6iddJRbGWUoZDpTu6tjo5EXX4xJHHR9VczeoGZbw", "name": "go-metrics-prometheus", - "version": "0.1.2" + "version": "0.3.0" }, { "author": "ipfs",