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,89 @@ _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 duplicting 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 ;
198
+ // Other user_data elements are
199
+ // - StatsCluster * = args[0]
200
+ // - gint type = args[1];
201
+ // - const gchar * fmt = args[3];
165
202
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 );
203
+ StatsCounterItem * ctr = (StatsCounterItem * ) args [2 ];
204
+ GString * str = (GString * )args [4 ];
175
205
206
+ g_string_append_printf (str , "%s\n" , stats_counter_get_name (ctr ));
176
207
return TRUE;
177
208
}
178
209
210
+ // FIXME: this must be mocked to _ctl_format_get_sum of stats-query-commands.c instead of duplicating the code
179
211
static gboolean
180
212
_test_format_str_get_sum (gpointer user_data )
181
213
{
182
214
gpointer * args = (gpointer * ) user_data ;
183
215
GString * result = (GString * ) args [0 ];
184
- gint * sum = (gint * ) args [1 ];
185
-
186
- g_string_printf (result , "%d" , * sum );
216
+ gint64 * sum = (gint64 * ) args [1 ];
187
217
218
+ g_string_printf (result , "%" G_GINT64_FORMAT "\n" , * sum );
188
219
return TRUE;
189
220
}
190
221
191
222
static gboolean
192
- _test_format_list (gpointer user_data )
223
+ _test_format_log_msg_get_sum (gpointer user_data )
193
224
{
225
+ gchar * name , * value ;
194
226
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 ));
227
+ LogMessage * msg = (LogMessage * ) args [0 ];
228
+ gint * sum = (gint * ) args [1 ];
229
+
230
+ name = "sum" ;
231
+ value = g_strdup_printf ("%d" , * sum );
198
232
233
+ log_msg_set_value_by_name (msg , name , value , -1 );
234
+
235
+ g_free (value );
199
236
return TRUE;
200
237
}
201
238
@@ -231,7 +268,7 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
231
268
const gchar * actual ;
232
269
LogMessage * msg = log_msg_new_empty ();
233
270
234
- stats_query_get (test_cases -> pattern , _test_format_log_msg_get , (gpointer )msg );
271
+ stats_query_get (test_cases -> pattern , _test_format_log_msg_get , "kv" , (gpointer )msg );
235
272
actual = log_msg_get_value_by_name (msg , test_cases -> pattern , NULL );
236
273
cr_assert_str_eq (actual , test_cases -> expected ,
237
274
"Counter: '%s'; expected number: '%s';, got: '%s';" , test_cases -> pattern , test_cases -> expected , actual );
@@ -240,38 +277,96 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
240
277
}
241
278
242
279
243
- ParameterizedTestParameters (stats_query , test_stats_query_get_str_out )
280
+ ParameterizedTestParameters (stats_query , test_stats_query_get_kv_str_out )
244
281
{
245
282
static QueryTestCase test_cases [] =
246
283
{
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" },
284
+ {"center.*.*" , "center.guba.polo.frozen.suppressed= 12\n" },
285
+ {"cent*" , "center.guba.polo.frozen.suppressed= 12\n" },
286
+ {"src.pipe.guba.gumi.disz.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed= 0\n" },
287
+ {"src.pipe.guba.gumi.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed= 0\n" },
288
+ {"src.pipe.guba.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed= 0\n" },
289
+ {"src.pipe.*.*" , "src.pipe.guba.gumi.disz.frozen.suppressed= 0\n" },
290
+ {"dst.*.*" , "dst.tcp.guba.labda.received.dropped= 0\n" },
291
+ {"dst.*.*.*" , "dst.tcp.guba.labda.received.dropped= 0\n" },
292
+ {"dst.*.*.*.*" , "dst.tcp.guba.labda.received.dropped= 0\n" },
256
293
{"src.java.*.*" , "" },
257
294
{"src.ja*.*.*" , "" },
258
- {"global.id.instance.name" , "global.id.instance.name: 0\n" },
295
+ {"global.id.instance.name" , "global.id.instance.name= 0\n" },
259
296
};
260
297
261
298
return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
262
299
}
263
300
264
- ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_str_out )
301
+ ParameterizedTestParameters (stats_query , test_stats_query_get_prometheus_str_out )
302
+ {
303
+ static QueryTestCase test_cases [] =
304
+ {
305
+ {"center.*.*" , "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n" },
306
+ {"cent*" , "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n" },
307
+ {"src.pipe.guba.gumi.disz.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
308
+ {"src.pipe.guba.gumi.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
309
+ {"src.pipe.guba.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n" },
310
+ {"src.pipe.*.*" , "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 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
+ {"dst.*.*.*.*" , "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n" },
314
+ {"src.java.*.*" , "" },
315
+ {"src.ja*.*.*" , "" },
316
+ {"global.id.instance.name" , "syslogng_global_id_name 0\n" },
317
+ };
318
+
319
+ return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
320
+ }
321
+
322
+ ParameterizedTestParameters (stats_query , test_stats_query_get_csv_str_out )
323
+ {
324
+ static QueryTestCase test_cases [] =
325
+ {
326
+ {"center.*.*" , "center;guba.polo;frozen;a;suppressed;12\n" },
327
+ {"cent*" , "center;guba.polo;frozen;a;suppressed;12\n" },
328
+ {"src.pipe.guba.gumi.disz.*.*" , "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n" },
329
+ {"src.pipe.guba.gumi.*.*" , "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n" },
330
+ {"src.pipe.guba.*.*" , "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n" },
331
+ {"src.pipe.*.*" , "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n" },
332
+ {"dst.*.*" , "dst.tcp;guba.labda;received;a;dropped;0\n" },
333
+ {"dst.*.*.*" , "dst.tcp;guba.labda;received;a;dropped;0\n" },
334
+ {"dst.*.*.*.*" , "dst.tcp;guba.labda;received;a;dropped;0\n" },
335
+ {"src.java.*.*" , "" },
336
+ {"src.ja*.*.*" , "" },
337
+ {"global.id.instance.name" , "global;id;instance;a;name;0\n" },
338
+ };
339
+
340
+ return cr_make_param_array (QueryTestCase , test_cases , sizeof (test_cases ) / sizeof (test_cases [0 ]));
341
+ }
342
+
343
+ void run_test_case (QueryTestCase * test_cases , const char * format )
265
344
{
266
345
GString * result = g_string_new ("" );
267
346
268
- stats_query_get (test_cases -> pattern , _test_format_str_get , (gpointer )result );
347
+ stats_query_get (test_cases -> pattern , _test_format_str_get , format , (gpointer )result );
269
348
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 );
349
+ "Pattern: '%s'; expected key and value: '%s';, got: '%s';" ,
350
+ test_cases -> pattern , test_cases -> expected , result -> str );
271
351
272
352
g_string_free (result , TRUE);
273
353
}
274
354
355
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_kv_str_out )
356
+ {
357
+ run_test_case (test_cases , "kv" );
358
+ }
359
+
360
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_prometheus_str_out )
361
+ {
362
+ run_test_case (test_cases , "prometheus" );
363
+ }
364
+
365
+ ParameterizedTest (QueryTestCase * test_cases , stats_query , test_stats_query_get_csv_str_out )
366
+ {
367
+ run_test_case (test_cases , "csv" );
368
+ }
369
+
275
370
ParameterizedTestParameters (stats_query , test_stats_query_get_sum_log_msg_out )
276
371
{
277
372
static QueryTestCase test_cases [] =
@@ -300,13 +395,13 @@ ParameterizedTestParameters(stats_query, test_stats_query_get_sum_str_out)
300
395
{
301
396
static QueryTestCase test_cases [] =
302
397
{
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" },
398
+ {"*" , "12\n " },
399
+ {"center.*.*" , "12\n " },
400
+ {"cent*" , "12\n " },
401
+ {"src.pipe.guba.gumi.disz.*.*" , "0\n " },
402
+ {"*.tcp.guba.*.*" , "0\n " },
403
+ {"*.guba.*i.*.*" , "0\n " },
404
+ {"*.guba.gum?.*.*" , "0\n " },
310
405
{"src.ja*.*.*" , "" },
311
406
};
312
407
0 commit comments