Skip to content

Commit 0c933a3

Browse files
committed
logproto-prometheus-scraper-responder: Split a bit better the generic scarper part from the prometheus handling one
Signed-off-by: Hofi <hofione@gmail.com>
1 parent abcaeb9 commit 0c933a3

File tree

2 files changed

+88
-24
lines changed

2 files changed

+88
-24
lines changed

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

+76-17
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ _generate_batched_response(const gchar *record, gpointer user_data)
3636
}
3737

3838
static GString *
39-
_compose_response_body(LogProtoHTTPServer *s)
39+
_compose_prometheus_response_body(LogProtoHTTPServer *s)
4040
{
4141
LogProtoHTTPScraperResponder *self = (LogProtoHTTPScraperResponder *)s;
4242

4343
GString *stats = NULL;
4444
gboolean cancelled = FALSE;
4545

46-
if (TRUE)//self->options->stat_type == STT_STAT)
46+
if (self->options->stat_type == STT_STAT)
4747
{
4848
stats = g_string_new(NULL);
4949
gpointer args[] = {self, &stats};
@@ -56,11 +56,29 @@ _compose_response_body(LogProtoHTTPServer *s)
5656
return stats;
5757
}
5858

59-
static gboolean
60-
_check_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_bytes)
59+
static GString *
60+
_compose_response_body(LogProtoHTTPServer *s)
6161
{
62-
//LogProtoHTTPScraperResponder *self = (LogProtoHTTPScraperResponder *)s;
62+
LogProtoHTTPScraperResponder *self = (LogProtoHTTPScraperResponder *)s;
63+
GString *stats = NULL;
64+
65+
// Once we have more scraspers to handle these should go into a separate class instead
66+
switch (self->options->scraper_type)
67+
{
68+
case SCT_PROMETHEUS:
69+
stats = _compose_prometheus_response_body(s);
70+
break;
71+
default:
72+
g_assert(FALSE && "Unknown scraper type");
73+
break;
74+
}
6375

76+
return stats;
77+
}
78+
79+
static gboolean
80+
_check_prometheus_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_bytes)
81+
{
6482
// TODO: add a generic header pareser to LogProtoHTTPServer and use it here
6583
gchar **lines = g_strsplit(buffer_start, "\r\n", 2);
6684

@@ -82,12 +100,32 @@ _check_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_
82100
return FALSE == broken;
83101
}
84102

103+
static gboolean
104+
_check_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_bytes)
105+
{
106+
LogProtoHTTPScraperResponder *self = (LogProtoHTTPScraperResponder *)s;
107+
gboolean result = FALSE;
108+
109+
// Once we have more scraspers to handle these should go into a separate class instead
110+
switch (self->options->scraper_type)
111+
{
112+
case SCT_PROMETHEUS:
113+
result = _check_prometheus_request_headers(s, buffer_start, buffer_bytes);
114+
break;
115+
default:
116+
g_assert(FALSE && "Unknown scraper type");
117+
break;
118+
}
119+
return result;
120+
}
121+
85122
void
86123
log_proto_http_scraper_responder_server_init(LogProtoHTTPScraperResponder *self, LogTransport *transport,
87-
const LogProtoHTTPScraperResponderOptionsStoreage *options)
124+
const LogProtoHTTPScraperResponderOptionsStorage *options)
88125
{
89126
log_proto_http_server_init((LogProtoHTTPServer *)self, transport,
90127
(LogProtoHTTPServerOptionsStorage *)options);
128+
91129
self->options = (const LogProtoHTTPScraperResponderOptions *)options;
92130
self->super.request_header_checker = _check_request_headers;
93131
self->super.response_body_composer = _compose_response_body;
@@ -99,32 +137,53 @@ log_proto_http_scraper_responder_server_new(LogTransport *transport,
99137
{
100138
LogProtoHTTPScraperResponder *self = g_new0(LogProtoHTTPScraperResponder, 1);
101139

102-
log_proto_http_scraper_responder_server_init(self, transport, (LogProtoHTTPScraperResponderOptionsStoreage *)options);
140+
log_proto_http_scraper_responder_server_init(self, transport, (LogProtoHTTPScraperResponderOptionsStorage *)options);
103141
return &self->super.super.super.super;
104142
}
105143

106144
/* Options */
107145

108146
void
109-
log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptions *options)
147+
log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptionsStorage *options)
110148
{
111-
memset(options, 0, sizeof(*options));
112-
options->stat_type = STT_STAT;
149+
log_proto_http_server_options_defaults((LogProtoHTTPServerOptionsStorage *)&options->storage);
150+
151+
options->super.stat_type = STT_STAT;
152+
options->super.scraper_type = SCT_PROMETHEUS;
113153
}
114154

