31
31
#include "stats/stats-counter.h"
32
32
#include "stats/stats-query.h"
33
33
#include "stats/stats-registry.h"
34
+ #include "stats/stats-prometheus.h"
35
+ #include "stats/stats-csv.h"
36
+ #include "scratch-buffers.h"
37
+
34
38
#include <string.h>
35
39
36
40
guint SCS_FILE ;
@@ -132,12 +136,11 @@ static gboolean
132
136
_test_format_log_msg_get (gpointer user_data )
133
137
{
134
138
gpointer * args = (gpointer * ) user_data ;
135
- StatsCounterItem * ctr = (StatsCounterItem * ) args [0 ];
136
- LogMessage * msg = (LogMessage * ) args [1 ];
137
- gchar * name , * value ;
139
+ StatsCounterItem * ctr = (StatsCounterItem * ) args [2 ];
140
+ LogMessage * msg = (LogMessage * ) args [4 ];
138
141
139
- name = g_strdup_printf ("%s" , stats_counter_get_name (ctr ));
140
- value = g_strdup_printf ("%" G_GSIZE_FORMAT , stats_counter_get (ctr ));
142
+ gchar * name = g_strdup_printf ("%s" , stats_counter_get_name (ctr ));
143
+ gchar * value = g_strdup_printf ("%" G_GSIZE_FORMAT , stats_counter_get (ctr ));
141
144
142
145
log_msg_set_value_by_name (msg , name , value , -1 );
143
146
@@ -147,55 +150,88 @@ _test_format_log_msg_get(gpointer user_data)
147
150
return TRUE;
148
151
}
149
152
153
+ // FIXME: this must be mocked to _ctl_format_get of stats-query-commands.c instead of duplicating the code
150
154
static gboolean
151
155
_test_format_str_get (gpointer user_data )
152
156
{
153
157
gpointer * args = (gpointer * ) user_data ;
154
- StatsCounterItem * ctr = (StatsCounterItem * ) args [0 ];
155
- GString * str = (GString * ) args [1 ];
156
- g_string_append_printf (str , "%s: %" G_GSIZE_FORMAT "\n" , stats_counter_get_name (ctr ), stats_counter_get (ctr ));
158
+ StatsCluster * sc = (StatsCluster * ) args [0 ];
159
+ gint type = GPOINTER_TO_INT (args [1 ]);
160
+ StatsCounterItem * ctr = (StatsCounterItem * ) args [2 ];
161
+ const gchar * fmt = (const gchar * ) args [3 ];
162
+ GString * str = (GString * )args [4 ];
163
+
164
+ if (g_str_equal (fmt , "kv" ))
165
+ g_string_append_printf (str , "%s=%" G_GSIZE_FORMAT "\n" , stats_counter_get_name (ctr ), stats_counter_get (ctr ));
166
+ else if (g_str_equal (fmt , "prometheus" ))
167
+ {
168
+ ScratchBuffersMarker marker ;
169
+ scratch_buffers_mark (& marker );
170
+
171
+ GString * record = stats_prometheus_format_counter (sc , type , ctr );
172
+ if (record == NULL )
173
+ return FALSE;
174
+
175
+ g_string_append (str , record -> str );
176
+ scratch_buffers_reclaim_marked (marker );
177
+ }
178
+ else if (g_str_equal (fmt , "csv" ))
179
+ {
180
+ ScratchBuffersMarker marker ;
181
+ scratch_buffers_mark (& marker );
182
+
183
+ GString * record = stats_csv_format_counter (sc , type , ctr );
184
+ if (record == NULL )
185
+ return FALSE;
186
+
187
+ g_string_append (str , record -> str );
188
+ scratch_buffers_reclaim_marked (marker );
189
+ }
157
190
158
191
return TRUE;
159
192
}
160
193
194
+ // FIXME: this must be mocked to _ctl_format_name_without_value of stats-query-commands.c instead of duplicating the code
161
195
static gboolean
162
- _test_format_log_msg_get_sum (gpointer user_data )
196
+ _test_format_list (gpointer user_data )
163
197
{
164
- gchar * name , * value ;
165
- gpointer * args = (gpointer * ) user_data ;
166
- LogMessage * msg = (LogMessage * ) args [0 ];
167
- gint * sum = (gint * ) args [1 ];
168
-
169
- name = "sum" ;
170
- value = g_strdup_printf ("%d" , * sum );
171
-
172
- log_msg_set_value_by_name (msg , name , value , -1 );
173
-
174
- g_free (value );
198
+ // Other user_data elements are
199
+ // - StatsCluster * = args[0]
200
+ // - gint type = args[1];
201
+ // - const gchar * fmt = args[3]; gpointer *args = (gpointer *) user_data;
202
+ StatsCounterItem * ctr = (StatsCounterItem * ) args [2 ];
203
+ GString * str = (GString * )args [4 ];
175
204
205
+ g_string_append_printf (str , "%s\n" , stats_counter_get_name (ctr ));
176
206
return TRUE;
177
207
}
178
208
209
+ // FIXME: this must be mocked to _ctl_format_get_sum of stats-query-commands.c instead of duplicating the code
179
210
static gboolean
180
211
_test_format_str_get_sum (gpointer user_data )
181
212
{
182
213
gpointer * args = (gpointer * ) user_data ;
183
214
GString * result = (GString * ) args [0 ];
184
- gint * sum = (gint * ) args [1 ];
185
-
186
- g_string_printf (result , "%d" , * sum );
215
+ gint64 * sum = (gint64 * ) args [1 ];
187
216
217
+ g_string_printf (result , "%" G_GINT64_FORMAT "\n" , * sum );
188
218
return TRUE;
189
219
}
190
220
191
221
static gboolean
192
- _test_format_list (gpointer user_data )
222
+ _test_format_log_msg_get_sum (gpointer user_data )
193
223
{
224
+ gchar * name , * value ;
194
225
gpointer * args = (gpointer * ) user_data ;
195
- StatsCounterItem * ctr = (StatsCounterItem * ) args [0 ];
196
- GString * str = (GString * ) args [1 ];
197
- g_string_append_printf (str , "%s\n" , stats_counter_get_name (ctr ));
226
+ LogMessage * msg = (LogMessage * ) args [0 ];
227
+ gint * sum = (gint * ) args [1 ];
228
+
229
+ name = "sum" ;
230
+ value = g_strdup_printf ("%d" , * sum );
231
+
232
+ log_msg_set_value_by_name (msg , name , value , -1 );
198
233
234
+ g_free (value );
199
235
return TRUE;
200
236
}
201
237
@@ -231,7 +267,7 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
231
267
const gchar * actual ;
232
268
LogMessage * msg = log_msg_new_empty ();
233
269
234
- stats_query_get (test_cases -> pattern , _test_format_log_msg_get , (gpointer )msg );
270
+ stats_query_get (test_cases -> pattern , _test_format_log_msg_get , "kv" , (gpointer )msg );
235
271
actual = log_msg_get_value_by_name (msg , test_cases -> pattern , NULL );
236
272
cr_assert_str_eq (actual , test_cases -> expected ,
237
273
"Counter: '%s'; expected number: '%s';, got: '%s';" , test_cases -> pattern , test_cases -> expected , actual );
@@ -240,38 +276,96 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
240
276
}
241
277
242
278
243
- ParameterizedTestParameters (stats_query , test_stats_query_get_str_out )
279
+ ParameterizedTestParameters (stats_query , test_stats_query_get_kv_str_out )
280
+ {
281
+ static QueryTestCase test_cases [] =
282
+ {
283
+ {"center.*.*" , "center.guba.polo.frozen.suppressed=12\n" },
284
+ {"cent*" , "center.guba.polo.frozen.suppressed=12\n" },
285
+ {"src.pipe.guba.gumi.disz.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed=0\n" },
286
+ {"src.pipe.guba.gumi.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed=0\n" },
287
+ {"src.pipe.guba.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed=0\n" },
288
+ {"src.pipe.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed=0\n" },
289
+ {"dst.*.*" , "dst.tcp.guba.labda.received.dropped=0\n" },
290
+ {"dst.*.*.*" , "dst.tcp.guba.labda.received.dropped=0\n" },
291
+ {"dst.*.*.*.*" , "dst.tcp.guba.labda.received.dropped=0\n" },
292
+ {"src.java.*.*" , "" },
293
+ {"src.ja*.*.*" , "" },
294
+ {"global.id.instance.name" , "global.id.instance.name=0\n" },
295
+ };
296
+
297
+ return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
298
+ }
299
+
300
+ ParameterizedTestParameters (stats_query , test_stats_query_get_prometheus_str_out )
301
+ {
302
+ static QueryTestCase test_cases [] =
303
+ {
304
+ {"center.*.*" , "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n" },
305
+ {"cent*" , "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n" },
306
+ {"src.pipe.guba.gumi.disz.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
307
+ {"src.pipe.guba.gumi.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
308
+ {"src.pipe.guba.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
309
+ {"src.pipe.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
310
+ {"dst.*.*" , "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n" },
311
+ {"dst.*.*.*" , "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n" },
312
+ {"dst.*.*.*.*" , "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n" },
313
+ {"src.java.*.*" , "" },
314
+ {"src.ja*.*.*" , "" },
315
+ {"global.id.instance.name" , "syslogng_global_id_name 0\n" },
316
+ };
317
+
318
+ return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
319
+ }
320
+
321
+ ParameterizedTestParameters (stats_query , test_stats_query_get_csv_str_out )
244
322
{
245
323
static QueryTestCase test_cases [] =
246
324
{
247
- {"center.*.*" , "center. guba.polo. frozen. suppressed: 12\n" },
248
- {"cent*" , "center. guba.polo. frozen. suppressed: 12\n" },
249
- {"src.pipe.guba.gumi.disz.*.*" , "src.pipe. guba.gumi.disz. frozen. suppressed: 0\n" },
250
- {"src.pipe.guba.gumi.*.*" , "src.pipe. guba.gumi.disz. frozen. suppressed: 0\n" },
251
- {"src.pipe.guba.*.*" , "src.pipe. guba.gumi.disz. frozen. suppressed: 0\n" },
252
- {"src.pipe.*.*" , "src.pipe. guba.gumi.disz. frozen. suppressed: 0\n" },
253
- {"dst.*.*" , "dst.tcp. guba.labda. received. dropped: 0\n" },
254
- {"dst.*.*.*" , "dst.tcp. guba.labda. received. dropped: 0\n" },
255
- {"dst.*.*.*.*" , "dst.tcp. guba.labda. received. dropped: 0\n" },
325
+ {"center.*.*" , "center; guba.polo; frozen;a; suppressed; 12\n" },
326
+ {"cent*" , "center; guba.polo; frozen;a; suppressed; 12\n" },
327
+ {"src.pipe.guba.gumi.disz.*.*" , "src.pipe; guba.gumi.disz; frozen;a; suppressed; 0\n" },
328
+ {"src.pipe.guba.gumi.*.*" , "src.pipe; guba.gumi.disz; frozen;a; suppressed; 0\n" },
329
+ {"src.pipe.guba.*.*" , "src.pipe; guba.gumi.disz; frozen;a; suppressed; 0\n" },
330
+ {"src.pipe.*.*" , "src.pipe; guba.gumi.disz; frozen;a; suppressed; 0\n" },
331
+ {"dst.*.*" , "dst.tcp; guba.labda; received;a; dropped; 0\n" },
332
+ {"dst.*.*.*" , "dst.tcp; guba.labda; received;a; dropped; 0\n" },
333
+ {"dst.*.*.*.*" , "dst.tcp; guba.labda; received;a; dropped; 0\n" },
256
334
{"src.java.*.*" , "" },
257
335
{"src.ja*.*.*" , "" },
258
- {"global.id.instance.name" , "global.id. instance. name: 0\n" },
336
+ {"global.id.instance.name" , "global;id; instance;a; name; 0\n" },
259
337
};
260
338
261
339
return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
262
340
}
263
341
264
- ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_str_out )
342
+ void run_test_case (QueryTestCase * test_cases , const char * format )
265
343
{
266
344
GString * result = g_string_new ("" );
267
345
268
- stats_query_get (test_cases -> pattern , _test_format_str_get , (gpointer )result );
346
+ stats_query_get (test_cases -> pattern , _test_format_str_get , format , (gpointer )result );
269
347
cr_assert_str_eq (result -> str , test_cases -> expected ,
270
- "Pattern: '%s'; expected key and value: '%s';, got: '%s';" , test_cases -> pattern , test_cases -> expected , result -> str );
348
+ "Pattern: '%s'; expected key and value: '%s';, got: '%s';" ,
349
+ test_cases -> pattern , test_cases -> expected , result -> str );
271
350
272
351
g_string_free (result , TRUE);
273
352
}
274
353
354
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_kv_str_out )
355
+ {
356
+ run_test_case (test_cases , "kv" );
357
+ }
358
+
359
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_prometheus_str_out )
360
+ {
361
+ run_test_case (test_cases , "prometheus" );
362
+ }
363
+
364
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_csv_str_out )
365
+ {
366
+ run_test_case (test_cases , "csv" );
367
+ }
368
+
275
369
ParameterizedTestParameters (stats_query , test_stats_query_get_sum_log_msg_out )
276
370
{
277
371
static QueryTestCase test_cases [] =
@@ -300,13 +394,13 @@ ParameterizedTestParameters(stats_query, test_stats_query_get_sum_str_out)
300
394
{
301
395
static QueryTestCase test_cases [] =
302
396
{
303
- {"*" , "12" },
304
- {"center.*.*" , "12" },
305
- {"cent*" , "12" },
306
- {"src.pipe.guba.gumi.disz.*.*" , "0" },
307
- {"*.tcp.guba.*.*" , "0" },
308
- {"*.guba.*i.*.*" , "0" },
309
- {"*.guba.gum?.*.*" , "0" },
397
+ {"*" , "12\n " },
398
+ {"center.*.*" , "12\n " },
399
+ {"cent*" , "12\n " },
400
+ {"src.pipe.guba.gumi.disz.*.*" , "0\n " },
401
+ {"*.tcp.guba.*.*" , "0\n " },
402
+ {"*.guba.*i.*.*" , "0\n " },
403
+ {"*.guba.gum?.*.*" , "0\n " },
310
404
{"src.ja*.*.*" , "" },
311
405
};
312
406
0 commit comments