mirror of
https://github.com/kubernetes/node-problem-detector.git
synced 2026-02-14 18:09:57 +00:00
chore: Remove unused binary nethealth
This commit is contained in:
@@ -1,18 +0,0 @@
|
||||
# Copyright 2016 The Kubernetes Authors. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
FROM busybox
|
||||
LABEL maintainer="Girish Kalele <gkalele@google.com>"
|
||||
COPY nethealth /usr/bin/
|
||||
ENTRYPOINT ["/usr/bin/nethealth"]
|
||||
@@ -1,42 +0,0 @@
|
||||
# Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
# Makefile for the Docker image k8s.gcr.io/kube-nethealth-<ARCH>
|
||||
# MAINTAINER: Girish kalele <abshah@google.com>
|
||||
# If you update this image please bump the tag value before pushing.
|
||||
#
|
||||
# Usage:
|
||||
# [TAG=1.0] [REGISTRY=staging-k8s.gcr.io] make push
|
||||
|
||||
# Default registry, arch and tag. This can be overwritten by arguments to make
|
||||
TAG?=1.0
|
||||
REGISTRY?=staging-k8s.gcr.io
|
||||
ARCH?=amd64
|
||||
|
||||
all: build
|
||||
|
||||
nethealth: nethealth.go
|
||||
CGO_ENABLED=0 go build -ldflags '-s' -v -o nethealth nethealth.go
|
||||
|
||||
build: nethealth
|
||||
docker build -t $(REGISTRY)/kube-nethealth-$(ARCH):$(TAG) .
|
||||
|
||||
push: build
|
||||
ifeq ($(REGISTRY),staging-k8s.gcr.io)
|
||||
gcloud docker -- push $(REGISTRY)/kube-nethealth-$(ARCH):$(TAG)
|
||||
else
|
||||
docker push $(REGISTRY)/kube-nethealth-$(ARCH):$(TAG)
|
||||
endif
|
||||
|
||||
.PHONY: push
|
||||
@@ -1,29 +0,0 @@
|
||||
# Nethealth HTTP Check
|
||||
|
||||
The nethealth binary performs a quick HTTP GET download speed check
|
||||
Key Features:
|
||||
- Shell-script friendly - returns a non-zero exit code on timeout or corruption or bandwidth threshold failures
|
||||
- Timeout configurable to abort the test early (for super slow links)
|
||||
- Can compare actual bandwidth against a command line minimum bandwidth parameter and return a non-zero exit code.
|
||||
- Corruption check - can download a checksum file and compute blob checksum and compare.
|
||||
- Configurable object URL for non-GCE environments
|
||||
|
||||
## Generating content files
|
||||
|
||||
The following steps can be used if you wish to generate content files for different sizes.
|
||||
|
||||
Assumptions: openssl installed and 64MB blob
|
||||
|
||||
```
|
||||
$ openssl rand -out 64MB.bin 67108864
|
||||
$ openssl sha512 64MB.bin > sha512.txt
|
||||
$ cat sha512.txt
|
||||
SHA512(64MB.bin)= 9abddc26a6bda88864326bdc8130f0653562669fcc7f617b26a53ea73781d5cb2eb9418fde53a5743c86aa2c493aeb8933d829a812d275c2fc4ecd84427999bf
|
||||
$
|
||||
```
|
||||
|
||||
|
||||
[]()
|
||||
|
||||
|
||||
[]()
|
||||
@@ -1,131 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 The Kubernetes Authors All rights reserved.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
// The nethealth binary performs a quick HTTP GET download speed check
|
||||
// Key Features:
|
||||
// Shell-script friendly - returns a non-zero exit code on timeout or corruption or bandwidth threshold failures
|
||||
// Timeout configurable to abort the test early (for super slow links)
|
||||
// Can compare actual bandwidth against a command line minimum bandwidth parameter and return a non-zero exit code.
|
||||
// Corruption check - can download a checksum file and compute blob checksum and compare.
|
||||
// Configurable object URL for non-GCE environments
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/sha512"
|
||||
"encoding/hex"
|
||||
"flag"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
objectUrl string
|
||||
objectHashUrl string
|
||||
objectLength int64
|
||||
timeout int
|
||||
minimum int64
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Defaults to a public bucket with a 64 MB file with random data
|
||||
flag.StringVar(&objectUrl, "url", "http://storage.googleapis.com/k8s-bandwidth-test/64MB.bin", "Blob URL")
|
||||
flag.StringVar(&objectHashUrl, "hashurl", "http://storage.googleapis.com/k8s-bandwidth-test/sha512.txt", "Blob Hash URL")
|
||||
flag.Int64Var(&objectLength, "length", 64*1024*1024, "Expected content length")
|
||||
flag.IntVar(&timeout, "timeout", 30, "Maximum Seconds to wait")
|
||||
// If the transfer bandwidth is lower than the minimum, process returns non-zero exit status
|
||||
flag.Int64Var(&minimum, "minimum", 10, "Minimum bandwidth expected (MiB/sec)")
|
||||
}
|
||||
|
||||
func monitorTimeElapsed(downloadStartTime time.Time, timeoutSeconds time.Duration) {
|
||||
for true {
|
||||
time.Sleep(1 * time.Second)
|
||||
// Check the status of the Get request if possible and check if timeout elapsed
|
||||
if time.Since(downloadStartTime) > timeoutSeconds*time.Second {
|
||||
log.Fatalf("ERROR: Timeout (%d) seconds occurred before GET finished - declaring TOO SLOW", timeout)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
// Quick object existence check before a full GET
|
||||
res, err := http.Head(objectUrl)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to find URL %s (%s)", objectUrl, err)
|
||||
}
|
||||
if res.ContentLength != objectLength {
|
||||
log.Fatalf("Length reported (%d) is not equal to expected length (%d)", res.ContentLength, objectLength)
|
||||
}
|
||||
log.Printf("HTTP HEAD reports content length: %d - running GET\n", res.ContentLength)
|
||||
res, err = http.Head(objectHashUrl)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to find hash URL %s (%s)", objectHashUrl, err)
|
||||
}
|
||||
/* Now, setup a Client with a transport with compression disabled and timeouts enabled */
|
||||
tr := &http.Transport{
|
||||
DisableCompression: true,
|
||||
}
|
||||
downloadStartTime := time.Now()
|
||||
go monitorTimeElapsed(downloadStartTime, time.Duration(timeout))
|
||||
client := &http.Client{Transport: tr}
|
||||
res, err = client.Get(objectUrl)
|
||||
if err != nil {
|
||||
log.Fatalf("Failure (%s) while reading %s", err, objectUrl)
|
||||
}
|
||||
if res.ContentLength != objectLength {
|
||||
log.Fatalf("Length reported (%d) is not equal to expected length (%d)", res.ContentLength, objectLength)
|
||||
}
|
||||
blobData, err := io.ReadAll(res.Body)
|
||||
res.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatal("Failed to read full content", err)
|
||||
}
|
||||
elapsedMs := int64(time.Since(downloadStartTime) / time.Millisecond)
|
||||
bandwidth := (res.ContentLength * 1000) / (elapsedMs * 1024)
|
||||
|
||||
log.Printf("DOWNLOAD: %d bytes %d ms Bandwidth ~ %d KiB/sec\n", res.ContentLength, elapsedMs, bandwidth)
|
||||
// Check if this bandwidth exceeds minimum expected
|
||||
if minimum*1024 > bandwidth {
|
||||
log.Fatalf("ERROR: Minimum bandwidth guarantee of %d MiB/sec not met - network connectivity is slow", minimum)
|
||||
}
|
||||
// Perform SHA512 hash and compare against the expected hash to check for corruption.
|
||||
res, err = client.Get(objectHashUrl)
|
||||
if err != nil {
|
||||
log.Fatalf("Failure (%s) while reading %s", err, objectHashUrl)
|
||||
}
|
||||
content, err := io.ReadAll(res.Body)
|
||||
res.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatal("Failed to read full content of hash file", err)
|
||||
}
|
||||
parts := strings.Split(string(content), " ")
|
||||
if len(parts) <= 1 {
|
||||
log.Fatalf("Could not parse SHA hash file contents (%s)", content)
|
||||
}
|
||||
hash := parts[1]
|
||||
hash = strings.Trim(hash, "\n ")
|
||||
sumBytes := sha512.Sum512(blobData)
|
||||
sumString := hex.EncodeToString(sumBytes[0:])
|
||||
if strings.Compare(sumString, hash) == 0 {
|
||||
log.Println("Hash Matches expected value")
|
||||
} else {
|
||||
log.Fatalf("ERROR: Hash Mismatch - Computed hash = '%s' Expected hash = '%s'", sumString, hash)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user