]> granicus.if.org Git - icinga2/commitdiff
Add OS details in 'icinga2 --version'
authorGunnar Beutner <gunnar@beutner.name>
Mon, 16 Mar 2015 12:32:13 +0000 (13:32 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 16 Mar 2015 12:32:13 +0000 (13:32 +0100)
fixes #8761

lib/base/application.cpp

index ca0c3387472b29b40f52935b25b6421af04b8239..1e5a39cba858731cf5b460dc0d9718d70f794990 100644 (file)
@@ -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__ */
 }
 
 /**