Skip to content

Commit 91b90cb

Browse files
committed
update(metrics): use new libs addr_to_string methods for host_ifinfo_json
Signed-off-by: Melissa Kilby <[email protected]>
1 parent fcbd15d commit 91b90cb

File tree

6 files changed

+27
-97
lines changed

6 files changed

+27
-97
lines changed

unit_tests/engine/test_falco_utils.cpp

-25
Original file line numberDiff line numberDiff line change
@@ -101,28 +101,3 @@ TEST(FalcoUtils, matches_wildcard)
101101
ASSERT_FALSE(falco::utils::matches_wildcard("*hello*world", "come on hello this world yes"));
102102
ASSERT_FALSE(falco::utils::matches_wildcard("*hello*world*", "come on hello this yes"));
103103
}
104-
105-
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
106-
TEST(FalcoUtils, ipv4addr_to_string)
107-
{
108-
ASSERT_EQ(falco::utils::network::ipv4addr_to_string(0x0101A8C0), "192.168.1.1");
109-
ASSERT_EQ(falco::utils::network::ipv4addr_to_string(0x0100007F), "127.0.0.1");
110-
ASSERT_EQ(falco::utils::network::ipv4addr_to_string(0xFFFFFFFF), "255.255.255.255");
111-
ASSERT_EQ(falco::utils::network::ipv4addr_to_string(0x00000000), "0.0.0.0");
112-
}
113-
114-
TEST(FalcoUtils, ipv6addr_to_string)
115-
{
116-
ipv6addr addr1("2001:0db8:85a3:0000:0000:8a2e:0370:7334");
117-
ASSERT_EQ(falco::utils::network::ipv6addr_to_string(addr1), "2001:db8:85a3:0:0:8a2e:370:7334");
118-
119-
ipv6addr addr2("fe80:0:0:0:2aa:ff:fe9a:4ca3");
120-
ASSERT_EQ(falco::utils::network::ipv6addr_to_string(addr2), "fe80:0:0:0:2aa:ff:fe9a:4ca3");
121-
122-
ipv6addr addr3("0:0:0:0:0:0:0:0");
123-
ASSERT_EQ(falco::utils::network::ipv6addr_to_string(addr3), "0:0:0:0:0:0:0:0");
124-
125-
ipv6addr addr4("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
126-
ASSERT_EQ(falco::utils::network::ipv6addr_to_string(addr4), "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
127-
}
128-
#endif

userspace/engine/falco_utils.cpp

-32
Original file line numberDiff line numberDiff line change
@@ -257,38 +257,6 @@ bool is_unix_scheme(const std::string& url)
257257
{
258258
return sinsp_utils::startswith(url, UNIX_SCHEME);
259259
}
260-
261-
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
262-
std::string ipv4addr_to_string(uint32_t addr)
263-
{
264-
char dest[16];
265-
snprintf(
266-
dest,
267-
sizeof(dest),
268-
"%d.%d.%d.%d",
269-
(addr & 0xFF),
270-
((addr & 0xFF00) >> 8),
271-
((addr & 0xFF0000) >> 16),
272-
((addr & 0xFF000000) >> 24));
273-
return std::string(dest);
274-
}
275-
276-
std::string ipv6addr_to_string(const ipv6addr& addr)
277-
{
278-
std::ostringstream oss;
279-
const uint16_t* words = reinterpret_cast<const uint16_t*>(addr.m_b);
280-
for (int i = 0; i < 8; ++i)
281-
{
282-
if (i != 0)
283-
{
284-
oss << ':';
285-
}
286-
oss << std::hex << ntohs(words[i]);
287-
}
288-
return oss.str();
289-
}
290-
#endif
291-
292260
} // namespace network
293261
} // namespace utils
294262
} // namespace falco

userspace/engine/falco_utils.h

-6
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,5 @@ namespace network
4949
{
5050
static const std::string UNIX_SCHEME("unix://");
5151
bool is_unix_scheme(const std::string& url);
52-
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
53-
// todo: consider extending libs and expose API for ipv4 and ipv6 to string conversion
54-
std::string ipv4addr_to_string(uint32_t addr);
55-
std::string ipv6addr_to_string(const ipv6addr& addr);
56-
#endif
57-
5852
} // namespace network
5953
} // namespace falco::utils

userspace/falco/falco_metrics.cpp

+21-26
Original file line numberDiff line numberDiff line change
@@ -112,44 +112,39 @@ std::string falco_metrics::to_text(const falco::app::state& state)
112112
prometheus_text += prometheus_metrics_converter.convert_metric_to_text_prometheus(metric_name_file_sha256, "falcosecurity", "falco", {{metric_name_file_sha256, item.second}});
113113
}
114114

