summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/prometheus/procfs/bcache
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-04-16 05:37:14 -0700
committerJoram Wilander <jwawilander@gmail.com>2018-04-16 08:37:14 -0400
commit6e2cb00008cbf09e556b00f87603797fcaa47e09 (patch)
tree3c0eb55ff4226a3f024aad373140d1fb860a6404 /vendor/github.com/prometheus/procfs/bcache
parentbf24f51c4e1cc6286885460672f7f449e8c6f5ef (diff)
downloadchat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.gz
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.bz2
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.zip
Depenancy upgrades and movign to dep. (#8630)
Diffstat (limited to 'vendor/github.com/prometheus/procfs/bcache')
-rw-r--r--vendor/github.com/prometheus/procfs/bcache/bcache.go84
-rw-r--r--vendor/github.com/prometheus/procfs/bcache/get.go330
-rw-r--r--vendor/github.com/prometheus/procfs/bcache/get_test.go114
3 files changed, 0 insertions, 528 deletions
diff --git a/vendor/github.com/prometheus/procfs/bcache/bcache.go b/vendor/github.com/prometheus/procfs/bcache/bcache.go
deleted file mode 100644
index 1db178cec..000000000
--- a/vendor/github.com/prometheus/procfs/bcache/bcache.go
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2017 The Prometheus Authors
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package bcache provides access to statistics exposed by the bcache (Linux
-// block cache).
-package bcache
-
-// Stats contains bcache runtime statistics, parsed from /sys/fs/bcache/.
-//
-// The names and meanings of each statistic were taken from bcache.txt and
-// files in drivers/md/bcache in the Linux kernel source. Counters are uint64
-// (in-kernel counters are mostly unsigned long).
-type Stats struct {
- // The name of the bcache used to source these statistics.
- Name string
- Bcache BcacheStats
- Bdevs []BdevStats
- Caches []CacheStats
-}
-
-// BcacheStats contains statistics tied to a bcache ID.
-type BcacheStats struct {
- AverageKeySize uint64
- BtreeCacheSize uint64
- CacheAvailablePercent uint64
- Congested uint64
- RootUsagePercent uint64
- TreeDepth uint64
- Internal InternalStats
- FiveMin PeriodStats
- Total PeriodStats
-}
-
-// BdevStats contains statistics for one backing device.
-type BdevStats struct {
- Name string
- DirtyData uint64
- FiveMin PeriodStats
- Total PeriodStats
-}
-
-// CacheStats contains statistics for one cache device.
-type CacheStats struct {
- Name string
- IOErrors uint64
- MetadataWritten uint64
- Written uint64
- Priority PriorityStats
-}
-
-// PriorityStats contains statistics from the priority_stats file.
-type PriorityStats struct {
- UnusedPercent uint64
- MetadataPercent uint64
-}
-
-// InternalStats contains internal bcache statistics.
-type InternalStats struct {
- ActiveJournalEntries uint64
- BtreeNodes uint64
- BtreeReadAverageDurationNanoSeconds uint64
- CacheReadRaces uint64
-}
-
-// PeriodStats contains statistics for a time period (5 min or total).
-type PeriodStats struct {
- Bypassed uint64
- CacheBypassHits uint64
- CacheBypassMisses uint64
- CacheHits uint64
- CacheMissCollisions uint64
- CacheMisses uint64
- CacheReadaheads uint64
-}
diff --git a/vendor/github.com/prometheus/procfs/bcache/get.go b/vendor/github.com/prometheus/procfs/bcache/get.go
deleted file mode 100644
index b6d97de15..000000000
--- a/vendor/github.com/prometheus/procfs/bcache/get.go
+++ /dev/null
@@ -1,330 +0,0 @@
-// Copyright 2017 The Prometheus Authors
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package bcache
-
-import (
- "bufio"
- "fmt"
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
- "strconv"
- "strings"
-)
-
-// ParsePseudoFloat parses the peculiar format produced by bcache's bch_hprint.
-func parsePseudoFloat(str string) (float64, error) {
- ss := strings.Split(str, ".")
-
- intPart, err := strconv.ParseFloat(ss[0], 64)
- if err != nil {
- return 0, err
- }
-
- if len(ss) == 1 {
- // Pure integers are fine.
- return intPart, nil
- }
- fracPart, err := strconv.ParseFloat(ss[1], 64)
- if err != nil {
- return 0, err
- }
- // fracPart is a number between 0 and 1023 divided by 100; it is off
- // by a small amount. Unexpected bumps in time lines may occur because
- // for bch_hprint .1 != .10 and .10 > .9 (at least up to Linux
- // v4.12-rc3).
-
- // Restore the proper order:
- fracPart = fracPart / 10.24
- return intPart + fracPart, nil
-}
-
-// Dehumanize converts a human-readable byte slice into a uint64.
-func dehumanize(hbytes []byte) (uint64, error) {
- ll := len(hbytes)
- if ll == 0 {
- return 0, fmt.Errorf("zero-length reply")
- }
- lastByte := hbytes[ll-1]
- mul := float64(1)
- var (
- mant float64
- err error
- )
- // If lastByte is beyond the range of ASCII digits, it must be a
- // multiplier.
- if lastByte > 57 {
- // Remove multiplier from slice.
- hbytes = hbytes[:len(hbytes)-1]
-
- const (
- _ = 1 << (10 * iota)
- KiB
- MiB
- GiB
- TiB
- PiB
- EiB
- ZiB
- YiB
- )
-
- multipliers := map[rune]float64{
- // Source for conversion rules:
- // linux-kernel/drivers/md/bcache/util.c:bch_hprint()
- 'k': KiB,
- 'M': MiB,
- 'G': GiB,
- 'T': TiB,
- 'P': PiB,
- 'E': EiB,
- 'Z': ZiB,
- 'Y': YiB,
- }
- mul = multipliers[rune(lastByte)]
- mant, err = parsePseudoFloat(string(hbytes))
- if err != nil {
- return 0, err
- }
- } else {
- // Not humanized by bch_hprint
- mant, err = strconv.ParseFloat(string(hbytes), 64)
- if err != nil {
- return 0, err
- }
- }
- res := uint64(mant * mul)
- return res, nil
-}
-
-type parser struct {
- uuidPath string
- subDir string
- currentDir string
- err error
-}
-
-func (p *parser) setSubDir(pathElements ...string) {
- p.subDir = path.Join(pathElements...)
- p.currentDir = path.Join(p.uuidPath, p.subDir)
-}
-
-func (p *parser) readValue(fileName string) uint64 {
- if p.err != nil {
- return 0
- }
- path := path.Join(p.currentDir, fileName)
- byt, err := ioutil.ReadFile(path)
- if err != nil {
- p.err = fmt.Errorf("failed to read: %s", path)
- return 0
- }
- // Remove trailing newline.
- byt = byt[:len(byt)-1]
- res, err := dehumanize(byt)
- p.err = err
- return res
-}
-
-// ParsePriorityStats parses lines from the priority_stats file.
-func parsePriorityStats(line string, ps *PriorityStats) error {
- var (
- value uint64
- err error
- )
- switch {
- case strings.HasPrefix(line, "Unused:"):
- fields := strings.Fields(line)
- rawValue := fields[len(fields)-1]
- valueStr := strings.TrimSuffix(rawValue, "%")
- value, err = strconv.ParseUint(valueStr, 10, 64)
- if err != nil {
- return err
- }
- ps.UnusedPercent = value
- case strings.HasPrefix(line, "Metadata:"):
- fields := strings.Fields(line)
- rawValue := fields[len(fields)-1]
- valueStr := strings.TrimSuffix(rawValue, "%")
- value, err = strconv.ParseUint(valueStr, 10, 64)
- if err != nil {
- return err
- }
- ps.MetadataPercent = value
- }
- return nil
-}
-
-func (p *parser) getPriorityStats() PriorityStats {
- var res PriorityStats
-
- if p.err != nil {
- return res
- }
-
- path := path.Join(p.currentDir, "priority_stats")
-
- file, err := os.Open(path)
- if err != nil {
- p.err = fmt.Errorf("failed to read: %s", path)
- return res
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- err = parsePriorityStats(scanner.Text(), &res)
- if err != nil {
- p.err = fmt.Errorf("failed to parse: %s (%s)", path, err)
- return res
- }
- }
- if err := scanner.Err(); err != nil {
- p.err = fmt.Errorf("failed to parse: %s (%s)", path, err)
- return res
- }
- return res
-}
-
-// GetStats collects from sysfs files data tied to one bcache ID.
-func GetStats(uuidPath string) (*Stats, error) {
- var bs Stats
-
- par := parser{uuidPath: uuidPath}
-
- // bcache stats
-
- // dir <uuidPath>
- par.setSubDir("")
- bs.Bcache.AverageKeySize = par.readValue("average_key_size")
- bs.Bcache.BtreeCacheSize = par.readValue("btree_cache_size")
- bs.Bcache.CacheAvailablePercent = par.readValue("cache_available_percent")
- bs.Bcache.Congested = par.readValue("congested")
- bs.Bcache.RootUsagePercent = par.readValue("root_usage_percent")
- bs.Bcache.TreeDepth = par.readValue("tree_depth")
-
- // bcache stats (internal)
-
- // dir <uuidPath>/internal
- par.setSubDir("internal")
- bs.Bcache.Internal.ActiveJournalEntries = par.readValue("active_journal_entries")
- bs.Bcache.Internal.BtreeNodes = par.readValue("btree_nodes")
- bs.Bcache.Internal.BtreeReadAverageDurationNanoSeconds = par.readValue("btree_read_average_duration_us")
- bs.Bcache.Internal.CacheReadRaces = par.readValue("cache_read_races")
-
- // bcache stats (period)
-
- // dir <uuidPath>/stats_five_minute
- par.setSubDir("stats_five_minute")
- bs.Bcache.FiveMin.Bypassed = par.readValue("bypassed")
- bs.Bcache.FiveMin.CacheHits = par.readValue("cache_hits")
-
- bs.Bcache.FiveMin.Bypassed = par.readValue("bypassed")
- bs.Bcache.FiveMin.CacheBypassHits = par.readValue("cache_bypass_hits")
- bs.Bcache.FiveMin.CacheBypassMisses = par.readValue("cache_bypass_misses")
- bs.Bcache.FiveMin.CacheHits = par.readValue("cache_hits")
- bs.Bcache.FiveMin.CacheMissCollisions = par.readValue("cache_miss_collisions")
- bs.Bcache.FiveMin.CacheMisses = par.readValue("cache_misses")
- bs.Bcache.FiveMin.CacheReadaheads = par.readValue("cache_readaheads")
-
- // dir <uuidPath>/stats_total
- par.setSubDir("stats_total")
- bs.Bcache.Total.Bypassed = par.readValue("bypassed")
- bs.Bcache.Total.CacheHits = par.readValue("cache_hits")
-
- bs.Bcache.Total.Bypassed = par.readValue("bypassed")
- bs.Bcache.Total.CacheBypassHits = par.readValue("cache_bypass_hits")
- bs.Bcache.Total.CacheBypassMisses = par.readValue("cache_bypass_misses")
- bs.Bcache.Total.CacheHits = par.readValue("cache_hits")
- bs.Bcache.Total.CacheMissCollisions = par.readValue("cache_miss_collisions")
- bs.Bcache.Total.CacheMisses = par.readValue("cache_misses")
- bs.Bcache.Total.CacheReadaheads = par.readValue("cache_readaheads")
-
- if par.err != nil {
- return nil, par.err
- }
-
- // bdev stats
-
- reg := path.Join(uuidPath, "bdev[0-9]*")
- bdevDirs, err := filepath.Glob(reg)
- if err != nil {
- return nil, err
- }
-
- bs.Bdevs = make([]BdevStats, len(bdevDirs))
-
- for ii, bdevDir := range bdevDirs {
- var bds = &bs.Bdevs[ii]
-
- bds.Name = filepath.Base(bdevDir)
-
- par.setSubDir(bds.Name)
- bds.DirtyData = par.readValue("dirty_data")
-
- // dir <uuidPath>/<bds.Name>/stats_five_minute
- par.setSubDir(bds.Name, "stats_five_minute")
- bds.FiveMin.Bypassed = par.readValue("bypassed")
- bds.FiveMin.CacheBypassHits = par.readValue("cache_bypass_hits")
- bds.FiveMin.CacheBypassMisses = par.readValue("cache_bypass_misses")
- bds.FiveMin.CacheHits = par.readValue("cache_hits")
- bds.FiveMin.CacheMissCollisions = par.readValue("cache_miss_collisions")
- bds.FiveMin.CacheMisses = par.readValue("cache_misses")
- bds.FiveMin.CacheReadaheads = par.readValue("cache_readaheads")
-
- // dir <uuidPath>/<bds.Name>/stats_total
- par.setSubDir("stats_total")
- bds.Total.Bypassed = par.readValue("bypassed")
- bds.Total.CacheBypassHits = par.readValue("cache_bypass_hits")
- bds.Total.CacheBypassMisses = par.readValue("cache_bypass_misses")
- bds.Total.CacheHits = par.readValue("cache_hits")
- bds.Total.CacheMissCollisions = par.readValue("cache_miss_collisions")
- bds.Total.CacheMisses = par.readValue("cache_misses")
- bds.Total.CacheReadaheads = par.readValue("cache_readaheads")
- }
-
- if par.err != nil {
- return nil, par.err
- }
-
- // cache stats
-
- reg = path.Join(uuidPath, "cache[0-9]*")
- cacheDirs, err := filepath.Glob(reg)
- if err != nil {
- return nil, err
- }
- bs.Caches = make([]CacheStats, len(cacheDirs))
-
- for ii, cacheDir := range cacheDirs {
- var cs = &bs.Caches[ii]
- cs.Name = filepath.Base(cacheDir)
-
- // dir is <uuidPath>/<cs.Name>
- par.setSubDir(cs.Name)
- cs.IOErrors = par.readValue("io_errors")
- cs.MetadataWritten = par.readValue("metadata_written")
- cs.Written = par.readValue("written")
-
- ps := par.getPriorityStats()
- cs.Priority = ps
- }
-
- if par.err != nil {
- return nil, par.err
- }
-
- return &bs, nil
-}
diff --git a/vendor/github.com/prometheus/procfs/bcache/get_test.go b/vendor/github.com/prometheus/procfs/bcache/get_test.go
deleted file mode 100644
index 1d41a5ad3..000000000
--- a/vendor/github.com/prometheus/procfs/bcache/get_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2017 The Prometheus Authors
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package bcache
-
-import (
- "math"
- "testing"
-)
-
-func TestDehumanizeTests(t *testing.T) {
- dehumanizeTests := []struct {
- in []byte
- out uint64
- invalid bool
- }{
- {
- in: []byte("542k"),
- out: 555008,
- },
- {
- in: []byte("322M"),
- out: 337641472,
- },
- {
- in: []byte("1.1k"),
- out: 1124,
- },
- {
- in: []byte("1.9k"),
- out: 1924,
- },
- {
- in: []byte("1.10k"),
- out: 2024,
- },
- {
- in: []byte(""),
- out: 0,
- invalid: true,
- },
- }
- for _, tst := range dehumanizeTests {
- got, err := dehumanize(tst.in)
- if tst.invalid && err == nil {
- t.Error("expected an error, but none occurred")
- }
- if !tst.invalid && err != nil {
- t.Errorf("unexpected error: %v", err)
- }
- if got != tst.out {
- t.Errorf("dehumanize: '%s', want %d, got %d", tst.in, tst.out, got)
- }
- }
-}
-
-func TestParsePseudoFloatTests(t *testing.T) {
- parsePseudoFloatTests := []struct {
- in string
- out float64
- }{
- {
- in: "1.1",
- out: float64(1.097656),
- },
- {
- in: "1.9",
- out: float64(1.878906),
- },
- {
- in: "1.10",
- out: float64(1.976562),
- },
- }
- for _, tst := range parsePseudoFloatTests {
- got, err := parsePseudoFloat(tst.in)
- if err != nil || math.Abs(got-tst.out) > 0.0001 {
- t.Errorf("parsePseudoFloat: %s, want %f, got %f", tst.in, tst.out, got)
- }
- }
-}
-
-func TestPriorityStats(t *testing.T) {
- var want = PriorityStats{
- UnusedPercent: 99,
- MetadataPercent: 5,
- }
- var (
- in string
- gotErr error
- got PriorityStats
- )
- in = "Metadata: 5%"
- gotErr = parsePriorityStats(in, &got)
- if gotErr != nil || got.MetadataPercent != want.MetadataPercent {
- t.Errorf("parsePriorityStats: '%s', want %d, got %d", in, want.MetadataPercent, got.MetadataPercent)
- }
-
- in = "Unused: 99%"
- gotErr = parsePriorityStats(in, &got)
- if gotErr != nil || got.UnusedPercent != want.UnusedPercent {
- t.Errorf("parsePriorityStats: '%s', want %d, got %d", in, want.UnusedPercent, got.UnusedPercent)
- }
-}