mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-06 13:24:28 +02:00
parent
c983fdea31
commit
b14a48d519
@ -372,6 +372,10 @@ UseVfork |**Read-write.** Whether to use vfork(). Only available on *
|
|||||||
AttachDebugger |**Read-write.** Whether to attach a debugger when Icinga 2 crashes. Defaults to false.
|
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.
|
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
|
## <a id="apply"></a> Apply
|
||||||
|
|
||||||
|
@ -176,6 +176,12 @@ int Main(void)
|
|||||||
|
|
||||||
ScriptGlobal::Set("AttachDebugger", false);
|
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();
|
LogSeverity logLevel = Logger::GetConsoleLogSeverity();
|
||||||
Logger::SetConsoleLogSeverity(LogWarning);
|
Logger::SetConsoleLogSeverity(LogWarning);
|
||||||
|
|
||||||
|
@ -44,9 +44,6 @@
|
|||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
#endif /* __linux__ */
|
#endif /* __linux__ */
|
||||||
#ifdef _WIN32
|
|
||||||
#include <VersionHelpers.h>
|
|
||||||
#endif /*_WIN32*/
|
|
||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
@ -483,107 +480,6 @@ String Application::GetExePath(const String& argv0)
|
|||||||
#endif /* _WIN32 */
|
#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.
|
* Display version and path information.
|
||||||
*/
|
*/
|
||||||
@ -605,24 +501,13 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion)
|
|||||||
<< " Vars path: " << GetVarsPath() << "\n"
|
<< " Vars path: " << GetVarsPath() << "\n"
|
||||||
<< " PID path: " << GetPidPath() << "\n";
|
<< " PID path: " << GetPidPath() << "\n";
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
os << "\n"
|
os << "\n"
|
||||||
<< "System information:" << "\n"
|
<< "System information:" << "\n"
|
||||||
<< " Operating system: " << UnameHelper('s') << "\n"
|
<< " Platform: " << Utility::GetPlatformName() << "\n"
|
||||||
<< " Operating system version: " << UnameHelper('r') << "\n"
|
<< " Platform version: " << Utility::GetPlatformVersion() << "\n"
|
||||||
<< " Architecture: " << UnameHelper('m') << "\n";
|
<< " Kernel: " << Utility::GetPlatformKernel() << "\n"
|
||||||
#else
|
<< " Kernel version: " << Utility::GetPlatformKernelVersion() << "\n"
|
||||||
os << "\n"
|
<< " Architecture: " << Utility::GetPlatformArchitecture() << "\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__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
# include <grp.h>
|
# include <grp.h>
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# include <VersionHelpers.h>
|
||||||
|
#endif /*_WIN32*/
|
||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
@ -1405,3 +1408,248 @@ String Utility::UnescapeString(const String& s)
|
|||||||
|
|
||||||
return result.str();
|
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 Value LoadJsonFile(const String& path);
|
||||||
static void SaveJsonFile(const String& path, const Value& value);
|
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:
|
private:
|
||||||
Utility(void);
|
Utility(void);
|
||||||
static void CollectPaths(const String& path, std::vector<String>& paths);
|
static void CollectPaths(const String& path, std::vector<String>& paths);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user