From ea7d1ee77dc7d8cd7a773d22ed6b5f68c0885a4a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 16 Mar 2015 13:32:13 +0100 Subject: [PATCH] Add OS details in 'icinga2 --version' fixes #8761 --- lib/base/application.cpp | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/lib/base/application.cpp b/lib/base/application.cpp index ca0c33874..1e5a39cba 100644 --- a/lib/base/application.cpp +++ b/lib/base/application.cpp @@ -459,6 +459,50 @@ String Application::GetExePath(const String& argv0) #endif /* _WIN32 */ } +#ifndef _WIN32 +static String UnameHelper(char type) +{ + /* Unfortunately the uname() system call doesn't support some of the + * query types we're interested in - so we're using popen() instead. */ + + char cmd[] = "uname -X 2>&1"; + cmd[7] = type; + + FILE *fp = popen(cmd, "r"); + + char line[1024]; + std::ostringstream msgbuf; + + while (fgets(line, sizeof(line), fp) != NULL) + msgbuf << line; + + pclose(fp); + + String result = msgbuf.str(); + result.Trim(); + + return result; +} + +static String LsbReleaseHelper(void) +{ + FILE *fp = popen("lsb_release -s -d 2>&1", "r"); + + char line[1024]; + std::ostringstream msgbuf; + + while (fgets(line, sizeof(line), fp) != NULL) + msgbuf << line; + + pclose(fp); + + String result = msgbuf.str(); + result.Trim(); + + return result; +} +#endif /* _WIN32 */ + /** * Display version and path information. */ @@ -479,6 +523,18 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion) << " Vars path: " << GetVarsPath() << "\n" << " PID path: " << GetPidPath() << "\n" << " Application type: " << GetApplicationType() << "\n"; + +#ifndef _WIN32 + os << "\n" + << "System information:" << "\n" + << " Operating system: " << UnameHelper('s') << "\n" + << " Operating system version: " << UnameHelper('r') << "\n" + << " Architecture: " << UnameHelper('m') << "\n"; +#endif /* _WIN32 */ + +#ifdef __linux__ + os << " Distribution: " << LsbReleaseHelper() << "\n"; +#endif /* __linux__ */ } /** -- 2.40.0