Remove FreeBSD support for zfs plugin.

This also involves removing zfs_zpool code for now.

Signed-Off-By: Corey Stewart <stewa169@purdue.edu>
Signed-Off-By: Joe Handzik <joseph.t.handzik@hpe.com>
This commit is contained in:
Corey Stewart 2016-12-08 10:06:53 -05:00 committed by Joe Handzik
parent a8c94d48e6
commit 10ba27bf2c
7 changed files with 3 additions and 369 deletions

View file

@ -1,78 +0,0 @@
kstat.zfs.misc.arcstats.arc_meta_max: 1503210048
kstat.zfs.misc.arcstats.arc_meta_limit: 393216000
kstat.zfs.misc.arcstats.arc_meta_used: 392649848
kstat.zfs.misc.arcstats.duplicate_reads: 0
kstat.zfs.misc.arcstats.duplicate_buffers_size: 0
kstat.zfs.misc.arcstats.duplicate_buffers: 0
kstat.zfs.misc.arcstats.memory_throttle_count: 0
kstat.zfs.misc.arcstats.l2_write_buffer_list_null_iter: 0
kstat.zfs.misc.arcstats.l2_write_buffer_list_iter: 0
kstat.zfs.misc.arcstats.l2_write_buffer_bytes_scanned: 0
kstat.zfs.misc.arcstats.l2_write_pios: 0
kstat.zfs.misc.arcstats.l2_write_buffer_iter: 0
kstat.zfs.misc.arcstats.l2_write_full: 0
kstat.zfs.misc.arcstats.l2_write_not_cacheable: 29425
kstat.zfs.misc.arcstats.l2_write_io_in_progress: 0
kstat.zfs.misc.arcstats.l2_write_in_l2: 0
kstat.zfs.misc.arcstats.l2_write_spa_mismatch: 0
kstat.zfs.misc.arcstats.l2_write_passed_headroom: 0
kstat.zfs.misc.arcstats.l2_write_trylock_fail: 0
kstat.zfs.misc.arcstats.l2_compress_failures: 0
kstat.zfs.misc.arcstats.l2_compress_zeros: 0
kstat.zfs.misc.arcstats.l2_compress_successes: 0
kstat.zfs.misc.arcstats.l2_hdr_size: 0
kstat.zfs.misc.arcstats.l2_asize: 0
kstat.zfs.misc.arcstats.l2_size: 0
kstat.zfs.misc.arcstats.l2_io_error: 0
kstat.zfs.misc.arcstats.l2_cksum_bad: 0
kstat.zfs.misc.arcstats.l2_abort_lowmem: 0
kstat.zfs.misc.arcstats.l2_cdata_free_on_write: 0
kstat.zfs.misc.arcstats.l2_free_on_write: 0
kstat.zfs.misc.arcstats.l2_evict_reading: 0
kstat.zfs.misc.arcstats.l2_evict_lock_retry: 0
kstat.zfs.misc.arcstats.l2_writes_hdr_miss: 0
kstat.zfs.misc.arcstats.l2_writes_error: 0
kstat.zfs.misc.arcstats.l2_writes_done: 0
kstat.zfs.misc.arcstats.l2_writes_sent: 0
kstat.zfs.misc.arcstats.l2_write_bytes: 0
kstat.zfs.misc.arcstats.l2_read_bytes: 0
kstat.zfs.misc.arcstats.l2_rw_clash: 0
kstat.zfs.misc.arcstats.l2_feeds: 0
kstat.zfs.misc.arcstats.l2_misses: 0
kstat.zfs.misc.arcstats.l2_hits: 0
kstat.zfs.misc.arcstats.other_size: 166832272
kstat.zfs.misc.arcstats.data_size: 1200779776
kstat.zfs.misc.arcstats.hdr_size: 27244008
kstat.zfs.misc.arcstats.size: 1394856056
kstat.zfs.misc.arcstats.c_max: 1572864000
kstat.zfs.misc.arcstats.c_min: 196608000
kstat.zfs.misc.arcstats.c: 1470553736
kstat.zfs.misc.arcstats.p: 665524427
kstat.zfs.misc.arcstats.hash_chain_max: 7
kstat.zfs.misc.arcstats.hash_chains: 14180
kstat.zfs.misc.arcstats.hash_collisions: 2180398
kstat.zfs.misc.arcstats.hash_elements_max: 238188
kstat.zfs.misc.arcstats.hash_elements: 111458
kstat.zfs.misc.arcstats.evict_l2_ineligible: 60262400
kstat.zfs.misc.arcstats.evict_l2_eligible: 35702978560
kstat.zfs.misc.arcstats.evict_l2_cached: 0
kstat.zfs.misc.arcstats.evict_skip: 21716568
kstat.zfs.misc.arcstats.mutex_miss: 873
kstat.zfs.misc.arcstats.recycle_miss: 5018771
kstat.zfs.misc.arcstats.stolen: 1327563
kstat.zfs.misc.arcstats.deleted: 1187256
kstat.zfs.misc.arcstats.allocated: 10150518
kstat.zfs.misc.arcstats.mfu_ghost_hits: 1408986
kstat.zfs.misc.arcstats.mfu_hits: 51952454
kstat.zfs.misc.arcstats.mru_ghost_hits: 696819
kstat.zfs.misc.arcstats.mru_hits: 11115835
kstat.zfs.misc.arcstats.prefetch_metadata_misses: 32
kstat.zfs.misc.arcstats.prefetch_metadata_hits: 2
kstat.zfs.misc.arcstats.prefetch_data_misses: 0
kstat.zfs.misc.arcstats.prefetch_data_hits: 0
kstat.zfs.misc.arcstats.demand_metadata_misses: 9231542
kstat.zfs.misc.arcstats.demand_metadata_hits: 40650947
kstat.zfs.misc.arcstats.demand_data_misses: 75230
kstat.zfs.misc.arcstats.demand_data_hits: 22417340
kstat.zfs.misc.arcstats.misses: 9306804
kstat.zfs.misc.arcstats.hits: 63068289

