From 61235fd851f08ae85f52775e3352d251b52d0fb2 Mon Sep 17 00:00:00 2001 From: Shashank Varanasi Date: Sun, 14 May 2017 00:12:29 +0530 Subject: [PATCH] Print system information (uname) at Prometheus startup (#2709) * Print uname on prom startup * Make uname file linux-only * Add missing license headers Add missing license headers * Print OS when uname is not available * Print only OS name when uname not available * Remove extra space, fix cmd/prometheus/main.go license header * Add fix for int8 and uint8 systems * Better formatting for build tags in cmd/prometheus/uname files * Remove newline --- cmd/prometheus/main.go | 1 + cmd/prometheus/uname_default.go | 23 +++++++++++++++++++ cmd/prometheus/uname_linux.go | 35 +++++++++++++++++++++++++++++ cmd/prometheus/uname_linux_int8.go | 25 +++++++++++++++++++++ cmd/prometheus/uname_linux_uint8.go | 25 +++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 cmd/prometheus/uname_default.go create mode 100644 cmd/prometheus/uname_linux.go create mode 100644 cmd/prometheus/uname_linux_int8.go create mode 100644 cmd/prometheus/uname_linux_uint8.go diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index 3b5ff2626..53d2fe12c 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -87,6 +87,7 @@ func Main() int { log.Infoln("Starting prometheus", version.Info()) log.Infoln("Build context", version.BuildContext()) + log.Infoln("Host details", Uname()) var ( sampleAppender = storage.Fanout{} diff --git a/cmd/prometheus/uname_default.go b/cmd/prometheus/uname_default.go new file mode 100644 index 000000000..bc7f0502c --- /dev/null +++ b/cmd/prometheus/uname_default.go @@ -0,0 +1,23 @@ +// 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. + +// +build !linux + +package main + +import "runtime" + +// Uname for any platform other than linux. +func Uname() string { + return "(" + runtime.GOOS + ")" +} diff --git a/cmd/prometheus/uname_linux.go b/cmd/prometheus/uname_linux.go new file mode 100644 index 000000000..865356816 --- /dev/null +++ b/cmd/prometheus/uname_linux.go @@ -0,0 +1,35 @@ +// 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 main + +import ( + "log" + "syscall" +) + +// Uname returns the uname of the host machine. +func Uname() string { + buf := syscall.Utsname{} + err := syscall.Uname(&buf) + if err != nil { + log.Fatal("Error!") + } + str := "(" + charsToString(buf.Sysname[:]) + str += " " + charsToString(buf.Release[:]) + str += " " + charsToString(buf.Version[:]) + str += " " + charsToString(buf.Machine[:]) + str += " " + charsToString(buf.Nodename[:]) + str += " " + charsToString(buf.Domainname[:]) + ")" + return str +} diff --git a/cmd/prometheus/uname_linux_int8.go b/cmd/prometheus/uname_linux_int8.go new file mode 100644 index 000000000..40cfb5753 --- /dev/null +++ b/cmd/prometheus/uname_linux_int8.go @@ -0,0 +1,25 @@ +// 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. + +// +build 386 amd64 arm64 mips64 mips64le mips mipsle +// +build linux + +package main + +func charsToString(ca []int8) string { + s := make([]byte, len(ca)) + for i, c := range ca { + s[i] = byte(c) + } + return string(s[0:len(ca)]) +} diff --git a/cmd/prometheus/uname_linux_uint8.go b/cmd/prometheus/uname_linux_uint8.go new file mode 100644 index 000000000..da5794caa --- /dev/null +++ b/cmd/prometheus/uname_linux_uint8.go @@ -0,0 +1,25 @@ +// 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. + +// +build arm ppc64 ppc64le s390x +// +build linux + +package main + +func charsToString(ca []uint8) string { + s := make([]byte, len(ca)) + for i, c := range ca { + s[i] = byte(c) + } + return string(s[0:len(ca)]) +}