summaryrefslogtreecommitdiff
path: root/examples/c-influxd
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2023-12-15 09:16:28 +0100
committerToni Uhlig <matzeton@googlemail.com>2023-12-15 09:16:28 +0100
commit8acf2d72737545b966df6b078043557d50d7ffee (patch)
treec8c3ee0440af1d74b84e3d41befe7009b32f329e /examples/c-influxd
parent71d933b0cd9b03cf3b8acf659c8b4b564ba9431d (diff)
Improved InfluxDB push daemon.
* added proper gauge handling that enables pushing data w/o missing out anything e.g. short flows with a lifetime in-between two InfluxDB intervals Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'examples/c-influxd')
-rw-r--r--examples/c-influxd/c-influxd.c408
1 files changed, 261 insertions, 147 deletions
diff --git a/examples/c-influxd/c-influxd.c b/examples/c-influxd/c-influxd.c
index caa8be20c..55160c2a7 100644
--- a/examples/c-influxd/c-influxd.c
+++ b/examples/c-influxd/c-influxd.c
@@ -205,132 +205,152 @@ static struct
nDPIsrvd_ull flow_risk_count[NDPI_MAX_RISK - 1];
nDPIsrvd_ull flow_risk_unknown_count;
- } gauges;
+ } gauges[2]; /* values after InfluxDB push: gauges[0] -= gauges[1], gauges[1] is zero'd afterwards */
} influxd_statistics = {.rw_lock = PTHREAD_MUTEX_INITIALIZER};
struct global_map
{
char const * const json_key;
- uint64_t * const global_stat;
+ struct
+ {
+ uint64_t * const global_stat_inc;
+ uint64_t * const global_stat_dec;
+ };
};
-static struct global_map const flow_event_map[] = {{"new", &influxd_statistics.counters.flow_new_count},
- {"end", &influxd_statistics.counters.flow_end_count},
- {"idle", &influxd_statistics.counters.flow_idle_count},
- {"update", &influxd_statistics.counters.flow_update_count},
- {"analyse", &influxd_statistics.counters.flow_analyse_count},
- {"guessed", &influxd_statistics.counters.flow_guessed_count},
- {"detected", &influxd_statistics.counters.flow_detected_count},
+#define INFLUXD_STATS_COUNTER_PTR(member) \
+ { \
+ .global_stat_inc = &(influxd_statistics.counters.member), NULL \
+ }
+#define INFLUXD_STATS_GAUGE_PTR(member) \
+ { \
+ .global_stat_inc = &(influxd_statistics.gauges[0].member), \
+ .global_stat_dec = &(influxd_statistics.gauges[1].member) \
+ }
+#define INFLUXD_STATS_COUNTER_INC(member) (influxd_statistics.counters.member++)
+#define INFLUXD_STATS_GAUGE_RES(member) (influxd_statistics.gauges[0].member--)
+#define INFLUXD_STATS_GAUGE_INC(member) (influxd_statistics.gauges[0].member++)
+#define INFLUXD_STATS_GAUGE_DEC(member) (influxd_statistics.gauges[1].member++)
+#define INFLUXD_STATS_GAUGE_SUB(member) (influxd_statistics.gauges[0].member -= influxd_statistics.gauges[1].member)
+#define INFLUXD_STATS_MAP_NOTNULL(map, index) (map[index - 1].global_stat_dec != NULL)
+#define INFLUXD_STATS_MAP_DEC(map, index) ((*map[index - 1].global_stat_dec)++)
+
+static struct global_map const flow_event_map[] = {{"new", INFLUXD_STATS_COUNTER_PTR(flow_new_count)},
+ {"end", INFLUXD_STATS_COUNTER_PTR(flow_end_count)},
+ {"idle", INFLUXD_STATS_COUNTER_PTR(flow_idle_count)},
+ {"update", INFLUXD_STATS_COUNTER_PTR(flow_update_count)},
+ {"analyse", INFLUXD_STATS_COUNTER_PTR(flow_analyse_count)},
+ {"guessed", INFLUXD_STATS_COUNTER_PTR(flow_guessed_count)},
+ {"detected", INFLUXD_STATS_COUNTER_PTR(flow_detected_count)},
{"detection-update",
- &influxd_statistics.counters.flow_detection_update_count},
+ INFLUXD_STATS_COUNTER_PTR(flow_detection_update_count)},
{"not-detected",
- &influxd_statistics.counters.flow_not_detected_count}};
+ INFLUXD_STATS_COUNTER_PTR(flow_not_detected_count)}};
-static struct global_map const packet_event_map[] = {{"packet", &influxd_statistics.counters.packet_count},
- {"packet-flow", &influxd_statistics.counters.packet_flow_count}};
+static struct global_map const packet_event_map[] = {{"packet", INFLUXD_STATS_COUNTER_PTR(packet_count)},
+ {"packet-flow", INFLUXD_STATS_COUNTER_PTR(packet_flow_count)}};
-static struct global_map const daemon_event_map[] = {{"init", &influxd_statistics.counters.init_count},
- {"reconnect", &influxd_statistics.counters.reconnect_count},
- {"shutdown", &influxd_statistics.counters.shutdown_count},
- {"status", &influxd_statistics.counters.status_count}};
+static struct global_map const daemon_event_map[] = {{"init", INFLUXD_STATS_COUNTER_PTR(init_count)},
+ {"reconnect", INFLUXD_STATS_COUNTER_PTR(reconnect_count)},
+ {"shutdown", INFLUXD_STATS_COUNTER_PTR(shutdown_count)},
+ {"status", INFLUXD_STATS_COUNTER_PTR(status_count)}};
static struct global_map const error_event_map[] = {
- {"Unknown datalink layer packet", &influxd_statistics.counters.error_unknown_datalink},
- {"Unknown L3 protocol", &influxd_statistics.counters.error_unknown_l3_protocol},
- {"Unsupported datalink layer", &influxd_statistics.counters.error_unsupported_datalink},
- {"Packet too short", &influxd_statistics.counters.error_packet_too_short},
- {"Unknown packet type", &influxd_statistics.counters.error_packet_type_unknown},
- {"Packet header invalid", &influxd_statistics.counters.error_packet_header_invalid},
- {"IP4 packet too short", &influxd_statistics.counters.error_ip4_packet_too_short},
- {"Packet smaller than IP4 header", &influxd_statistics.counters.error_ip4_size_smaller_than_header},
- {"nDPI IPv4\\/L4 payload detection failed", &influxd_statistics.counters.error_ip4_l4_payload_detection},
- {"IP6 packet too short", &influxd_statistics.counters.error_ip6_packet_too_short},
- {"Packet smaller than IP6 header", &influxd_statistics.counters.error_ip6_size_smaller_than_header},
- {"nDPI IPv6\\/L4 payload detection failed", &influxd_statistics.counters.error_ip6_l4_payload_detection},
- {"TCP packet smaller than expected", &influxd_statistics.counters.error_tcp_packet_too_short},
- {"UDP packet smaller than expected", &influxd_statistics.counters.error_udp_packet_too_short},
+ {"Unknown datalink layer packet", INFLUXD_STATS_COUNTER_PTR(error_unknown_datalink)},
+ {"Unknown L3 protocol", INFLUXD_STATS_COUNTER_PTR(error_unknown_l3_protocol)},
+ {"Unsupported datalink layer", INFLUXD_STATS_COUNTER_PTR(error_unsupported_datalink)},
+ {"Packet too short", INFLUXD_STATS_COUNTER_PTR(error_packet_too_short)},
+ {"Unknown packet type", INFLUXD_STATS_COUNTER_PTR(error_packet_type_unknown)},
+ {"Packet header invalid", INFLUXD_STATS_COUNTER_PTR(error_packet_header_invalid)},
+ {"IP4 packet too short", INFLUXD_STATS_COUNTER_PTR(error_ip4_packet_too_short)},
+ {"Packet smaller than IP4 header", INFLUXD_STATS_COUNTER_PTR(error_ip4_size_smaller_than_header)},
+ {"nDPI IPv4\\/L4 payload detection failed", INFLUXD_STATS_COUNTER_PTR(error_ip4_l4_payload_detection)},
+ {"IP6 packet too short", INFLUXD_STATS_COUNTER_PTR(error_ip6_packet_too_short)},
+ {"Packet smaller than IP6 header", INFLUXD_STATS_COUNTER_PTR(error_ip6_size_smaller_than_header)},
+ {"nDPI IPv6\\/L4 payload detection failed", INFLUXD_STATS_COUNTER_PTR(error_ip6_l4_payload_detection)},
+ {"TCP packet smaller than expected", INFLUXD_STATS_COUNTER_PTR(error_tcp_packet_too_short)},
+ {"UDP packet smaller than expected", INFLUXD_STATS_COUNTER_PTR(error_udp_packet_too_short)},
{"Captured packet size is smaller than expected packet size",
- &influxd_statistics.counters.error_capture_size_smaller_than_packet},
- {"Max flows to track reached", &influxd_statistics.counters.error_max_flows_to_track},
- {"Flow memory allocation failed", &influxd_statistics.counters.error_flow_memory_alloc}};
-
-static struct global_map const breeds_map[] = {{"Safe", &influxd_statistics.gauges.flow_breed_safe_count},
- {"Acceptable", &influxd_statistics.gauges.flow_breed_acceptable_count},
- {"Fun", &influxd_statistics.gauges.flow_breed_fun_count},
- {"Unsafe", &influxd_statistics.gauges.flow_breed_unsafe_count},
+ INFLUXD_STATS_COUNTER_PTR(error_capture_size_smaller_than_packet)},
+ {"Max flows to track reached", INFLUXD_STATS_COUNTER_PTR(error_max_flows_to_track)},
+ {"Flow memory allocation failed", INFLUXD_STATS_COUNTER_PTR(error_flow_memory_alloc)}};
+
+static struct global_map const breeds_map[] = {{"Safe", INFLUXD_STATS_GAUGE_PTR(flow_breed_safe_count)},
+ {"Acceptable", INFLUXD_STATS_GAUGE_PTR(flow_breed_acceptable_count)},
+ {"Fun", INFLUXD_STATS_GAUGE_PTR(flow_breed_fun_count)},
+ {"Unsafe", INFLUXD_STATS_GAUGE_PTR(flow_breed_unsafe_count)},
{"Potentially Dangerous",
- &influxd_statistics.gauges.flow_breed_potentially_dangerous_count},
- {"Tracker\\/Ads",
- &influxd_statistics.gauges.flow_breed_tracker_ads_count},
- {"Dangerous", &influxd_statistics.gauges.flow_breed_dangerous_count},
- {"Unrated", &influxd_statistics.gauges.flow_breed_unrated_count},
- {NULL, &influxd_statistics.gauges.flow_breed_unknown_count}};
+ INFLUXD_STATS_GAUGE_PTR(flow_breed_potentially_dangerous_count)},
+ {"Tracker\\/Ads", INFLUXD_STATS_GAUGE_PTR(flow_breed_tracker_ads_count)},
+ {"Dangerous", INFLUXD_STATS_GAUGE_PTR(flow_breed_dangerous_count)},
+ {"Unrated", INFLUXD_STATS_GAUGE_PTR(flow_breed_unrated_count)},
+ {NULL, INFLUXD_STATS_GAUGE_PTR(flow_breed_unknown_count)}};
static struct global_map const categories_map[] = {
- {"Unspecified", &influxd_statistics.gauges.flow_category_unspecified_count},
- {"Media", &influxd_statistics.gauges.flow_category_media_count},
- {"VPN", &influxd_statistics.gauges.flow_category_vpn_count},
- {"Email", &influxd_statistics.gauges.flow_category_email_count},
- {"DataTransfer", &influxd_statistics.gauges.flow_category_data_transfer_count},
- {"Web", &influxd_statistics.gauges.flow_category_web_count},
- {"SocialNetwork", &influxd_statistics.gauges.flow_category_social_network_count},
- {"Download", &influxd_statistics.gauges.flow_category_download_count},
- {"Game", &influxd_statistics.gauges.flow_category_game_count},
- {"Chat", &influxd_statistics.gauges.flow_category_chat_count},
- {"VoIP", &influxd_statistics.gauges.flow_category_voip_count},
- {"Database", &influxd_statistics.gauges.flow_category_database_count},
- {"RemoteAccess", &influxd_statistics.gauges.flow_category_remote_access_count},
- {"Cloud", &influxd_statistics.gauges.flow_category_cloud_count},
- {"Network", &influxd_statistics.gauges.flow_category_network_count},
- {"Collaborative", &influxd_statistics.gauges.flow_category_collaborative_count},
- {"RPC", &influxd_statistics.gauges.flow_category_rpc_count},
- {"Streaming", &influxd_statistics.gauges.flow_category_streaming_count},
- {"System", &influxd_statistics.gauges.flow_category_system_count},
- {"SoftwareUpdate", &influxd_statistics.gauges.flow_category_software_update_count},
- {"Music", &influxd_statistics.gauges.flow_category_music_count},
- {"Video", &influxd_statistics.gauges.flow_category_video_count},
- {"Shopping", &influxd_statistics.gauges.flow_category_shopping_count},
- {"Productivity", &influxd_statistics.gauges.flow_category_productivity_count},
- {"FileSharing", &influxd_statistics.gauges.flow_category_file_sharing_count},
- {"ConnCheck", &influxd_statistics.gauges.flow_category_conn_check_count},
- {"IoT-Scada", &influxd_statistics.gauges.flow_category_iot_scada_count},
- {"VirtAssistant", &influxd_statistics.gauges.flow_category_virt_assistant_count},
- {"Cybersecurity", &influxd_statistics.gauges.flow_category_cybersecurity_count},
- {"AdultContent", &influxd_statistics.gauges.flow_category_adult_content_count},
- {"Mining", &influxd_statistics.gauges.flow_category_mining_count},
- {"Malware", &influxd_statistics.gauges.flow_category_malware_count},
- {"Advertisement", &influxd_statistics.gauges.flow_category_advertisment_count},
- {"Banned_Site", &influxd_statistics.gauges.flow_category_banned_site_count},
- {"Site_Unavailable", &influxd_statistics.gauges.flow_category_site_unavail_count},
- {"Allowed_Site", &influxd_statistics.gauges.flow_category_allowed_site_count},
- {"Antimalware", &influxd_statistics.gauges.flow_category_antimalware_count},
- {"Crypto_Currency", &influxd_statistics.gauges.flow_category_crypto_currency_count},
- {"Gambling", &influxd_statistics.gauges.flow_category_gambling_count},
- {NULL, &influxd_statistics.gauges.flow_category_unknown_count}};
+ {"Unspecified", INFLUXD_STATS_GAUGE_PTR(flow_category_unspecified_count)},
+ {"Media", INFLUXD_STATS_GAUGE_PTR(flow_category_media_count)},
+ {"VPN", INFLUXD_STATS_GAUGE_PTR(flow_category_vpn_count)},
+ {"Email", INFLUXD_STATS_GAUGE_PTR(flow_category_email_count)},
+ {"DataTransfer", INFLUXD_STATS_GAUGE_PTR(flow_category_data_transfer_count)},
+ {"Web", INFLUXD_STATS_GAUGE_PTR(flow_category_web_count)},
+ {"SocialNetwork", INFLUXD_STATS_GAUGE_PTR(flow_category_social_network_count)},
+ {"Download", INFLUXD_STATS_GAUGE_PTR(flow_category_download_count)},
+ {"Game", INFLUXD_STATS_GAUGE_PTR(flow_category_game_count)},
+ {"Chat", INFLUXD_STATS_GAUGE_PTR(flow_category_chat_count)},
+ {"VoIP", INFLUXD_STATS_GAUGE_PTR(flow_category_voip_count)},
+ {"Database", INFLUXD_STATS_GAUGE_PTR(flow_category_database_count)},
+ {"RemoteAccess", INFLUXD_STATS_GAUGE_PTR(flow_category_remote_access_count)},
+ {"Cloud", INFLUXD_STATS_GAUGE_PTR(flow_category_cloud_count)},
+ {"Network", INFLUXD_STATS_GAUGE_PTR(flow_category_network_count)},
+ {"Collaborative", INFLUXD_STATS_GAUGE_PTR(flow_category_collaborative_count)},
+ {"RPC", INFLUXD_STATS_GAUGE_PTR(flow_category_rpc_count)},
+ {"Streaming", INFLUXD_STATS_GAUGE_PTR(flow_category_streaming_count)},
+ {"System", INFLUXD_STATS_GAUGE_PTR(flow_category_system_count)},
+ {"SoftwareUpdate", INFLUXD_STATS_GAUGE_PTR(flow_category_software_update_count)},
+ {"Music", INFLUXD_STATS_GAUGE_PTR(flow_category_music_count)},
+ {"Video", INFLUXD_STATS_GAUGE_PTR(flow_category_video_count)},
+ {"Shopping", INFLUXD_STATS_GAUGE_PTR(flow_category_shopping_count)},
+ {"Productivity", INFLUXD_STATS_GAUGE_PTR(flow_category_productivity_count)},
+ {"FileSharing", INFLUXD_STATS_GAUGE_PTR(flow_category_file_sharing_count)},
+ {"ConnCheck", INFLUXD_STATS_GAUGE_PTR(flow_category_conn_check_count)},
+ {"IoT-Scada", INFLUXD_STATS_GAUGE_PTR(flow_category_iot_scada_count)},
+ {"VirtAssistant", INFLUXD_STATS_GAUGE_PTR(flow_category_virt_assistant_count)},
+ {"Cybersecurity", INFLUXD_STATS_GAUGE_PTR(flow_category_cybersecurity_count)},
+ {"AdultContent", INFLUXD_STATS_GAUGE_PTR(flow_category_adult_content_count)},
+ {"Mining", INFLUXD_STATS_GAUGE_PTR(flow_category_mining_count)},
+ {"Malware", INFLUXD_STATS_GAUGE_PTR(flow_category_malware_count)},
+ {"Advertisement", INFLUXD_STATS_GAUGE_PTR(flow_category_advertisment_count)},
+ {"Banned_Site", INFLUXD_STATS_GAUGE_PTR(flow_category_banned_site_count)},
+ {"Site_Unavailable", INFLUXD_STATS_GAUGE_PTR(flow_category_site_unavail_count)},
+ {"Allowed_Site", INFLUXD_STATS_GAUGE_PTR(flow_category_allowed_site_count)},
+ {"Antimalware", INFLUXD_STATS_GAUGE_PTR(flow_category_antimalware_count)},
+ {"Crypto_Currency", INFLUXD_STATS_GAUGE_PTR(flow_category_crypto_currency_count)},
+ {"Gambling", INFLUXD_STATS_GAUGE_PTR(flow_category_gambling_count)},
+ {NULL, INFLUXD_STATS_GAUGE_PTR(flow_category_unknown_count)}};
static struct global_map const confidence_map[] = {
- {"Match by port", &influxd_statistics.gauges.flow_confidence_by_port},
- {"DPI (partial)", &influxd_statistics.gauges.flow_confidence_dpi_partial},
- {"DPI (partial cache)", &influxd_statistics.gauges.flow_confidence_dpi_partial_cache},
- {"DPI (cache)", &influxd_statistics.gauges.flow_confidence_dpi_cache},
- {"DPI", &influxd_statistics.gauges.flow_confidence_dpi},
- {"nBPF", &influxd_statistics.gauges.flow_confidence_nbpf},
- {"Match by IP", &influxd_statistics.gauges.flow_confidence_by_ip},
- {"DPI (aggressive)", &influxd_statistics.gauges.flow_confidence_dpi_aggressive},
- {NULL, &influxd_statistics.gauges.flow_confidence_unknown}};
-
-static struct global_map const severity_map[] = {{"Low", &influxd_statistics.gauges.flow_severity_low},
- {"Medium", &influxd_statistics.gauges.flow_severity_medium},
- {"High", &influxd_statistics.gauges.flow_severity_high},
- {"Severe", &influxd_statistics.gauges.flow_severity_severe},
- {"Critical", &influxd_statistics.gauges.flow_severity_critical},
- {"Emergency", &influxd_statistics.gauges.flow_severity_emergency},
- {NULL, &influxd_statistics.gauges.flow_severity_unknown}};
+ {"Match by port", INFLUXD_STATS_GAUGE_PTR(flow_confidence_by_port)},
+ {"DPI (partial)", INFLUXD_STATS_GAUGE_PTR(flow_confidence_dpi_partial)},
+ {"DPI (partial cache)", INFLUXD_STATS_GAUGE_PTR(flow_confidence_dpi_partial_cache)},
+ {"DPI (cache)", INFLUXD_STATS_GAUGE_PTR(flow_confidence_dpi_cache)},
+ {"DPI", INFLUXD_STATS_GAUGE_PTR(flow_confidence_dpi)},
+ {"nBPF", INFLUXD_STATS_GAUGE_PTR(flow_confidence_nbpf)},
+ {"Match by IP", INFLUXD_STATS_GAUGE_PTR(flow_confidence_by_ip)},
+ {"DPI (aggressive)", INFLUXD_STATS_GAUGE_PTR(flow_confidence_dpi_aggressive)},
+ {NULL, INFLUXD_STATS_GAUGE_PTR(flow_confidence_unknown)}};
+
+static struct global_map const severity_map[] = {{"Low", INFLUXD_STATS_GAUGE_PTR(flow_severity_low)},
+ {"Medium", INFLUXD_STATS_GAUGE_PTR(flow_severity_medium)},
+ {"High", INFLUXD_STATS_GAUGE_PTR(flow_severity_high)},
+ {"Severe", INFLUXD_STATS_GAUGE_PTR(flow_severity_severe)},
+ {"Critical", INFLUXD_STATS_GAUGE_PTR(flow_severity_critical)},
+ {"Emergency", INFLUXD_STATS_GAUGE_PTR(flow_severity_emergency)},
+ {NULL, INFLUXD_STATS_GAUGE_PTR(flow_severity_unknown)}};
#define INFLUXDB_FORMAT() "%s=%llu,"
#define INFLUXDB_FORMAT_END() "%s=%llu\n"
#define INFLUXDB_VALUE_COUNTER(value) #value, (unsigned long long int)influxd_statistics.counters.value
-#define INFLUXDB_VALUE_GAUGE(value) #value, (unsigned long long int)influxd_statistics.gauges.value
+#define INFLUXDB_VALUE_GAUGE(value) #value, (unsigned long long int)influxd_statistics.gauges[0].value
#define CHECK_SNPRINTF_RET(bytes) \
do \
{ \
@@ -550,13 +570,107 @@ static int serialize_influx_line(char * buf, size_t siz)
siz,
"flow_risk_%zu_count=%llu,",
i + 1,
- (unsigned long long int)influxd_statistics.gauges.flow_risk_count[i]);
+ (unsigned long long int)influxd_statistics.gauges[0].flow_risk_count[i]);
CHECK_SNPRINTF_RET(bytes);
}
buf[-1] = '\n';
failure:
memset(&influxd_statistics.counters, 0, sizeof(influxd_statistics.counters));
+
+ INFLUXD_STATS_GAUGE_SUB(flow_state_info);
+ INFLUXD_STATS_GAUGE_SUB(flow_state_finished);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_safe_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_acceptable_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_fun_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_unsafe_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_potentially_dangerous_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_tracker_ads_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_dangerous_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_unrated_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_breed_unknown_count);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_category_unspecified_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_media_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_vpn_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_email_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_data_transfer_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_web_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_social_network_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_download_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_game_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_chat_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_voip_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_database_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_remote_access_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_cloud_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_network_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_collaborative_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_rpc_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_streaming_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_system_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_software_update_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_music_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_video_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_shopping_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_productivity_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_file_sharing_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_conn_check_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_iot_scada_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_virt_assistant_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_cybersecurity_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_adult_content_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_mining_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_malware_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_advertisment_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_banned_site_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_site_unavail_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_allowed_site_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_antimalware_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_crypto_currency_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_gambling_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_category_unknown_count);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_by_port);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_dpi_partial);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_dpi_partial_cache);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_dpi_cache);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_dpi);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_nbpf);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_by_ip);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_dpi_aggressive);
+ INFLUXD_STATS_GAUGE_SUB(flow_confidence_unknown);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_low);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_medium);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_high);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_severe);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_critical);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_emergency);
+ INFLUXD_STATS_GAUGE_SUB(flow_severity_unknown);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_l3_ip4_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_l3_ip6_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_l3_other_count);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_l4_tcp_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_l4_udp_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_l4_icmp_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_l4_other_count);
+
+ INFLUXD_STATS_GAUGE_SUB(flow_active_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_detected_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_guessed_count);
+ INFLUXD_STATS_GAUGE_SUB(flow_not_detected_count);
+
+ for (size_t i = 0; i < NDPI_MAX_RISK - 1; ++i)
+ {
+ INFLUXD_STATS_GAUGE_SUB(flow_risk_count[i]);
+ }
+ INFLUXD_STATS_GAUGE_SUB(flow_risk_unknown_count);
+
+ memset(&influxd_statistics.gauges[1], 0, sizeof(influxd_statistics.gauges[1]));
pthread_mutex_unlock(&influxd_statistics.rw_lock);
return 0;
@@ -680,14 +794,14 @@ static int influxd_map_to_stat(char const * const token_str,
size_t key_length = strlen(map[i].json_key);
if (key_length == token_length && strncmp(map[i].json_key, token_str, token_length) == 0)
{
- (*map[i].global_stat)++;
+ (*map[i].global_stat_inc)++;
return 0;
}
}
- if (null_i < map_length && map[null_i].global_stat != NULL)
+ if (null_i < map_length && map[null_i].global_stat_inc != NULL)
{
- (*map[null_i].global_stat)++;
+ (*map[null_i].global_stat_inc)++;
return 0;
}
@@ -715,92 +829,92 @@ static void influxd_unmap_flow_from_stat(struct flow_user_data * const flow_user
{
if (flow_user_data->is_ip4 != 0)
{
- influxd_statistics.gauges.flow_l3_ip4_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l3_ip4_count);
}
if (flow_user_data->is_ip6 != 0)
{
- influxd_statistics.gauges.flow_l3_ip6_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l3_ip6_count);
}
if (flow_user_data->is_other_l3 != 0)
{
- influxd_statistics.gauges.flow_l3_other_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l3_other_count);
}
if (flow_user_data->is_tcp != 0)
{
- influxd_statistics.gauges.flow_l4_tcp_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l4_tcp_count);
}
if (flow_user_data->is_udp != 0)
{
- influxd_statistics.gauges.flow_l4_udp_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l4_udp_count);
}
if (flow_user_data->is_icmp != 0)
{
- influxd_statistics.gauges.flow_l4_icmp_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l4_icmp_count);
}
if (flow_user_data->is_other_l4 != 0)
{
- influxd_statistics.gauges.flow_l4_other_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_l4_other_count);
}
if (flow_user_data->new_seen != 0)
{
- influxd_statistics.gauges.flow_active_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_active_count);
}
if (flow_user_data->is_detected != 0)
{
- influxd_statistics.gauges.flow_detected_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_detected_count);
}
if (flow_user_data->is_guessed != 0)
{
- influxd_statistics.gauges.flow_guessed_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_guessed_count);
}
if (flow_user_data->is_not_detected != 0)
{
- influxd_statistics.gauges.flow_not_detected_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_not_detected_count);
}
if (flow_user_data->is_info != 0)
{
- influxd_statistics.gauges.flow_state_info--;
+ INFLUXD_STATS_GAUGE_DEC(flow_state_info);
}
if (flow_user_data->is_finished != 0)
{
- influxd_statistics.gauges.flow_state_finished--;
+ INFLUXD_STATS_GAUGE_DEC(flow_state_finished);
}
if (flow_user_data->breed > 0 && flow_user_data->breed_ndpid_invalid == 0 &&
- breeds_map[flow_user_data->breed - 1].global_stat != NULL)
+ INFLUXD_STATS_MAP_NOTNULL(breeds_map, flow_user_data->breed) != 0)
{
- (*breeds_map[flow_user_data->breed - 1].global_stat)--;
+ INFLUXD_STATS_MAP_DEC(breeds_map, flow_user_data->breed);
}
if (flow_user_data->category > 0 && flow_user_data->category_ndpid_invalid == 0 &&
- categories_map[flow_user_data->category - 1].global_stat != NULL)
+ INFLUXD_STATS_MAP_NOTNULL(categories_map, flow_user_data->category) != 0)
{
- (*categories_map[flow_user_data->category - 1].global_stat)--;
+ INFLUXD_STATS_MAP_DEC(categories_map, flow_user_data->category);
}
if (flow_user_data->confidence > 0 && flow_user_data->confidence_ndpid_invalid == 0 &&
- confidence_map[flow_user_data->confidence - 1].global_stat != NULL)
+ INFLUXD_STATS_MAP_NOTNULL(confidence_map, flow_user_data->confidence) != 0)
{
- (*confidence_map[flow_user_data->confidence - 1].global_stat)--;
+ INFLUXD_STATS_MAP_DEC(confidence_map, flow_user_data->confidence);
}
for (uint8_t i = 0; i < MAX_SEVERITIES_PER_FLOW; ++i)
{
if (flow_user_data->severities[i] > 0)
{
- (*severity_map[flow_user_data->severities[i] - 1].global_stat)--;
+ INFLUXD_STATS_MAP_DEC(severity_map, flow_user_data->severities[i]);
}
}
@@ -808,13 +922,13 @@ static void influxd_unmap_flow_from_stat(struct flow_user_data * const flow_user
{
if (flow_user_data->risks[i] > 0)
{
- influxd_statistics.gauges.flow_risk_count[flow_user_data->risks[i]]--;
+ INFLUXD_STATS_GAUGE_DEC(flow_risk_count[flow_user_data->risks[i]]);
}
}
if (flow_user_data->risk_ndpid_invalid != 0)
{
- influxd_statistics.gauges.flow_risk_unknown_count--;
+ INFLUXD_STATS_GAUGE_DEC(flow_risk_unknown_count);
}
}
@@ -892,45 +1006,45 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
if (TOKEN_VALUE_EQUALS_SZ(sock, flow_event_name, "new") != 0)
{
flow_user_data->new_seen = 1;
- influxd_statistics.gauges.flow_active_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_active_count);
struct nDPIsrvd_json_token const * const l3_proto = TOKEN_GET_SZ(sock, "l3_proto");
if (TOKEN_VALUE_EQUALS_SZ(sock, l3_proto, "ip4") != 0)
{
flow_user_data->is_ip4 = 1;
- influxd_statistics.gauges.flow_l3_ip4_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l3_ip4_count);
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, l3_proto, "ip6") != 0)
{
flow_user_data->is_ip6 = 1;
- influxd_statistics.gauges.flow_l3_ip6_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l3_ip6_count);
}
else if (l3_proto != NULL)
{
flow_user_data->is_other_l3 = 1;
- influxd_statistics.gauges.flow_l3_other_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l3_other_count);
}
struct nDPIsrvd_json_token const * const l4_proto = TOKEN_GET_SZ(sock, "l4_proto");
if (TOKEN_VALUE_EQUALS_SZ(sock, l4_proto, "tcp") != 0)
{
flow_user_data->is_tcp = 1;
- influxd_statistics.gauges.flow_l4_tcp_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l4_tcp_count);
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, l4_proto, "udp") != 0)
{
flow_user_data->is_udp = 1;
- influxd_statistics.gauges.flow_l4_udp_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l4_udp_count);
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, l4_proto, "icmp") != 0)
{
flow_user_data->is_icmp = 1;
- influxd_statistics.gauges.flow_l4_icmp_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l4_icmp_count);
}
else if (l4_proto != NULL)
{
flow_user_data->is_other_l4 = 1;
- influxd_statistics.gauges.flow_l4_other_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_l4_other_count);
}
}
else if (flow_user_data->new_seen == 0)
@@ -941,12 +1055,12 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
if (TOKEN_VALUE_EQUALS_SZ(sock, flow_event_name, "not-detected") != 0)
{
flow_user_data->is_not_detected = 1;
- influxd_statistics.gauges.flow_not_detected_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_not_detected_count);
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, flow_event_name, "guessed") != 0)
{
flow_user_data->is_guessed = 1;
- influxd_statistics.gauges.flow_guessed_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_guessed_count);
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, flow_event_name, "detected") != 0 ||
TOKEN_VALUE_EQUALS_SZ(sock, flow_event_name, "detection-update") != 0)
@@ -958,14 +1072,14 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
if (flow_user_data->is_detected == 0)
{
flow_user_data->is_detected = 1;
- influxd_statistics.gauges.flow_detected_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_detected_count);
}
if (flow_risk != NULL)
{
if (flow_user_data->risks[0] == 0)
{
- influxd_statistics.counters.flow_risky_count++;
+ INFLUXD_STATS_COUNTER_INC(flow_risky_count);
}
while ((current = nDPIsrvd_get_next_token(sock, flow_risk, &next_child_index)) != NULL)
@@ -1042,7 +1156,7 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
break;
}
- influxd_statistics.gauges.flow_risk_count[numeric_risk_value]++;
+ INFLUXD_STATS_GAUGE_INC(flow_risk_count[numeric_risk_value]);
flow_user_data->risks[i] = numeric_risk_value;
break;
}
@@ -1050,7 +1164,7 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
else if (flow_user_data->risk_ndpid_invalid == 0)
{
flow_user_data->risk_ndpid_invalid = 1;
- influxd_statistics.gauges.flow_risk_unknown_count++;
+ INFLUXD_STATS_GAUGE_INC(flow_risk_unknown_count);
}
}
else
@@ -1148,7 +1262,7 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
if (flow_user_data->is_info == 0)
{
flow_user_data->is_info = 1;
- influxd_statistics.gauges.flow_state_info++;
+ INFLUXD_STATS_GAUGE_INC(flow_state_info);
}
}
else if (TOKEN_VALUE_EQUALS_SZ(sock, flow_state, "finished") != 0)
@@ -1158,10 +1272,10 @@ static void process_flow_stats(struct nDPIsrvd_socket * const sock, struct nDPIs
if (flow_user_data->is_info != 0)
{
flow_user_data->is_info = 0;
- influxd_statistics.gauges.flow_state_info--;
+ INFLUXD_STATS_GAUGE_RES(flow_state_info);
}
flow_user_data->is_finished = 1;
- influxd_statistics.gauges.flow_state_finished++;
+ INFLUXD_STATS_GAUGE_INC(flow_state_finished);
}
}
@@ -1201,7 +1315,7 @@ static enum nDPIsrvd_callback_return influxd_json_callback(struct nDPIsrvd_socke
pthread_mutex_lock(&influxd_statistics.rw_lock);
- influxd_statistics.counters.json_lines++;
+ INFLUXD_STATS_COUNTER_INC(json_lines);
influxd_statistics.counters.json_bytes += sock->buffer.json_message_length + NETWORK_BUFFER_LENGTH_DIGITS;
process_flow_stats(sock, flow);