View file

@ -1,12 +0,0 @@
trout size 4294967296 -
trout free 1040117248 -
trout allocated 70144 -
trout capacity 0% -
trout dedupratio 1.00x -
trout fragmentation 0% -
zroot size 118111600640 -
zroot free 3990917120 -
zroot allocated 114120683520 -
zroot capacity 50% -
zroot dedupratio 1.00x -
zroot fragmentation 67% -

View file

@ -11,11 +11,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package collector
// +build linux freebsd
// +build linux
// +build !nozfs
package collector
import (
"errors"
"strings"

View file

@ -1,110 +0,0 @@
package collector
import (
"bufio"
"io"
"os/exec"
"strconv"
"strings"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/common/log"
)
/*
#cgo LDFLAGS:
#include <sys/param.h>
#include <sys/module.h>
int zfsModuleLoaded() {
int modid = modfind("zfs");
return modid < 0 ? 0 : -1;
}
*/
import "C"
func (c *zfsCollector) zfsAvailable() error {
if C.zfsModuleLoaded() == 0 {
return zfsNotAvailableError
}
return nil
}
const zfsArcstatsSysctl = "kstat.zfs.misc.arcstats"
func (c *zfsCollector) RunOnStdout(cmd *exec.Cmd, handler func(io.Reader) error) (err error) {
stdout, err := cmd.StdoutPipe()
if err != nil {
return
}
if err = cmd.Start(); err != nil {
return
}
err = handler(stdout)
if err != nil {
return
}
return cmd.Wait()
}
func (c *zfsCollector) updateArcstats(ch chan<- prometheus.Metric) (err error) {
cmd := exec.Command("sysctl", zfsArcstatsSysctl)
err = c.RunOnStdout(cmd, func(stdout io.Reader) error {
return c.parseArcstatsSysctlOutput(stdout, func(sysctl zfsSysctl, value zfsMetricValue) {
ch <- c.constSysctlMetric(arc, sysctl, zfsMetricValue(value))
})
})
return err
}
func (c *zfsCollector) parseArcstatsSysctlOutput(reader io.Reader, handler func(zfsSysctl, zfsMetricValue)) (err error) {
// Decode values
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
if len(fields) != 2 ||
!strings.HasPrefix(fields[0], zfsArcstatsSysctl) ||
!strings.HasSuffix(fields[0], ":") {
log.Debugf("Skipping line of unknown format: %q", scanner.Text())
continue
}
sysctl := zfsSysctl(strings.TrimSuffix(fields[0], ":"))
value, err := strconv.Atoi(fields[1])
if err != nil {
return err
}
handler(sysctl, zfsMetricValue(value))
}
return scanner.Err()
}
func (c *zfsCollector) updatePoolStats(ch chan<- prometheus.Metric) (err error) {
poolProperties := []string{"size", "free", "allocated", "capacity", "dedupratio", "fragmentation"}
cmd := exec.Command("zpool", "get", "-pH", strings.Join(poolProperties, ","))
err = c.RunOnStdout(cmd, func(stdout io.Reader) error {
return c.parseZpoolOutput(stdout, func(pool, name string, value float64) {
ch <- c.constZpoolMetric(pool, name, value)
})
})
return err
}