115155
void
116-
log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptions *options,
156+
log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptionsStorage *options,
117157
GlobalConfig *cfg)
118158
{
119-
if (options->initialized)
159+
if (options->super.initialized)
120160
return;
121-
log_proto_server_options_init((LogProtoServerOptionsStorage *)options, cfg);
122-
options->initialized = TRUE;
161+
162+
log_proto_http_server_options_init((LogProtoHTTPServerOptionsStorage *)&options->storage, cfg);
163+
164+
if (options->super.stat_type == 0)
165+
options->super.stat_type = STT_STAT;
166+
if (options->super.scraper_type == 0)
167+
options->super.scraper_type = SCT_PROMETHEUS;
168+
169+
options->super.initialized = TRUE;
170+
}
171+
172+
gboolean
173+
log_proto_http_scraper_responder_options_validate(LogProtoHTTPScraperResponderOptionsStorage *options)
174+
{
175+
if (options->super.stat_type == STT_STAT || options->super.stat_type == STT_QUERY)
176+
{
177+
msg_error("prometheus-scraper-response(), type must be 'stat' or 'query'");
178+
return FALSE;
179+
}
180+
181+
return TRUE;
123182
}
124183

125184
void
126-
log_proto_http_scraper_responder_destroy(LogProtoHTTPScraperResponderOptions *options)
185+
log_proto_http_scraper_responder_destroy(LogProtoHTTPScraperResponderOptionsStorage *options)
127186
{
128-
log_proto_server_options_destroy((LogProtoServerOptionsStorage *)options);
129-
options->initialized = FALSE;
187+
log_proto_http_server_destroy((LogProtoHTTPServerOptionsStorage *)&options->storage);
188+
options->super.initialized = FALSE;
130189
}

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

+12-7
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,17 @@
2929
#define STT_STAT 0x01
3030
#define STT_QUERY 0x02
3131

32+
/* Stat type flags */
33+
#define SCT_PROMETHEUS 0x01
34+
3235
/* options */
3336
typedef struct _LogProtoHTTPScraperResponderOptions
3437
{
35-
LogProtoHTTPServerOptions super;
36-
guint8 stat_type;
38+
LogProtoHTTPServerOptions super; // This must be the first !!!
3739
gboolean initialized;
40+
guint8 stat_type;
41+
// Once we have more scraspers to handle these should go into a separate class
42+
guint8 scraper_type;
3843

3944
} LogProtoHTTPScraperResponderOptions;
4045

@@ -43,7 +48,7 @@ typedef union _LogProtoHTTPScraperResponderOptionsStoreage
4348
LogProtoServerOptionsStorage storage;
4449
LogProtoHTTPScraperResponderOptions super;
4550

46-
} LogProtoHTTPScraperResponderOptionsStoreage;
51+
} LogProtoHTTPScraperResponderOptionsStorage;
4752

4853
/* LogProtoHTTPScraperResponder */
4954
typedef struct _LogProtoHTTPScraperResponder LogProtoHTTPScraperResponder;
@@ -53,16 +58,16 @@ struct _LogProtoHTTPScraperResponder
5358
const LogProtoHTTPScraperResponderOptions *options;
5459
};
5560

56-
void log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptions *options);
57-
void log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptions *options,
61+
void log_proto_http_scraper_responder_options_defaults(LogProtoHTTPScraperResponderOptionsStorage *options);
62+
void log_proto_http_scraper_responder_options_init(LogProtoHTTPScraperResponderOptionsStorage *options,
5863
GlobalConfig *cfg);
59-
void log_proto_http_scraper_responder_destroy(LogProtoHTTPScraperResponderOptions *options);
64+
void log_proto_http_scraper_responder_destroy(LogProtoHTTPScraperResponderOptionsStorage *options);
6065

6166
LogProtoServer *log_proto_http_scraper_responder_server_new(
6267
LogTransport *transport,
6368
const LogProtoServerOptionsStorage *options);
6469
void log_proto_http_scraper_responder_server_init(LogProtoHTTPScraperResponder *self,
6570
LogTransport *transport,
66-
const LogProtoHTTPScraperResponderOptionsStoreage *options);
71+
const LogProtoHTTPScraperResponderOptionsStorage *options);
6772

6873
#endif

0 commit comments

Comments
 (0)