Skip to content

Commit 7f3f6b0

Browse files
committed
logproto-http-scraper-responder: make options handling conform to the base LogProtoServerOptionsStorage
Signed-off-by: Hofi <hofione@gmail.com>
1 parent 6041a02 commit 7f3f6b0

File tree

2 files changed

+84
-60
lines changed

2 files changed

+84
-60
lines changed

lib/logproto/logproto-http-scraper-responder.c

+73-50
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ _compose_response_body(LogProtoHTTPServer *s)
124124
static gboolean
125125
_check_prometheus_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_bytes)
126126
{
127-
// TODO: add a generic header pareser to LogProtoHTTPServer and use it here
127+
// TODO: add a generic header parser to LogProtoHTTPServer and use it here
128128
gchar **lines = g_strsplit(buffer_start, "\r\n", 2);
129129

130130
// First line must be like 'GET /metrics HTTP/1.1\x0d\x0a'
@@ -176,143 +176,166 @@ _log_proto_http_scraper_responder_server_free(LogProtoServer *s)
176176

177177
void
178178
log_proto_http_scraper_responder_server_init(LogProtoHTTPScraperResponder *self, LogTransport *transport,
179-
const LogProtoHTTPScraperResponderOptionsStorage *options)
179+
const LogProtoServerOptionsStorage *options)
180180
{
181-
log_proto_http_server_init((LogProtoHTTPServer *)self, transport,
182-
(LogProtoHTTPServerOptionsStorage *)options);
181+
log_proto_http_server_init((LogProtoHTTPServer *)self, transport, options);
182+
self->super.request_header_checker = _check_request_headers;
183+
self->super.response_body_composer = _compose_response_body;
184+
183185
self->super.super.super.super.free_fn = _log_proto_http_scraper_responder_server_free;
184186
self->super.super.super.no_multi_read = TRUE;
185-
self->options = (const LogProtoHTTPScraperResponderOptions *)options;
186187

187-
self->super.request_header_checker = _check_request_headers;
188-
self->super.response_body_composer = _compose_response_body;
188+
self->options = (const LogProtoHTTPScraperResponderOptions *)options;
189189
}
190190

191191
LogProtoServer *
192192
log_proto_http_scraper_responder_server_new(LogTransport *transport,
193-
const LogProtoServerOptionsStorage *options)
193+
const LogProtoServerOptionsStorage *proto_server_options)
194194
{
195195
g_mutex_lock(_mutex());
196196

197-
LogProtoHTTPScraperResponderOptionsStorage *server_options = (LogProtoHTTPScraperResponderOptionsStorage *)options;
198-
if (server_options->super.single_instance && single_instance)
197+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *)&proto_server_options->super;
198+
if (options->single_instance && single_instance)
199199
{
200200
msg_trace("Only one Prometheus scraper responder instance is allowed");
201201
g_mutex_unlock(_mutex());
202202
return NULL;
203203
}
204204

205205
LogProtoHTTPScraperResponder *self = g_new0(LogProtoHTTPScraperResponder, 1);
206-
if (server_options->super.single_instance)
206+
if (options->single_instance)
207207
single_instance = self;
208-
log_proto_http_scraper_responder_server_init(self, transport, server_options);
208+
log_proto_http_scraper_responder_server_init(self, transport, proto_server_options);
209209

210210
g_mutex_unlock(_mutex());
211211
return &self->super.super.super.super;
212212
}
213213

214214
/*----------------- Options -----------------*/
215215

216+
/* NOTE: We do not maintain here the initialized state at all, it is the responsibility of the
217+
* LogProtoServer/LogProtoServerOptions functions
218+
*/
216219
void
217-
log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptionsStorage *options)
220+
log_proto_http_scraper_responder_options_defaults(LogProtoServerOptionsStorage *proto_server_options)
218221
{
219-
log_proto_http_server_options_defaults((LogProtoHTTPServerOptionsStorage *)&options->storage);
220-
log_proto_http_server_options_set_close_after_send((LogProtoHTTPServerOptionsStorage *)&options->storage, TRUE);
222+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
223+
224+
log_proto_http_server_options_defaults(proto_server_options);
225+
log_proto_http_server_options_set_close_after_send(proto_server_options, TRUE);
226+
227+
proto_server_options->super.init = log_proto_http_scraper_responder_options_init;
228+
proto_server_options->super.validate = log_proto_http_scraper_responder_options_validate;
229+
proto_server_options->super.destroy = log_proto_http_scraper_responder_options_destroy;
221230

222-
options->super.stat_type = 0;
223-
options->super.scraper_type = 0;
224-
options->super.scrape_freq_limit = -1;
231+
options->stat_type = 0;
232+
options->scraper_type = 0;
233+
options->scrape_freq_limit = -1;
225234
}
226235