View file

@ -1,44 +0,0 @@
package collector
import (
"os"
"testing"
)
func TestArcstatsParsing(t *testing.T) {
arcstatsOutput, err := os.Open("fixtures/sysctl/freebsd/kstat.zfs.misc.arcstats.txt")
if err != nil {
t.Fatal(err)
}
defer arcstatsOutput.Close()
c := zfsCollector{}
if err != nil {
t.Fatal(err)
}
handlerCalled := false
err = c.parseArcstatsSysctlOutput(arcstatsOutput, func(s zfsSysctl, v zfsMetricValue) {
if s != zfsSysctl("kstat.zfs.misc.arcstats.hits") {
return
}
handlerCalled = true
if v != zfsMetricValue(63068289) {
t.Fatalf("Incorrect value parsed from sysctl output")
}
})
if err != nil {
t.Fatal(err)
}
if !handlerCalled {
t.Fatal("Arcstats parsing handler was not called for some expected sysctls")
}
}

View file

@ -1,52 +0,0 @@
// Copyright 2016 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 collector
import (
"bufio"
"fmt"
"io"
"strconv"
"strings"
)
// zpool metrics
func (c *zfsCollector) parseZpoolOutput(reader io.Reader, handler func(string, string, float64)) (err error) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
if len(fields) != 4 {
return fmt.Errorf("unexpected output of zpool command")
}
valueString := fields[2]
switch {
case strings.HasSuffix(fields[2], "%"):
percentage := strings.TrimSuffix(fields[2], "%")
valueString = "0." + percentage
case strings.HasSuffix(fields[2], "x"):
valueString = strings.TrimSuffix(fields[2], "x")
}
value, err := strconv.ParseFloat(valueString, 64)
if err != nil {
return err
}
handler(fields[0], fields[1], value)
}
return scanner.Err()
}

View file

@ -1,70 +0,0 @@
// Copyright 2016 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 collector
import (
"os"
"testing"
)
func TestZpoolParsing(t *testing.T) {
zpoolOutput, err := os.Open("fixtures/zfs/zpool_stats_stdout.txt")
if err != nil {
t.Fatal(err)
}
defer zpoolOutput.Close()
c := zfsCollector{}
if err != nil {
t.Fatal(err)
}
pools := make([]string, 2)
troutSize := float64(-1)
troutDedupratio := float64(-1)
zrootCapacity := float64(-1)
err = c.parseZpoolOutput(zpoolOutput, func(pool, name string, value float64) {
pools = append(pools, pool)
if pool == "trout" && name == "size" {
troutSize = value
}
if pool == "trout" && name == "dedupratio" {
troutDedupratio = value
}
if pool == "zroot" && name == "capacity" {
zrootCapacity = value
}
})
if err != nil {
t.Fatal(err)
}
if pools[0] == "trout" && pools[1] == "zroot" {
t.Fatal("Did not parse all pools in fixture")
}
if troutSize != float64(4294967296) {
t.Fatal("Unexpected value for pool 'trout's size value")
}
if troutDedupratio != float64(1.0) {
t.Fatal("Unexpected value for pool 'trout's dedupratio value")
}
if zrootCapacity != float64(0.5) {
t.Fatal("Unexpected value for pool 'zroot's capacity value")
}
}