chore(userspace/falco/app/actions): refactor sysinfo function

Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
This commit is contained in:
Roberto Scolaro 2023-10-30 17:25:44 +01:00 committed by poiana
parent 29d3173ae3
commit df4e91476f

View File

@ -18,6 +18,7 @@ limitations under the License.
#ifndef _WIN32
#include <sys/utsname.h>
#endif
#include <iostream>
#include "actions.h"
#include "../../versions_info.h"
@ -34,6 +35,64 @@ static std::string read_file(const std::string &filename)
return str;
}
#ifndef _WIN32
static int get_unix_sysinfo(nlohmann::json &support)
{
struct utsname sysinfo;
if(uname(&sysinfo) != 0)
{
return -1;
}
support["system_info"]["sysname"] = sysinfo.sysname;
support["system_info"]["nodename"] = sysinfo.nodename;
support["system_info"]["release"] = sysinfo.release;
support["system_info"]["version"] = sysinfo.version;
support["system_info"]["machine"] = sysinfo.machine;
return 0;
}
#endif
#ifdef _WIN32
static int get_win32_sysinfo(nlohmann::json &support)
{
OSVERSIONINFO osvi;
SYSTEM_INFO sysInfo;
TCHAR computerName[256];
DWORD size = sizeof(computerName);
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetSystemInfo(&sysInfo);
if(!GetVersionEx(&osvi) || !GetComputerName(computerName, &size))
{
return -1;
}
support["system_info"]["sysname"] = "Windows";
support["system_info"]["nodename"] = computerName;
support["system_info"]["release"] = osvi.dwMajorVersion;
support["system_info"]["version"] = osvi.dwMinorVersion;
switch (sysInfo.wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
support["system_info"]["machine"] = "x86_64";
break;
case PROCESSOR_ARCHITECTURE_ARM:
support["system_info"]["machine"] = "ARM";
break;
case PROCESSOR_ARCHITECTURE_ARM64:
support["system_info"]["machine"] = "ARM64";
break;
case PROCESSOR_ARCHITECTURE_INTEL:
support["system_info"]["machine"] = "i386";
break;
default:
support["system_info"]["machine"] = "unknown";
}
return 0;
}
#endif
falco::app::run_result falco::app::actions::print_support(falco::app::state& s)
{
if(s.options.print_support)
@ -42,58 +101,18 @@ falco::app::run_result falco::app::actions::print_support(falco::app::state& s)
std::string cmdline;
#ifndef _WIN32
struct utsname sysinfo;
if(uname(&sysinfo) != 0)
{
return run_result::fatal(std::string("Could not uname() to find system info: ") + strerror(errno));
}
int rc = get_unix_sysinfo(support);
#else
OSVERSIONINFO osvi;
SYSTEM_INFO sysInfo;
TCHAR computerName[256];
DWORD size = sizeof(computerName);
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetSystemInfo(&sysInfo);
if(!GetVersionEx(&osvi) || !GetComputerName(computerName, &size))
int rc = get_win32_sysinfo(support);
#endif
if(rc != 0)
{
return run_result::fatal(std::string("Could not get system info: ") + strerror(errno));
}
#endif
const falco::versions_info infos(s.offline_inspector);
support["version"] = infos.falco_version;
support["engine_info"] = infos.as_json();
#ifndef _WIN32
support["system_info"]["sysname"] = sysinfo.sysname;
support["system_info"]["nodename"] = sysinfo.nodename;
support["system_info"]["release"] = sysinfo.release;
support["system_info"]["version"] = sysinfo.version;
support["system_info"]["machine"] = sysinfo.machine;
#else
support["system_info"]["sysname"] = "Windows";
support["system_info"]["nodename"] = computerName;
support["system_info"]["release"] = osvi.dwMajorVersion;
support["system_info"]["version"] = osvi.dwMinorVersion;
switch (sysInfo.wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
support["system_info"]["machine"] = "x86_64";
break;
case PROCESSOR_ARCHITECTURE_ARM:
support["system_info"]["machine"] = "ARM";
break;
case PROCESSOR_ARCHITECTURE_ARM64:
support["system_info"]["machine"] = "ARM64";
break;
case PROCESSOR_ARCHITECTURE_INTEL:
support["system_info"]["machine"] = "i386";
break;
default:
support["system_info"]["machine"] = "unknown";
}
#endif
support["cmdline"] = s.cmdline;
support["config"] = read_file(s.options.conf_filename);
support["rules_files"] = nlohmann::json::array();