gopkg.in/essentialkaos/ek.v3@v3.5.1/system/info_darwin.go (about)

     1  // +build darwin
     2  
     3  package system
     4  
     5  // ////////////////////////////////////////////////////////////////////////////////// //
     6  //                                                                                    //
     7  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     8  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     9  //                                                                                    //
    10  // ////////////////////////////////////////////////////////////////////////////////// //
    11  
    12  import (
    13  	"errors"
    14  	"strings"
    15  	"syscall"
    16  )
    17  
    18  // ////////////////////////////////////////////////////////////////////////////////// //
    19  
    20  // GetSystemInfo return system info
    21  func GetSystemInfo() (*SystemInfo, error) {
    22  	hostname, err := syscall.Sysctl("kern.hostname")
    23  
    24  	if err != nil || hostname == "" {
    25  		return &SystemInfo{}, errors.New("Can't read hostname info")
    26  	}
    27  
    28  	os, err := syscall.Sysctl("kern.ostype")
    29  
    30  	if err != nil || os == "" {
    31  		return &SystemInfo{}, errors.New("Can't read os info")
    32  	}
    33  
    34  	kernel, err := syscall.Sysctl("kern.osrelease")
    35  
    36  	if err != nil || kernel == "" {
    37  		return &SystemInfo{}, errors.New("Can't read kernel info")
    38  	}
    39  
    40  	arch, err := syscall.Sysctl("kern.version")
    41  
    42  	if err != nil || arch == "" {
    43  		return &SystemInfo{}, errors.New("Can't read arch info")
    44  	}
    45  
    46  	archSlice := strings.Split(arch, "/")
    47  
    48  	if len(archSlice) != 2 {
    49  		return &SystemInfo{}, errors.New("Can't read arch info")
    50  	}
    51  
    52  	return &SystemInfo{
    53  		hostname,
    54  		os,
    55  		kernel,
    56  		strings.ToLower(strings.Replace(archSlice[len(archSlice)-1], "RELEASE_", "", -1)),
    57  	}, nil
    58  }