115-
static bool is_first_call = true;
116115
static std::string ifinfo_json_escaped;
117-
if (is_first_call)
116+
auto ipv4list = inspector->get_ifaddr_list().get_ipv4_list();
117+
auto ipv6list = inspector->get_ifaddr_list().get_ipv6_list();
118+
nlohmann::json ipv4_json;
119+
nlohmann::json ipv6_json;
120+
if(ipv4list)
118121
{
119-
is_first_call = false;
120-
auto ipv4list = inspector->get_ifaddr_list().get_ipv4_list();
121-
auto ipv6list = inspector->get_ifaddr_list().get_ipv6_list();
122-
nlohmann::json ipv4_json;
123-
nlohmann::json ipv6_json;
124-
if(ipv4list)
122+
for (const auto& item : *ipv4list)
125123
{
126-
for (const auto& item : *ipv4list)
124+
if(item.m_name == "lo")
127125
{
128-
if(item.m_name == "lo")
129-
{
130-
continue;
131-
}
132-
ipv4_json[item.m_name] = falco::utils::network::ipv4addr_to_string(item.m_addr);
126+
continue;
133127
}
128+
ipv4_json[item.m_name] = item.addr_to_string();
134129
}
130+
}
135131

136-
if(ipv6list)
132+
if(ipv6list)
133+
{
134+
for (const auto& item : *ipv6list)
137135
{
138-
for (const auto& item : *ipv6list)
136+
if(item.m_name == "lo")
139137
{
140-
if(item.m_name == "lo")
141-
{
142-
continue;
143-
}
144-
ipv6_json[item.m_name] = falco::utils::network::ipv6addr_to_string(item.m_net);
138+
continue;
145139
}
140+
ipv6_json[item.m_name] = item.addr_to_string();
146141
}
147-
nlohmann::json ifinfo_json;
148-
ifinfo_json["ipv4"] = ipv4_json;
149-
ifinfo_json["ipv6"] = ipv6_json;
150-
ifinfo_json_escaped = ifinfo_json.dump();
151142
}
152-
prometheus_text += prometheus_metrics_converter.convert_metric_to_text_prometheus("host_ifinfo", "falcosecurity", "falco", {{"host_ifinfo", ifinfo_json_escaped}});
143+
nlohmann::json ifinfo_json;
144+
ifinfo_json["ipv4"] = ipv4_json;
145+
ifinfo_json["ipv6"] = ipv6_json;
146+
ifinfo_json_escaped = ifinfo_json.dump();
147+
prometheus_text += prometheus_metrics_converter.convert_metric_to_text_prometheus("host_ifinfo_json", "falcosecurity", "falco", {{"host_ifinfo_json", ifinfo_json_escaped}});
153148
#endif
154149

155150
for (const std::string& source: inspector->event_sources())

userspace/falco/stats_writer.cpp

+5-8
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,8 @@ void stats_writer::collector::get_metrics_output_fields_wrapper(
358358
output_fields[metric_name_file_sha256] = item.second;
359359
}
360360

361-
static bool is_first_call = true;
362-
static std::string ifinfo_json_escaped;
363-
if (is_first_call)
361+
if (stats_snapshot_time_delta_sec == 0)
364362
{
365-
is_first_call = false;
366363
auto ipv4list = inspector->get_ifaddr_list().get_ipv4_list();
367364
auto ipv6list = inspector->get_ifaddr_list().get_ipv6_list();
368365
nlohmann::json ipv4_json;
@@ -375,7 +372,7 @@ void stats_writer::collector::get_metrics_output_fields_wrapper(
375372
{
376373
continue;
377374
}
378-
ipv4_json[item.m_name] = falco::utils::network::ipv4addr_to_string(item.m_addr);
375+
ipv4_json[item.m_name] = item.addr_to_string();
379376
}
380377
}
381378

@@ -387,15 +384,15 @@ void stats_writer::collector::get_metrics_output_fields_wrapper(
387384
{
388385
continue;
389386
}
390-
ipv6_json[item.m_name] = falco::utils::network::ipv6addr_to_string(item.m_net);
387+
ipv6_json[item.m_name] = item.addr_to_string();
391388
}
392389
}
393390
nlohmann::json ifinfo_json;
394391
ifinfo_json["ipv4"] = ipv4_json;
395392
ifinfo_json["ipv6"] = ipv6_json;
396-
ifinfo_json_escaped = ifinfo_json.dump();
393+
m_ifinfo_json_escaped = ifinfo_json.dump();
397394
}
398-
output_fields["falco.host_ifinfo"] = ifinfo_json_escaped;
395+
output_fields["falco.host_ifinfo_json"] = m_ifinfo_json_escaped;
399396

400397
#endif
401398
output_fields["evt.source"] = src;

userspace/falco/stats_writer.h

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class stats_writer
8080
uint64_t m_last_n_evts = 0;
8181
uint64_t m_last_n_drops = 0;
8282
uint64_t m_last_num_evts = 0;
83+
std::string m_ifinfo_json_escaped;
8384
};
8485

8586
stats_writer(const stats_writer&) = delete;

0 commit comments

Comments
 (0)