runtimeinfo.go 923 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package installationinfo
  2. import (
  3. "bufio"
  4. "errors"
  5. "os"
  6. "runtime"
  7. "strings"
  8. )
  9. type runtimeInfo struct {
  10. OS string
  11. OSReleasePrettyName string
  12. Arch string
  13. InContainer bool
  14. LastBrowserUserAgent string
  15. }
  16. func isInContainer() bool {
  17. if _, err := os.Stat("/.dockerenv"); errors.Is(err, os.ErrNotExist) {
  18. return false
  19. }
  20. return true
  21. }
  22. func getOsReleasePrettyName() string {
  23. handle, err := os.Open("/etc/os-release")
  24. if err != nil {
  25. return ""
  26. }
  27. scanner := bufio.NewScanner(handle)
  28. scanner.Split(bufio.ScanLines)
  29. for scanner.Scan() {
  30. line := scanner.Text()
  31. if strings.Contains(line, "PRETTY_NAME") {
  32. return line
  33. }
  34. }
  35. handle.Close()
  36. return "notfound"
  37. }
  38. var Runtime = &runtimeInfo{
  39. OS: runtime.GOOS,
  40. Arch: runtime.GOARCH,
  41. InContainer: isInContainer(),
  42. OSReleasePrettyName: getOsReleasePrettyName(),
  43. }