diff --git a/README.md b/README.md index 795ab609..5a9bd550 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ stat | Exposes various statistics from `/proc/stat`. This includes boot time, fo textfile | Exposes statistics read from local disk. The `--collector.textfile.directory` flag must be set. | _any_ time | Exposes the current system time. | _any_ timex | Exposes selected adjtimex(2) system call stats. | Linux -uname | Exposes system information as provided by the uname system call. | FreeBSD, Linux +uname | Exposes system information as provided by the uname system call. | Darwin, FreeBSD, Linux, OpenBSD vmstat | Exposes statistics from `/proc/vmstat`. | Linux xfs | Exposes XFS runtime statistics. | Linux (kernel 4.4+) zfs | Exposes [ZFS](http://open-zfs.org/) performance statistics. | [Linux](http://zfsonlinux.org/), Solaris diff --git a/collector/uname.go b/collector/uname.go index 8e91e5f8..381c0ae9 100644 --- a/collector/uname.go +++ b/collector/uname.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build freebsd linux +// +build darwin freebsd openbsd linux // +build !nouname package collector diff --git a/collector/uname_freebsd.go b/collector/uname_bsd.go similarity index 76% rename from collector/uname_freebsd.go rename to collector/uname_bsd.go index 9e4a8ba4..fd8db9b4 100644 --- a/collector/uname_freebsd.go +++ b/collector/uname_bsd.go @@ -11,6 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +// +build darwin freebsd openbsd // +build !nouname package collector @@ -28,30 +29,35 @@ func getUname() (uname, error) { return uname{}, err } - // We do a little bit of work here to emulate what happens in the Linux - // uname calls since FreeBSD uname doesn't have a Domainname. + nodeName, domainName := parseHostNameAndDomainName(utsname) + + output := uname{ + SysName: string(utsname.Sysname[:bytes.IndexByte(utsname.Sysname[:], 0)]), + Release: string(utsname.Release[:bytes.IndexByte(utsname.Release[:], 0)]), + Version: string(utsname.Version[:bytes.IndexByte(utsname.Version[:], 0)]), + Machine: string(utsname.Machine[:bytes.IndexByte(utsname.Machine[:], 0)]), + NodeName: nodeName, + DomainName: domainName, + } + + return output, nil +} + +// parseHostNameAndDomainName for FreeBSD,OpenBSD,Darwin. +// Attempts to emulate what happens in the Linux uname calls since these OS doesn't have a Domainname. +func parseHostNameAndDomainName(utsname unix.Utsname) (hostname string, domainname string) { nodename := string(utsname.Nodename[:bytes.IndexByte(utsname.Nodename[:], 0)]) split := strings.SplitN(nodename, ".", 2) // We'll always have at least a single element in the array. We assume this // is the hostname. - hostname := split[0] + hostname = split[0] // If we have more than one element, we assume this is the domainname. // Otherwise leave it to "(none)" like Linux. - domainname := "(none)" + domainname = "(none)" if len(split) > 1 { domainname = split[1] } - - output := uname{ - SysName: string(utsname.Sysname[:bytes.IndexByte(utsname.Sysname[:], 0)]), - Release: string(utsname.Release[:bytes.IndexByte(utsname.Release[:], 0)]), - Version: string(utsname.Version[:bytes.IndexByte(utsname.Version[:], 0)]), - Machine: string(utsname.Machine[:bytes.IndexByte(utsname.Machine[:], 0)]), - NodeName: hostname, - DomainName: domainname, - } - - return output, nil + return hostname, domainname }