|
45 | 45 | #include "we_wmi_memory.h"
|
46 | 46 | #include "we_wmi_paging_file.h"
|
47 | 47 | #include "we_wmi_process.h"
|
| 48 | +#include "we_wmi_tcp.h" |
48 | 49 |
|
49 | 50 | static int we_timer_cpu_metrics_cb(struct flb_input_instance *ins,
|
50 | 51 | struct flb_config *config, void *in_context)
|
@@ -186,6 +187,16 @@ static int we_timer_wmi_process_metrics_cb(struct flb_input_instance *ins,
|
186 | 187 | return 0;
|
187 | 188 | }
|
188 | 189 |
|
| 190 | +static int we_timer_wmi_tcp_metrics_cb(struct flb_input_instance *ins, |
| 191 | + struct flb_config *config, void *in_context) |
| 192 | +{ |
| 193 | + struct flb_ne *ctx = in_context; |
| 194 | + |
| 195 | + we_wmi_tcp_update(ctx); |
| 196 | + |
| 197 | + return 0; |
| 198 | +} |
| 199 | + |
189 | 200 | struct flb_we_callback {
|
190 | 201 | char *name;
|
191 | 202 | void (*func)(char *, void *, void *);
|
@@ -336,6 +347,13 @@ static void we_wmi_process_update_cb(char *name, void *p1, void *p2)
|
336 | 347 | we_wmi_process_update(ctx);
|
337 | 348 | }
|
338 | 349 |
|
| 350 | +static void we_wmi_tcp_update_cb(char *name, void *p1, void *p2) |
| 351 | +{ |
| 352 | + struct flb_we *ctx = p1; |
| 353 | + |
| 354 | + we_wmi_tcp_update(ctx); |
| 355 | +} |
| 356 | + |
339 | 357 | static int we_update_cb(struct flb_we *ctx, char *name)
|
340 | 358 | {
|
341 | 359 | int ret;
|
@@ -363,6 +381,7 @@ struct flb_we_callback ne_callbacks[] = {
|
363 | 381 | { "memory", we_wmi_memory_update_cb },
|
364 | 382 | { "paging_file", we_wmi_paging_file_update_cb },
|
365 | 383 | { "process", we_wmi_process_update_cb },
|
| 384 | + { "tcp", we_wmi_tcp_update_cb }, |
366 | 385 | { 0 }
|
367 | 386 | };
|
368 | 387 |
|
@@ -401,6 +420,7 @@ static int in_we_init(struct flb_input_instance *in,
|
401 | 420 | ctx->coll_wmi_memory_fd = -1;
|
402 | 421 | ctx->coll_wmi_paging_file_fd = -1;
|
403 | 422 | ctx->coll_wmi_process_fd = -1;
|
| 423 | + ctx->coll_wmi_tcp_fd = -1; |
404 | 424 |
|
405 | 425 | ctx->callback = flb_callback_create(in->name);
|
406 | 426 | if (!ctx->callback) {
|
@@ -806,6 +826,31 @@ static int in_we_init(struct flb_input_instance *in,
|
806 | 826 | return -1;
|
807 | 827 | }
|
808 | 828 | }
|
| 829 | + else if (strncmp(entry->str, "tcp", 3) == 0) { |
| 830 | + if (ctx->wmi_tcp_scrape_interval == 0) { |
| 831 | + flb_plg_debug(ctx->ins, "enabled metrics %s", entry->str); |
| 832 | + metric_idx = 14; |
| 833 | + } |
| 834 | + else { |
| 835 | + /* Create the process collector */ |
| 836 | + ret = flb_input_set_collector_time(in, |
| 837 | + we_timer_wmi_tcp_metrics_cb, |
| 838 | + ctx->wmi_tcp_scrape_interval, 0, |
| 839 | + config); |
| 840 | + if (ret == -1) { |
| 841 | + flb_plg_error(ctx->ins, |
| 842 | + "could not set tcp collector for Windows Exporter Metrics plugin"); |
| 843 | + return -1; |
| 844 | + } |
| 845 | + ctx->coll_wmi_tcp_fd = ret; |
| 846 | + } |
| 847 | + |
| 848 | + /* Initialize tcp metric collectors */ |
| 849 | + ret = we_wmi_tcp_init(ctx); |
| 850 | + if (ret) { |
| 851 | + return -1; |
| 852 | + } |
| 853 | + } |
809 | 854 | else {
|
810 | 855 | flb_plg_warn(ctx->ins, "Unknown metrics: %s", entry->str);
|
811 | 856 | metric_idx = -1;
|
@@ -891,6 +936,9 @@ static int in_we_exit(void *data, struct flb_config *config)
|
891 | 936 | else if (strncmp(entry->str, "process", 7) == 0) {
|
892 | 937 | we_wmi_process_exit(ctx);
|
893 | 938 | }
|
| 939 | + else if (strncmp(entry->str, "tcp", 3) == 0) { |
| 940 | + we_wmi_tcp_exit(ctx); |
| 941 | + } |
894 | 942 | else {
|
895 | 943 | flb_plg_warn(ctx->ins, "Unknown metrics: %s", entry->str);
|
896 | 944 | }
|
@@ -943,6 +991,9 @@ static int in_we_exit(void *data, struct flb_config *config)
|
943 | 991 | if (ctx->coll_wmi_process_fd != -1) {
|
944 | 992 | we_wmi_process_exit(ctx);
|
945 | 993 | }
|
| 994 | + if (ctx->coll_wmi_tcp_fd != -1) { |
| 995 | + we_wmi_tcp_exit(ctx); |
| 996 | + } |
946 | 997 |
|
947 | 998 | flb_we_config_destroy(ctx);
|
948 | 999 |
|
@@ -998,6 +1049,9 @@ static void in_we_pause(void *data, struct flb_config *config)
|
998 | 1049 | if (ctx->coll_wmi_process_fd != -1) {
|
999 | 1050 | flb_input_collector_pause(ctx->coll_wmi_process_fd, ctx->ins);
|
1000 | 1051 | }
|
| 1052 | + if (ctx->coll_wmi_tcp_fd != -1) { |
| 1053 | + flb_input_collector_pause(ctx->coll_wmi_tcp_fd, ctx->ins); |
| 1054 | + } |
1001 | 1055 | }
|
1002 | 1056 |
|
1003 | 1057 | static void in_we_resume(void *data, struct flb_config *config)
|
@@ -1049,6 +1103,12 @@ static void in_we_resume(void *data, struct flb_config *config)
|
1049 | 1103 | if (ctx->coll_wmi_paging_file_fd != -1) {
|
1050 | 1104 | flb_input_collector_resume(ctx->coll_wmi_paging_file_fd, ctx->ins);
|
1051 | 1105 | }
|
| 1106 | + if (ctx->coll_wmi_process_fd != -1) { |
| 1107 | + flb_input_collector_resume(ctx->coll_wmi_process_fd, ctx->ins); |
| 1108 | + } |
| 1109 | + if (ctx->coll_wmi_tcp_fd != -1) { |
| 1110 | + flb_input_collector_resume(ctx->coll_wmi_tcp_fd, ctx->ins); |
| 1111 | + } |
1052 | 1112 | }
|
1053 | 1113 |
|
1054 | 1114 | /* Configuration properties map */
|
@@ -1143,9 +1203,15 @@ static struct flb_config_map config_map[] = {
|
1143 | 1203 | "scrape interval to collect process metrics from the node."
|
1144 | 1204 | },
|
1145 | 1205 |
|
| 1206 | + { |
| 1207 | + FLB_CONFIG_MAP_TIME, "collector.tcp.scrape_interval", "0", |
| 1208 | + 0, FLB_TRUE, offsetof(struct flb_we, wmi_tcp_scrape_interval), |
| 1209 | + "scrape interval to collect tcp metrics from the node." |
| 1210 | + }, |
| 1211 | + |
1146 | 1212 | {
|
1147 | 1213 | FLB_CONFIG_MAP_CLIST, "metrics",
|
1148 |
| - "cpu,cpu_info,os,net,logical_disk,cs,cache,thermalzone,logon,system,service", |
| 1214 | + "cpu,cpu_info,os,net,logical_disk,cs,cache,thermalzone,logon,system,service,tcp", |
1149 | 1215 | 0, FLB_TRUE, offsetof(struct flb_we, metrics),
|
1150 | 1216 | "Comma separated list of keys to enable metrics."
|
1151 | 1217 | },
|
|
0 commit comments