mirror of
https://github.com/falcosecurity/falco.git
synced 2025-08-11 02:52:54 +00:00
new(userspace/falco): standaline utility for retrieving internal version numbers
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
This commit is contained in:
parent
bb9edea666
commit
7724ad940a
@ -54,6 +54,7 @@ set(
|
|||||||
outputs_syslog.cpp
|
outputs_syslog.cpp
|
||||||
event_drops.cpp
|
event_drops.cpp
|
||||||
stats_writer.cpp
|
stats_writer.cpp
|
||||||
|
versions_info.cpp
|
||||||
falco.cpp
|
falco.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
80
userspace/falco/versions_info.cpp
Normal file
80
userspace/falco/versions_info.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2023 The Falco Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "versions_info.h"
|
||||||
|
|
||||||
|
#include "config_falco.h"
|
||||||
|
#include "falco_engine_version.h"
|
||||||
|
|
||||||
|
#include <plugin_manager.h>
|
||||||
|
|
||||||
|
// todo: move string conversion to scap
|
||||||
|
static std::string get_driver_api_version(const std::shared_ptr<sinsp>& s)
|
||||||
|
{
|
||||||
|
auto driver_api_version = s->get_scap_api_version();
|
||||||
|
unsigned long driver_api_major = PPM_API_VERSION_MAJOR(driver_api_version);
|
||||||
|
unsigned long driver_api_minor = PPM_API_VERSION_MINOR(driver_api_version);
|
||||||
|
unsigned long driver_api_patch = PPM_API_VERSION_PATCH(driver_api_version);
|
||||||
|
|
||||||
|
char driver_api_version_string[32];
|
||||||
|
snprintf(driver_api_version_string, sizeof(driver_api_version_string), "%lu.%lu.%lu", driver_api_major, driver_api_minor, driver_api_patch);
|
||||||
|
return std::string(driver_api_version_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo: move string conversion to scap
|
||||||
|
static inline std::string get_driver_schema_version(const std::shared_ptr<sinsp>& s)
|
||||||
|
{
|
||||||
|
auto driver_schema_version = s->get_scap_schema_version();
|
||||||
|
unsigned long driver_schema_major = PPM_API_VERSION_MAJOR(driver_schema_version);
|
||||||
|
unsigned long driver_schema_minor = PPM_API_VERSION_MINOR(driver_schema_version);
|
||||||
|
unsigned long driver_schema_patch = PPM_API_VERSION_PATCH(driver_schema_version);
|
||||||
|
|
||||||
|
char driver_schema_version_string[32];
|
||||||
|
snprintf(driver_schema_version_string, sizeof(driver_schema_version_string), "%lu.%lu.%lu", driver_schema_major, driver_schema_minor, driver_schema_patch);
|
||||||
|
return std::string(driver_schema_version_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
falco::versions_info::versions_info(const std::shared_ptr<sinsp>& inspector)
|
||||||
|
{
|
||||||
|
falco_version = FALCO_VERSION;
|
||||||
|
engine_version = std::to_string(FALCO_ENGINE_VERSION);
|
||||||
|
libs_version = FALCOSECURITY_LIBS_VERSION;
|
||||||
|
plugin_api_version = inspector->get_plugin_api_version();
|
||||||
|
driver_api_version = get_driver_api_version(inspector);
|
||||||
|
driver_schema_version = get_driver_schema_version(inspector);
|
||||||
|
default_driver_version = DRIVER_VERSION;
|
||||||
|
for (const auto &p : inspector->get_plugin_manager()->plugins())
|
||||||
|
{
|
||||||
|
plugin_versions[p->name()] = p->plugin_version().as_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nlohmann::json falco::versions_info::as_json() const
|
||||||
|
{
|
||||||
|
nlohmann::json version_info;
|
||||||
|
version_info["falco_version"] = falco_version;
|
||||||
|
version_info["libs_version"] = libs_version;
|
||||||
|
version_info["plugin_api_version"] = plugin_api_version;
|
||||||
|
version_info["driver_api_version"] = driver_api_version;
|
||||||
|
version_info["driver_schema_version"] = driver_schema_version;
|
||||||
|
version_info["default_driver_version"] = default_driver_version;
|
||||||
|
version_info["engine_version"] = engine_version;
|
||||||
|
for (const auto& pv : plugin_versions)
|
||||||
|
{
|
||||||
|
version_info["plugin_versions"][pv.first] = pv.second;
|
||||||
|
}
|
||||||
|
return version_info;
|
||||||
|
}
|
54
userspace/falco/versions_info.h
Normal file
54
userspace/falco/versions_info.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2023 The Falco Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <sinsp.h>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
namespace falco
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief Container for the version of Falco components
|
||||||
|
*/
|
||||||
|
struct versions_info
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief Construct a versions info by using an inspector to obtain
|
||||||
|
* versions about the drivers and the loaded plugins.
|
||||||
|
*/
|
||||||
|
versions_info(const std::shared_ptr<sinsp>& inspector);
|
||||||
|
versions_info(versions_info&&) = default;
|
||||||
|
versions_info& operator = (versions_info&&) = default;
|
||||||
|
versions_info(const versions_info& s) = default;
|
||||||
|
versions_info& operator = (const versions_info& s) = default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Encode the versions info as a JSON object
|
||||||
|
*/
|
||||||
|
nlohmann::json as_json() const;
|
||||||
|
|
||||||
|
std::string falco_version;
|
||||||
|
std::string engine_version;
|
||||||
|
std::string libs_version;
|
||||||
|
std::string plugin_api_version;
|
||||||
|
std::string driver_api_version;
|
||||||
|
std::string driver_schema_version;
|
||||||
|
std::string default_driver_version;
|
||||||
|
std::unordered_map<std::string, std::string> plugin_versions;
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user