diff --git a/.circleci/config.yml b/.circleci/config.yml index 1b7a0de..af723e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,17 +1,64 @@ -version: 2 -jobs: - build: - working_directory: /go/src/github.com/Sheridan/smartctl_exporter +--- +version: 2.1 +orbs: + prometheus: prometheus/prometheus@0.16.0 +executors: + # Whenever the Go version is updated here, .promu.yml should + # also be updated. + golang: docker: - - image: circleci/golang:1.10.0 - environment: - - GOCACHE: "/tmp/go/cache" - - DEP_VERSION: 0.4.1 + - image: cimg/go:1.18 +jobs: + test: + executor: golang + steps: + - prometheus/setup_environment + - run: make style lint yamllint unused build test + - prometheus/store_artifact: + file: smartctl_exporter + codespell: + docker: + - image: circleci/python steps: - checkout - - run: + - run: sudo pip install codespell + - run: codespell --skip=".git,./vendor,ttar,go.mod,go.sum,*pem" -L uint,packages\',uptodate +workflows: + version: 2 + smartctl_exporter: + jobs: + - test: + filters: + tags: + only: /.*/ + - prometheus/build: name: build - command: make build - - store_artifacts: - path: bin/smartctl_exporter - destination: smartctl_exporter + filters: + tags: + only: /.*/ + - codespell: + filters: + tags: + only: /.*/ + - prometheus/publish_master: + context: org-context + docker_hub_organization: prometheuscommunity + quay_io_organization: prometheuscommunity + requires: + - test + - build + filters: + branches: + only: master + - prometheus/publish_release: + context: org-context + docker_hub_organization: prometheuscommunity + quay_io_organization: prometheuscommunity + requires: + - test + - build + filters: + tags: + only: /^v.*/ + branches: + ignore: /.*/ diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..202ae23 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "monthly" diff --git a/.promu.yml b/.promu.yml new file mode 100644 index 0000000..77c66c4 --- /dev/null +++ b/.promu.yml @@ -0,0 +1,19 @@ +go: + # This must match .circle/config.yml. + version: 1.18 +repository: + path: github.com/prometheus-community/smartctl_exporter +build: + binaries: + - name: smartctl_exporter + flags: -a -tags 'netgo static_build' + ldflags: | + -X github.com/prometheus/common/version.Version={{.Version}} + -X github.com/prometheus/common/version.Revision={{.Revision}} + -X github.com/prometheus/common/version.Branch={{.Branch}} + -X github.com/prometheus/common/version.BuildUser={{user}}@{{host}} + -X github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} +tarball: + files: + - LICENSE + - NOTICE diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..3878a31 --- /dev/null +++ b/.yamllint @@ -0,0 +1,28 @@ +--- +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + commas: disable + comments: disable + comments-indentation: disable + document-start: disable + indentation: + spaces: consistent + indent-sequences: consistent + key-duplicates: + ignore: | + config/testdata/section_key_dup.bad.yml + line-length: disable + truthy: + ignore: | + .github/workflows/codeql-analysis.yml + .github/workflows/funcbench.yml + .github/workflows/fuzzing.yml + .github/workflows/prombench.yml + .github/workflows/golangci-lint.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0f81c4b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +ARG ARCH="amd64" +ARG OS="linux" +FROM quay.io/prometheus/busybox-${OS}-${ARCH}:glibc +LABEL maintainer="The Prometheus Authors " + +ARG ARCH="amd64" +ARG OS="linux" +COPY .build/${OS}-${ARCH}/smartctl_exporter /bin/smartctl_exporter + +COPY smartctl_exporter.yaml /etc/smartctl_exporter.yaml + +EXPOSE 9633 +USER nobody +ENTRYPOINT [ "/bin/smartctl_exporter" ] diff --git a/Makefile b/Makefile index 1b88cc8..bb3faa7 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,22 @@ -GOPATH=$(shell pwd)/vendor:$(shell pwd) -GOBIN=$(shell pwd)/bin -GOFILES=$(wildcard *.go) -GONAME=$(shell basename "$(PWD)") +# Copyright 2022 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. -build: get - @echo "Building $(GOFILES) to ./bin" - @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go build -v -o bin/$(GONAME) $(GOFILES) +# Needs to be defined before including Makefile.common to auto-generate targets +DOCKER_ARCHS ?= amd64 armv7 arm64 +DOCKER_REPO ?= prometheuscommunity -get: - @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go get -v . +include Makefile.common -install: - @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go install $(GOFILES) +STATICCHECK_IGNORE = -run: build - @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go run $(GOFILES) --config=$(shell pwd)/smartctl_exporter.yaml --debug --verbose - -run-sudo: build - sudo bin/$(GONAME) --config=$(shell pwd)/smartctl_exporter.yaml --debug --verbose - -clear: - @clear - -clean: - @echo "Cleaning" - @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go clean - -example: - @echo "# Example output" > EXAMPLE.md - @echo '```' >> EXAMPLE.md - @curl -s localhost:9633/metrics | grep smartctl >> EXAMPLE.md - @echo '```' >> EXAMPLE.md - -collect_fake_json: - -mkdir debug - -rm -f debug/*json - sudo ./collect_fake_json.sh +DOCKER_IMAGE_NAME ?= smartctl-exporter diff --git a/Makefile.common b/Makefile.common new file mode 100644 index 0000000..6c8e3e2 --- /dev/null +++ b/Makefile.common @@ -0,0 +1,264 @@ +# Copyright 2018 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. + + +# A common Makefile that includes rules to be reused in different prometheus projects. +# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! + +# Example usage : +# Create the main Makefile in the root project directory. +# include Makefile.common +# customTarget: +# @echo ">> Running customTarget" +# + +# Ensure GOBIN is not set during build so that promu is installed to the correct path +unexport GOBIN + +GO ?= go +GOFMT ?= $(GO)fmt +FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) +GOOPTS ?= +GOHOSTOS ?= $(shell $(GO) env GOHOSTOS) +GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH) + +GO_VERSION ?= $(shell $(GO) version) +GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) +PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') + +PROMU := $(FIRST_GOPATH)/bin/promu +pkgs = ./... + +ifeq (arm, $(GOHOSTARCH)) + GOHOSTARM ?= $(shell GOARM= $(GO) env GOARM) + GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)v$(GOHOSTARM) +else + GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH) +endif + +GOTEST := $(GO) test +GOTEST_DIR := +ifneq ($(CIRCLE_JOB),) +ifneq ($(shell which gotestsum),) + GOTEST_DIR := test-results + GOTEST := gotestsum --junitfile $(GOTEST_DIR)/unit-tests.xml -- +endif +endif + +PROMU_VERSION ?= 0.13.0 +PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz + +GOLANGCI_LINT := +GOLANGCI_LINT_OPTS ?= +GOLANGCI_LINT_VERSION ?= v1.45.2 +# golangci-lint only supports linux, darwin and windows platforms on i386/amd64. +# windows isn't included here because of the path separator being different. +ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) + ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386)) + # If we're in CI and there is an Actions file, that means the linter + # is being run in Actions, so we don't need to run it here. + ifeq (,$(CIRCLE_JOB)) + GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint + else ifeq (,$(wildcard .github/workflows/golangci-lint.yml)) + GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint + endif + endif +endif + +PREFIX ?= $(shell pwd) +BIN_DIR ?= $(shell pwd) +DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) +DOCKERFILE_PATH ?= ./Dockerfile +DOCKERBUILD_CONTEXT ?= ./ +DOCKER_REPO ?= prom + +DOCKER_ARCHS ?= amd64 + +BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS)) +PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS)) +TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS)) + +ifeq ($(GOHOSTARCH),amd64) + ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) + # Only supported on amd64 + test-flags := -race + endif +endif + +# This rule is used to forward a target like "build" to "common-build". This +# allows a new "build" target to be defined in a Makefile which includes this +# one and override "common-build" without override warnings. +%: common-% ; + +.PHONY: common-all +common-all: precheck style check_license lint yamllint unused build test + +.PHONY: common-style +common-style: + @echo ">> checking code style" + @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ + if [ -n "$${fmtRes}" ]; then \ + echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ + echo "Please ensure you are using $$($(GO) version) for formatting code."; \ + exit 1; \ + fi + +.PHONY: common-check_license +common-check_license: + @echo ">> checking license header" + @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ + awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ + done); \ + if [ -n "$${licRes}" ]; then \ + echo "license header checking failed:"; echo "$${licRes}"; \ + exit 1; \ + fi + +.PHONY: common-deps +common-deps: + @echo ">> getting dependencies" + $(GO) mod download + +.PHONY: update-go-deps +update-go-deps: + @echo ">> updating Go dependencies" + @for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \ + $(GO) get -d $$m; \ + done + $(GO) mod tidy + +.PHONY: common-test-short +common-test-short: $(GOTEST_DIR) + @echo ">> running short tests" + $(GOTEST) -short $(GOOPTS) $(pkgs) + +.PHONY: common-test +common-test: $(GOTEST_DIR) + @echo ">> running all tests" + $(GOTEST) $(test-flags) $(GOOPTS) $(pkgs) + +$(GOTEST_DIR): + @mkdir -p $@ + +.PHONY: common-format +common-format: + @echo ">> formatting code" + $(GO) fmt $(pkgs) + +.PHONY: common-vet +common-vet: + @echo ">> vetting code" + $(GO) vet $(GOOPTS) $(pkgs) + +.PHONY: common-lint +common-lint: $(GOLANGCI_LINT) +ifdef GOLANGCI_LINT + @echo ">> running golangci-lint" +# 'go list' needs to be executed before staticcheck to prepopulate the modules cache. +# Otherwise staticcheck might fail randomly for some reason not yet explained. + $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null + $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs) +endif + +.PHONY: common-yamllint +common-yamllint: + @echo ">> running yamllint on all YAML files in the repository" +ifeq (, $(shell which yamllint)) + @echo "yamllint not installed so skipping" +else + yamllint . +endif + +# For backward-compatibility. +.PHONY: common-staticcheck +common-staticcheck: lint + +.PHONY: common-unused +common-unused: + @echo ">> running check for unused/missing packages in go.mod" + $(GO) mod tidy + @git diff --exit-code -- go.sum go.mod + +.PHONY: common-build +common-build: promu + @echo ">> building binaries" + $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES) + +.PHONY: common-tarball +common-tarball: promu + @echo ">> building release tarball" + $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) + +.PHONY: common-docker $(BUILD_DOCKER_ARCHS) +common-docker: $(BUILD_DOCKER_ARCHS) +$(BUILD_DOCKER_ARCHS): common-docker-%: + docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \ + -f $(DOCKERFILE_PATH) \ + --build-arg ARCH="$*" \ + --build-arg OS="linux" \ + $(DOCKERBUILD_CONTEXT) + +.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS) +common-docker-publish: $(PUBLISH_DOCKER_ARCHS) +$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: + docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" + +DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION))) +.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) +common-docker-tag-latest: $(TAG_DOCKER_ARCHS) +$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" + +.PHONY: common-docker-manifest +common-docker-manifest: + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(DOCKER_IMAGE_TAG)) + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" + +.PHONY: promu +promu: $(PROMU) + +$(PROMU): + $(eval PROMU_TMP := $(shell mktemp -d)) + curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP) + mkdir -p $(FIRST_GOPATH)/bin + cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu + rm -r $(PROMU_TMP) + +.PHONY: proto +proto: + @echo ">> generating code from proto files" + @./scripts/genproto.sh + +ifdef GOLANGCI_LINT +$(GOLANGCI_LINT): + mkdir -p $(FIRST_GOPATH)/bin + curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_LINT_VERSION)/install.sh \ + | sed -e '/install -d/d' \ + | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION) +endif + +.PHONY: precheck +precheck:: + +define PRECHECK_COMMAND_template = +precheck:: $(1)_precheck + +PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) +.PHONY: $(1)_precheck +$(1)_precheck: + @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ + echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ + exit 1; \ + fi +endef diff --git a/README.md b/README.md index 5499ed1..04d1b3a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![CircleCI](https://circleci.com/gh/Sheridan/smartctl_exporter.svg?style=svg)](https://circleci.com/gh/Sheridan/smartctl_exporter) +[![CircleCI](https://circleci.com/gh/prometheus-community/smartctl_exporter.svg?style=svg)](https://circleci.com/gh/prometheus-community/smartctl_exporter) # smartctl_exporter Export smartctl statistics to prometheus @@ -14,7 +14,7 @@ smartmontools >= 7.0, because export to json [released in 7.0](https://www.smart # Configuration ## Command line options -* `--config=/path/to/file.yaml`: Path to configuration file, defaulr `/etc/smartctl_exporter.yaml` +* `--config=/path/to/file.yaml`: Path to configuration file, default `/etc/smartctl_exporter.yaml` * `--verbose`: verbosed log, default no * `--debug`: Debug logging, default no * `--version`: Show version and exit diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 70a5312..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -# Build /go/bin/smartctl_exporter -FROM quay.io/prometheus/golang-builder:1.13-base AS builder -ADD . /go/src/github.com/Sheridan/smartctl_exporter/ -RUN cd /go/src/github.com/Sheridan/smartctl_exporter && make - -# Container image -FROM ubuntu:18.04 -WORKDIR / -RUN apt-get update \ - && apt-get install smartmontools/bionic-backports -y --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=builder /go/src/github.com/Sheridan/smartctl_exporter/bin/smartctl_exporter /bin/smartctl_exporter -COPY docker-entrypoint.sh / -COPY smartctl_exporter.yaml / -RUN chmod +x /docker-entrypoint.sh -EXPOSE 9633 -ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/docker/config.yaml b/docker/config.yaml deleted file mode 100644 index 3792a24..0000000 --- a/docker/config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -smartctl_exporter: - bind_to: "[0.0.0.0]:9633" - url_path: "/metrics" - fake_json: no - smartctl_location: /usr/sbin/smartctl - collect_not_more_than_period: 120s - devices: diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh deleted file mode 100755 index 951db3e..0000000 --- a/docker/docker-entrypoint.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -DISKS="$(lsblk -l|egrep -oe '(sd[a-z]|nvme[0-9])'|sed -e 's/^/ - \/dev\//'| uniq)" -echo "$DISKS" >> smartctl_exporter.yaml - -/bin/smartctl_exporter -config=/smartctl_exporter.yaml diff --git a/gentoo/app-metrics/smartctl_exporter/smartctl_exporter-9999.ebuild b/gentoo/app-metrics/smartctl_exporter/smartctl_exporter-9999.ebuild index 289b876..606c00b 100644 --- a/gentoo/app-metrics/smartctl_exporter/smartctl_exporter-9999.ebuild +++ b/gentoo/app-metrics/smartctl_exporter/smartctl_exporter-9999.ebuild @@ -1,12 +1,13 @@ -# Copyright 2019+ Maxim "Sheridan" Gorlov +# Copyright 2022 The Prometheus Authors +# Copyright 2019 Maxim "Sheridan" Gorlov # Distributed under the terms of the GNU General Public License v3 EAPI=6 -EGIT_REPO_URI="https://github.com/Sheridan/${PN}" +EGIT_REPO_URI="https://github.com/prometheus-community/${PN}" inherit git-r3 DESCRIPTION="Exporting S.M.A.R.T. metrics" -HOMEPAGE="https://github.com/Sheridan/smartctl_exporter" +HOMEPAGE="https://github.com/prometheus-community/smartctl_exporter" LICENSE="GPL-3" SLOT="0" RDEPEND="sys-apps/smartmontools" diff --git a/go.mod b/go.mod index 82b7c87..fad7328 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,23 @@ -module github.com/Sheridan/smartctl_exporter +module github.com/prometheus-community/smartctl_exporter -go 1.14 +go 1.17 require ( github.com/prometheus/client_golang v1.7.1 github.com/tidwall/gjson v1.6.0 gopkg.in/yaml.v2 v2.3.0 ) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/golang/protobuf v1.4.2 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.10.0 // indirect + github.com/prometheus/procfs v0.1.3 // indirect + github.com/tidwall/match v1.0.1 // indirect + github.com/tidwall/pretty v1.0.0 // indirect + golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect + google.golang.org/protobuf v1.23.0 // indirect +) diff --git a/go.sum b/go.sum index 881c698..93d2de4 100644 --- a/go.sum +++ b/go.sum @@ -94,8 +94,9 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/readjson.go b/readjson.go index a2a9df1..cad0766 100644 --- a/readjson.go +++ b/readjson.go @@ -35,8 +35,8 @@ func parseJSON(data string) gjson.Result { // Reading fake smartctl json func readFakeSMARTctl(device string) gjson.Result { - splitted := strings.Split(device, "/") - filename := fmt.Sprintf("debug/%s.json", splitted[len(splitted)-1]) + s := strings.Split(device, "/") + filename := fmt.Sprintf("debug/%s.json", s[len(s)-1]) logger.Verbose("Read fake S.M.A.R.T. data from json: %s", filename) jsonFile, err := ioutil.ReadFile(filename) if err != nil {