227236
void
228-
log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptionsStorage *options,
237+
log_proto_http_scraper_responder_options_init(LogProtoServerOptionsStorage *proto_server_options,
229238
GlobalConfig *cfg)
230239
{
231-
if (options->super.initialized)
232-
return;
240+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
233241

234-
log_proto_http_server_options_init((LogProtoHTTPServerOptionsStorage *)&options->storage, cfg);
235-
log_proto_http_server_options_set_close_after_send((LogProtoHTTPServerOptionsStorage *)&options->storage, TRUE);
242+
log_proto_http_server_options_init(proto_server_options, cfg);
243+
log_proto_http_server_options_set_close_after_send(proto_server_options, TRUE);
236244

237-
if (options->super.stat_type == 0)
238-
options->super.stat_type = STT_STAT;
239-
if (options->super.scraper_type == 0)
240-
options->super.scraper_type = SCT_PROMETHEUS;
241-
if (options->super.scrape_freq_limit == -1)
242-
options->super.scraper_type = 0;
243-
244-
options->super.initialized = TRUE;
245+
if (options->stat_type == 0)
246+
options->stat_type = STT_STAT;
247+
if (options->scraper_type == 0)
248+
options->scraper_type = SCT_PROMETHEUS;
249+
if (options->scrape_freq_limit == -1)
250+
options->scraper_type = 0;
245251
}
246252

247253
void
248-
log_proto_http_scraper_responder_options_destroy(LogProtoHTTPScraperResponderOptionsStorage *options)
254+
log_proto_http_scraper_responder_options_destroy(LogProtoServerOptionsStorage *proto_server_options)
249255
{
250-
log_proto_http_server_options_destroy((LogProtoHTTPServerOptionsStorage *)&options->storage);
251-
g_free(options->super.stat_query);
252-
options->super.initialized = FALSE;
256+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
257+
258+
log_proto_http_server_options_destroy(proto_server_options);
259+
g_free(options->stat_query);
253260
}
254261

255262
gboolean
256-
log_proto_http_scraper_responder_options_validate(LogProtoHTTPScraperResponderOptionsStorage *options)
263+
log_proto_http_scraper_responder_options_validate(LogProtoServerOptionsStorage *proto_server_options)
257264
{
258-
if (options->super.stat_type == STT_STAT || options->super.stat_type == STT_QUERY)
265+
return TRUE;
266+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
267+
268+
if (FALSE == log_proto_http_server_options_validate(proto_server_options))
269+
return FALSE;
270+
271+
if (options->stat_type == STT_STAT || options->stat_type == STT_QUERY)
259272
{
260-
msg_error("prometheus-scraper-response(), type must be 'stat' or 'query'");
273+
msg_error("prometheus-stats() stat type must be 'stat' or 'query'");
261274
return FALSE;
262275
}
263276

264277
return TRUE;
265278
}
266279

