mirror of https://github.com/Icinga/icinga2.git
parent
5991a878a0
commit
2320f7a32a
|
@ -371,7 +371,11 @@ NodeName |**Read-write.** Contains the cluster node name. Set to the
|
|||
UseVfork |**Read-write.** Whether to use vfork(). Only available on *NIX. Defaults to true.
|
||||
AttachDebugger |**Read-write.** Whether to attach a debugger when Icinga 2 crashes. Defaults to false.
|
||||
RunAsUser |**Read-write.** Defines the user the Icinga 2 daemon is running as. Used in the `init.conf` configuration file.
|
||||
RunAsGroup |**Read-write.** Defines the group the Icinga 2 daemon is running as. Used in the `init.conf` configuration file.
|
||||
RunAsGroup |**Read-write.** Defines the group the Icinga 2 daemon is running as. Used in the `init.conf` configuration file.
|
||||
PlatformName |**Read-only.** The name of the operating system, e.g. "Ubuntu".
|
||||
PlatformVersion |**Read-only.** The version of the operating system, e.g. "14.04.3 LTS".
|
||||
PlatformKernel |**Read-only.** The name of the operating system kernel, e.g. "Linux".
|
||||
PlatformKernelVersion|**Read-only.** The version of the operating system kernel, e.g. "3.13.0-63-generic".
|
||||
|
||||
## <a id="apply"></a> Apply
|
||||
|
||||
|
|
|
@ -176,6 +176,12 @@ int Main(void)
|
|||
|
||||
ScriptGlobal::Set("AttachDebugger", false);
|
||||
|
||||
ScriptGlobal::Set("PlatformKernel", Utility::GetPlatformKernel());
|
||||
ScriptGlobal::Set("PlatformKernelVersion", Utility::GetPlatformKernelVersion());
|
||||
ScriptGlobal::Set("PlatformName", Utility::GetPlatformName());
|
||||
ScriptGlobal::Set("PlatformVersion", Utility::GetPlatformVersion());
|
||||
ScriptGlobal::Set("PlatformArchitecture", Utility::GetPlatformArchitecture());
|
||||
|
||||
LogSeverity logLevel = Logger::GetConsoleLogSeverity();
|
||||
Logger::SetConsoleLogSeverity(LogWarning);
|
||||
|
||||
|
|
|
@ -44,9 +44,6 @@
|
|||
#ifdef __linux__
|
||||
#include <sys/prctl.h>
|
||||
#endif /* __linux__ */
|
||||
#ifdef _WIN32
|
||||
#include <VersionHelpers.h>
|
||||
#endif /*_WIN32*/
|
||||
|
||||
using namespace icinga;
|
||||
|
||||
|
@ -483,107 +480,6 @@ 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();
|
||||
|
||||
return result.Trim();
|
||||
}
|
||||
|
||||
int ReleaseHelper(std::string &result)
|
||||
{
|
||||
/* You are useing *some* distribution */
|
||||
FILE *fp = popen("lsb_release -s -d 2>&1", "r");
|
||||
std::ostringstream msgbuf;
|
||||
|
||||
if (fp != NULL) {
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
msgbuf << line;
|
||||
int status = pclose(fp);
|
||||
if (WEXITSTATUS(status) == 0) {
|
||||
result = msgbuf.str();
|
||||
boost::trim(result);
|
||||
return result.length();
|
||||
}
|
||||
}
|
||||
|
||||
/* You have systemd or Ubuntu etc. */
|
||||
std::ifstream release("/etc/os-release");
|
||||
std::string release_line;
|
||||
if (release.is_open()) {
|
||||
while (getline(release, release_line)) {
|
||||
if (release_line.find("PRETTY_NAME") != std::string::npos) {
|
||||
result = release_line.substr(13, release_line.length() - 14);
|
||||
return result.length();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Centos < 7 */
|
||||
release.close();
|
||||
release.open("/etc/redhat-release");
|
||||
if (release.is_open()) {
|
||||
getline(release, release_line);
|
||||
result = release_line;
|
||||
return result.length();
|
||||
}
|
||||
|
||||
/* sles 11 sp3, opensuse w/e */
|
||||
release.close();
|
||||
release.open("etc/SuSE-release");
|
||||
if (release.is_open()) {
|
||||
getline(release, release_line);
|
||||
result = release_line;
|
||||
return result.length();
|
||||
}
|
||||
|
||||
/* Just give up */
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
static String WindowsVersionHelper()
|
||||
{
|
||||
//Minimum required Version, the installer/user is in the responsibility to take care of that
|
||||
String winver = "Windows Vista";
|
||||
if (IsWindowsVistaSP1OrGreater())
|
||||
winver = "Windows Vista SP1";
|
||||
if (IsWindowsVistaSP2OrGreater())
|
||||
winver = "Windows Vista SP2";
|
||||
if (IsWindows7OrGreater())
|
||||
winver = "Windows 7";
|
||||
if (IsWindows7SP1OrGreater())
|
||||
winver = "Windows 7 SP1";
|
||||
if (IsWindows8OrGreater())
|
||||
winver = "Windows 8";
|
||||
if (IsWindows8Point1OrGreater())
|
||||
winver = "Windows 8.1 or greater";
|
||||
if (IsWindowsServer())
|
||||
winver += " (Server)";
|
||||
|
||||
return winver;
|
||||
}
|
||||
|
||||
#endif /* _WIN32 */
|
||||
|
||||
/**
|
||||
* Display version and path information.
|
||||
*/
|
||||
|
@ -605,24 +501,13 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion)
|
|||
<< " Vars path: " << GetVarsPath() << "\n"
|
||||
<< " PID path: " << GetPidPath() << "\n";
|
||||
|
||||
#ifndef _WIN32
|
||||
os << "\n"
|
||||
<< "System information:" << "\n"
|
||||
<< " Operating system: " << UnameHelper('s') << "\n"
|
||||
<< " Operating system version: " << UnameHelper('r') << "\n"
|
||||
<< " Architecture: " << UnameHelper('m') << "\n";
|
||||
#else
|
||||
os << "\n"
|
||||
<< "System information:\n"
|
||||
<< " Operating system: Windows\n"
|
||||
<< " Operating system version: " << WindowsVersionHelper() << "\n";
|
||||
#endif /* _WIN32 */
|
||||
|
||||
#ifdef __linux__
|
||||
std::string release;
|
||||
if (ReleaseHelper(release))
|
||||
os << " Distribution: " << release << "\n";
|
||||
#endif /* __linux__ */
|
||||
<< " Platform: " << Utility::GetPlatformName() << "\n"
|
||||
<< " Platform version: " << Utility::GetPlatformVersion() << "\n"
|
||||
<< " Kernel: " << Utility::GetPlatformKernel() << "\n"
|
||||
<< " Kernel version: " << Utility::GetPlatformKernelVersion() << "\n"
|
||||
<< " Architecture: " << Utility::GetPlatformArchitecture() << "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -46,11 +46,14 @@
|
|||
#endif /* HAVE_CXXABI_H */
|
||||
|
||||
#ifndef _WIN32
|
||||
# include <sys/types.h>
|
||||
# include <pwd.h>
|
||||
# include <grp.h>
|
||||
# include <sys/types.h>
|
||||
# include <pwd.h>
|
||||
# include <grp.h>
|
||||
#endif /* _WIN32 */
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <VersionHelpers.h>
|
||||
#endif /*_WIN32*/
|
||||
|
||||
using namespace icinga;
|
||||
|
||||
|
@ -1405,3 +1408,248 @@ String Utility::UnescapeString(const String& s)
|
|||
|
||||
return result.str();
|
||||
}
|
||||
|
||||
#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();
|
||||
|
||||
return result.Trim();
|
||||
}
|
||||
#endif /* _WIN32 */
|
||||
static bool ReleaseHelper(String *platformName, String *platformVersion)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (platformName)
|
||||
*platformName = "Windows";
|
||||
|
||||
if (platformVersion) {
|
||||
String *platformVersion = "Vista";
|
||||
if (IsWindowsVistaSP1OrGreater())
|
||||
*platformVersion = "Vista SP1";
|
||||
if (IsWindowsVistaSP2OrGreater())
|
||||
*platformVersion = "Vista SP2";
|
||||
if (IsWindows7OrGreater())
|
||||
*platformVersion = "7";
|
||||
if (IsWindows7SP1OrGreater())
|
||||
*platformVersion = "7 SP1";
|
||||
if (IsWindows8OrGreater())
|
||||
*platformVersion = "8";
|
||||
if (IsWindows8Point1OrGreater())
|
||||
*platformVersion = "8.1 or greater";
|
||||
if (IsWindowsServer())
|
||||
*platformVersion += " (Server)";
|
||||
}
|
||||
|
||||
return true;
|
||||
#else /* _WIN32 */
|
||||
if (platformName)
|
||||
*platformName = "Unknown";
|
||||
|
||||
if (platformVersion)
|
||||
*platformVersion = "Unknown";
|
||||
|
||||
/* You are using a distribution which supports LSB. */
|
||||
FILE *fp = popen("lsb_release -s -i 2>&1", "r");
|
||||
|
||||
if (fp != NULL) {
|
||||
std::ostringstream msgbuf;
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
msgbuf << line;
|
||||
int status = pclose(fp);
|
||||
if (WEXITSTATUS(status) == 0) {
|
||||
if (platformName)
|
||||
*platformName = msgbuf.str();
|
||||
}
|
||||
}
|
||||
|
||||
fp = popen("lsb_release -s -r 2>&1", "r");
|
||||
|
||||
if (fp != NULL) {
|
||||
std::ostringstream msgbuf;
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
msgbuf << line;
|
||||
int status = pclose(fp);
|
||||
if (WEXITSTATUS(status) == 0) {
|
||||
if (platformVersion)
|
||||
*platformVersion = msgbuf.str();
|
||||
}
|
||||
}
|
||||
|
||||
/* OS X */
|
||||
fp = popen("sw_vers -productName 2>&1", "r");
|
||||
|
||||
if (fp != NULL) {
|
||||
std::ostringstream msgbuf;
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
msgbuf << line;
|
||||
int status = pclose(fp);
|
||||
if (WEXITSTATUS(status) == 0) {
|
||||
String info = msgbuf.str();
|
||||
info = info.Trim();
|
||||
|
||||
if (platformName)
|
||||
*platformName = info;
|
||||
}
|
||||
}
|
||||
|
||||
fp = popen("sw_vers -productVersion 2>&1", "r");
|
||||
|
||||
if (fp != NULL) {
|
||||
std::ostringstream msgbuf;
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
msgbuf << line;
|
||||
int status = pclose(fp);
|
||||
if (WEXITSTATUS(status) == 0) {
|
||||
String info = msgbuf.str();
|
||||
info = info.Trim();
|
||||
|
||||
if (platformVersion)
|
||||
*platformVersion = info;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* You have systemd or Ubuntu etc. */
|
||||
std::ifstream release("/etc/os-release");
|
||||
if (release.is_open()) {
|
||||
std::string release_line;
|
||||
while (getline(release, release_line)) {
|
||||
if (platformName) {
|
||||
if (release_line.find("NAME") != std::string::npos) {
|
||||
*platformName = release_line.substr(6, release_line.length() - 7);
|
||||
}
|
||||
}
|
||||
|
||||
if (platformVersion) {
|
||||
if (release_line.find("VERSION") != std::string::npos) {
|
||||
*platformVersion = release_line.substr(8, release_line.length() - 9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Centos < 7 */
|
||||
release.close();
|
||||
release.open("/etc/redhat-release");
|
||||
if (release.is_open()) {
|
||||
std::string release_line;
|
||||
getline(release, release_line);
|
||||
|
||||
String info = release_line;
|
||||
|
||||
if (platformName)
|
||||
*platformName = info.SubStr(0, info.FindFirstOf(" "));
|
||||
|
||||
if (platformVersion)
|
||||
*platformVersion = info.SubStr(info.FindFirstOf(" ") + 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* sles 11 sp3, opensuse w/e */
|
||||
release.close();
|
||||
release.open("/etc/SuSE-release");
|
||||
if (release.is_open()) {
|
||||
std::string release_line;
|
||||
getline(release, release_line);
|
||||
|
||||
String info = release_line;
|
||||
|
||||
if (platformName)
|
||||
*platformName = info.SubStr(0, info.FindFirstOf(" "));
|
||||
|
||||
if (platformVersion)
|
||||
*platformVersion = info.SubStr(info.FindFirstOf(" ") + 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Just give up */
|
||||
return false;
|
||||
#endif /* _WIN32 */
|
||||
}
|
||||
|
||||
String Utility::GetPlatformKernel(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return "Windows";
|
||||
#else /* _WIN32 */
|
||||
return UnameHelper('s');
|
||||
#endif /* _WIN32 */
|
||||
}
|
||||
|
||||
String Utility::GetPlatformKernelVersion(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
OSVERSIONINFO info;
|
||||
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
GetVersionEx(&info);
|
||||
|
||||
std::ostringstream msgbuf;
|
||||
msgbuf << info.dwMajorVersion << "." << info.dwMinorVersion;
|
||||
|
||||
return msgbuf.str();
|
||||
#else /* _WIN32 */
|
||||
return UnameHelper('r');
|
||||
#endif /* _WIN32 */
|
||||
}
|
||||
|
||||
String Utility::GetPlatformName(void)
|
||||
{
|
||||
String platformName;
|
||||
if (!ReleaseHelper(&platformName, NULL))
|
||||
return "Unknown";
|
||||
return platformName;
|
||||
}
|
||||
|
||||
String Utility::GetPlatformVersion(void)
|
||||
{
|
||||
String platformVersion;
|
||||
if (!ReleaseHelper(NULL, &platformVersion))
|
||||
return "Unknown";
|
||||
return platformVersion;
|
||||
}
|
||||
|
||||
String Utility::GetPlatformArchitecture(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
SYSTEM_INFO info;
|
||||
GetNativeSystemInfo(&info);
|
||||
switch (info.wProcessorArchitecture) {
|
||||
case PROCESSOR_ARCHITECTURE_AMD64:
|
||||
return "x86_64";
|
||||
case PROCESSOR_ARCHITECTURE_ARM:
|
||||
return "arm";
|
||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
return "x86";
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
#else /* _WIN32 */
|
||||
return UnameHelper('m');
|
||||
#endif /* _WIN32 */
|
||||
}
|
||||
|
|
|
@ -133,6 +133,12 @@ public:
|
|||
static Value LoadJsonFile(const String& path);
|
||||
static void SaveJsonFile(const String& path, const Value& value);
|
||||
|
||||
static String GetPlatformKernel(void);
|
||||
static String GetPlatformKernelVersion(void);
|
||||
static String GetPlatformName(void);
|
||||
static String GetPlatformVersion(void);
|
||||
static String GetPlatformArchitecture(void);
|
||||
|
||||
private:
|
||||
Utility(void);
|
||||
static void CollectPaths(const String& path, std::vector<String>& paths);
|
||||
|
|
Loading…
Reference in New Issue