From a1b66f11b5409105bf5a4580652fbfa1548c8ca2 Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Sun, 13 Dec 2020 16:28:49 -0300 Subject: [PATCH] Change GetBootTime to work specificaly with FreeBSD Signed-off-by: Ricardo Pchevuzinske Katz --- pkg/kubelet/util/BUILD | 4 +- pkg/kubelet/util/boottime_util_freebsd.go | 39 +++++++++++++++++++ .../util/boottime_util_freebsd_test.go | 36 +++++++++++++++++ pkg/kubelet/util/boottime_util_linux.go | 2 +- ...ux_test.go => boottime_util_linux_test.go} | 2 +- 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 pkg/kubelet/util/boottime_util_freebsd.go create mode 100644 pkg/kubelet/util/boottime_util_freebsd_test.go rename pkg/kubelet/util/{bootime_util_linux_test.go => boottime_util_linux_test.go} (97%) diff --git a/pkg/kubelet/util/BUILD b/pkg/kubelet/util/BUILD index bb598accc6b..5fe234bc1de 100644 --- a/pkg/kubelet/util/BUILD +++ b/pkg/kubelet/util/BUILD @@ -9,7 +9,8 @@ load( go_test( name = "go_default_test", srcs = [ - "bootime_util_linux_test.go", + "boottime_util_freebsd_test.go", + "boottime_util_linux_test.go", "util_test.go", "util_unix_test.go", "util_windows_test.go", @@ -45,6 +46,7 @@ go_library( name = "go_default_library", srcs = [ "boottime_util_darwin.go", + "boottime_util_freebsd.go", "boottime_util_linux.go", "doc.go", "nodelease.go", diff --git a/pkg/kubelet/util/boottime_util_freebsd.go b/pkg/kubelet/util/boottime_util_freebsd.go new file mode 100644 index 00000000000..ae1128cc672 --- /dev/null +++ b/pkg/kubelet/util/boottime_util_freebsd.go @@ -0,0 +1,39 @@ +// +build freebsd + +/* +Copyright 2020 The Kubernetes 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 util + +import ( + "fmt" + "time" + + "golang.org/x/sys/unix" + "unsafe" +) + +// GetBootTime returns the time at which the machine was started, truncated to the nearest second +func GetBootTime() (time.Time, error) { + currentTime := time.Now() + ts := &unix.Timeval{} + _, _, e1 := unix.Syscall(uintptr(unix.SYS_CLOCK_GETTIME), uintptr(unix.CLOCK_UPTIME), uintptr(unsafe.Pointer(ts)), 0) + if e1 != 0 { + return time.Time{}, fmt.Errorf("error getting system uptime") + } + + return currentTime.Add(-time.Duration(ts.Sec) * time.Second).Truncate(time.Second), nil +} diff --git a/pkg/kubelet/util/boottime_util_freebsd_test.go b/pkg/kubelet/util/boottime_util_freebsd_test.go new file mode 100644 index 00000000000..442b8058b26 --- /dev/null +++ b/pkg/kubelet/util/boottime_util_freebsd_test.go @@ -0,0 +1,36 @@ +// +build freebsd + +/* +Copyright 2020 The Kubernetes 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 util + +import ( + "testing" + "time" +) + +func TestGetBootTime(t *testing.T) { + boottime, err := GetBootTime() + + if err != nil { + t.Errorf("Unable to get system uptime") + } + + if !boottime.After(time.Time{}) { + t.Errorf("Invalid system uptime") + } +} diff --git a/pkg/kubelet/util/boottime_util_linux.go b/pkg/kubelet/util/boottime_util_linux.go index f00e7c06bfa..c39b70f7c88 100644 --- a/pkg/kubelet/util/boottime_util_linux.go +++ b/pkg/kubelet/util/boottime_util_linux.go @@ -1,4 +1,4 @@ -// +build freebsd linux +// +build linux /* Copyright 2018 The Kubernetes Authors. diff --git a/pkg/kubelet/util/bootime_util_linux_test.go b/pkg/kubelet/util/boottime_util_linux_test.go similarity index 97% rename from pkg/kubelet/util/bootime_util_linux_test.go rename to pkg/kubelet/util/boottime_util_linux_test.go index 99fcb293f41..1b85e0737a0 100644 --- a/pkg/kubelet/util/bootime_util_linux_test.go +++ b/pkg/kubelet/util/boottime_util_linux_test.go @@ -1,4 +1,4 @@ -// +build freebsd linux +// +build linux /* Copyright 2018 The Kubernetes Authors.