267280
gboolean
268-
log_proto_http_scraper_responder_options_set_scraper_type(LogProtoHTTPScraperResponderOptionsStorage *options,
281+
log_proto_http_scraper_responder_options_set_scraper_type(LogProtoServerOptionsStorage *proto_server_options,
269282
const gchar *value)
270283
{
284+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
285+
271286
if (strcmp(value, "prometheus") == 0)
272287
{
273-
options->super.scraper_type = SCT_PROMETHEUS;
288+
options->scraper_type = SCT_PROMETHEUS;
274289
return TRUE;
275290
}
276291
return FALSE;
277292
}
278293

279294
void
280295
log_proto_http_scraper_responder_options_set_scrape_freq_limit(
281-
LogProtoHTTPScraperResponderOptionsStorage *options,
296+
LogProtoServerOptionsStorage *proto_server_options,
282297
gint value)
283298
{
284-
options->super.scrape_freq_limit = value;
299+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
300+
301+
options->scrape_freq_limit = value;
285302
}
286303

287304
void
288305
log_proto_http_scraper_responder_options_set_single_instance(
289-
LogProtoHTTPScraperResponderOptionsStorage *options,
306+
LogProtoServerOptionsStorage *proto_server_options,
290307
gboolean value)
291308
{
292-
options->super.single_instance = value;
309+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
310+
311+
options->single_instance = value;
293312
}
294313

295314
gboolean
296-
log_proto_http_scraper_responder_options_set_stat_type(LogProtoHTTPScraperResponderOptionsStorage *options,
315+
log_proto_http_scraper_responder_options_set_stat_type(LogProtoServerOptionsStorage *proto_server_options,
297316
const gchar *value)
298317
{
318+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
319+
299320
if (strcmp(value, "stat") == 0)
300321
{
301-
options->super.stat_type = STT_STAT;
322+
options->stat_type = STT_STAT;
302323
return TRUE;
303324
}
304325
else if (strcmp(value, "query") == 0)
305326
{
306-
options->super.stat_type = STT_QUERY;
327+
options->stat_type = STT_QUERY;
307328
return TRUE;
308329
}
309330
return FALSE;
310331
}
311332

312333
void
313-
log_proto_http_scraper_responder_options_set_stat_query(LogProtoHTTPScraperResponderOptionsStorage *options,
334+
log_proto_http_scraper_responder_options_set_stat_query(LogProtoServerOptionsStorage *proto_server_options,
314335
const gchar *value)
315336
{
316-
g_free(options->super.stat_query);
317-
options->super.stat_query = g_strdup(value);
337+
LogProtoHTTPScraperResponderOptions *options = (LogProtoHTTPScraperResponderOptions *) &proto_server_options->super;
338+
339+
g_free(options->stat_query);
340+
options->stat_query = g_strdup(value);
318341
}

lib/logproto/logproto-http-scraper-responder.h

+11-10
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
typedef struct _LogProtoHTTPScraperResponderOptions
3737
{
3838
LogProtoHTTPServerOptions super; // This must be the first !!!
39-
gboolean initialized;
4039
guint8 scraper_type;
4140
gint scrape_freq_limit;
4241
// Once we have more scrapers to handle these should go into a separate class
@@ -61,31 +60,33 @@ struct _LogProtoHTTPScraperResponder
6160
const LogProtoHTTPScraperResponderOptions *options;
6261
};
6362

64-
void log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptionsStorage *options);
65-
void log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptionsStorage *options,
63+
void log_proto_http_scraper_responder_options_defaults(LogProtoServerOptionsStorage *options);
64+
void log_proto_http_scraper_responder_options_init(LogProtoServerOptionsStorage *options,
6665
GlobalConfig *cfg);
67-
void log_proto_http_scraper_responder_destroy(LogProtoHTTPScraperResponderOptionsStorage *options);
66+
void log_proto_http_scraper_responder_options_destroy(LogProtoServerOptionsStorage *options);
67+
gboolean log_proto_http_scraper_responder_options_validate(LogProtoServerOptionsStorage *options);
68+
6869
gboolean log_proto_http_scraper_responder_options_set_scraper_type(
69-
LogProtoHTTPScraperResponderOptionsStorage *options,
70+
LogProtoServerOptionsStorage *options,
7071
const gchar *value);
7172
void log_proto_http_scraper_responder_options_set_scrape_freq_limit(
72-
LogProtoHTTPScraperResponderOptionsStorage *options,
73+
LogProtoServerOptionsStorage *options,
7374
gint value);
7475
void log_proto_http_scraper_responder_options_set_single_instance(
75-
LogProtoHTTPScraperResponderOptionsStorage *options,
76+
LogProtoServerOptionsStorage *options,
7677
gboolean value);
7778
gboolean log_proto_http_scraper_responder_options_set_stat_type(
78-
LogProtoHTTPScraperResponderOptionsStorage *options,
79+
LogProtoServerOptionsStorage *options,
7980
const gchar *value);
8081
void log_proto_http_scraper_responder_options_set_stat_query(
81-
LogProtoHTTPScraperResponderOptionsStorage *options,
82+
LogProtoServerOptionsStorage *options,
8283
const gchar *value);
8384

8485
LogProtoServer *log_proto_http_scraper_responder_server_new(
8586
LogTransport *transport,
8687
const LogProtoServerOptionsStorage *options);
8788
void log_proto_http_scraper_responder_server_init(LogProtoHTTPScraperResponder *self,
8889
LogTransport *transport,
89-
const LogProtoHTTPScraperResponderOptionsStorage *options);
90+
const LogProtoServerOptionsStorage *options);
9091

9192
#endif

0 commit comments

Comments
 (0)