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