@@ -36,14 +36,14 @@ _generate_batched_response(const gchar *record, gpointer user_data)
36
36
}
37
37
38
38
static GString *
39
- _compose_response_body (LogProtoHTTPServer * s )
39
+ _compose_prometheus_response_body (LogProtoHTTPServer * s )
40
40
{
41
41
LogProtoHTTPScraperResponder * self = (LogProtoHTTPScraperResponder * )s ;
42
42
43
43
GString * stats = NULL ;
44
44
gboolean cancelled = FALSE;
45
45
46
- if (TRUE) // self->options->stat_type == STT_STAT)
46
+ if (self -> options -> stat_type == STT_STAT )
47
47
{
48
48
stats = g_string_new (NULL );
49
49
gpointer args [] = {self , & stats };
@@ -56,11 +56,29 @@ _compose_response_body(LogProtoHTTPServer *s)
56
56
return stats ;
57
57
}
58
58
59
- static gboolean
60
- _check_request_headers (LogProtoHTTPServer * s , gchar * buffer_start , gsize buffer_bytes )
59
+ static GString *
60
+ _compose_response_body (LogProtoHTTPServer * s )
61
61
{
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
+ }
63
75
76
+ return stats ;
77
+ }
78
+
79
+ static gboolean
80
+ _check_prometheus_request_headers (LogProtoHTTPServer * s , gchar * buffer_start , gsize buffer_bytes )
81
+ {
64
82
// TODO: add a generic header pareser to LogProtoHTTPServer and use it here
65
83
gchar * * lines = g_strsplit (buffer_start , "\r\n" , 2 );
66
84
@@ -82,12 +100,32 @@ _check_request_headers(LogProtoHTTPServer *s, gchar *buffer_start, gsize buffer_
82
100
return FALSE == broken ;
83
101
}
84
102
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
+
85
122
void
86
123
log_proto_http_scraper_responder_server_init (LogProtoHTTPScraperResponder * self , LogTransport * transport ,
87
- const LogProtoHTTPScraperResponderOptionsStoreage * options )
124
+ const LogProtoHTTPScraperResponderOptionsStorage * options )
88
125
{
89
126
log_proto_http_server_init ((LogProtoHTTPServer * )self , transport ,
90
127
(LogProtoHTTPServerOptionsStorage * )options );
128
+
91
129
self -> options = (const LogProtoHTTPScraperResponderOptions * )options ;
92
130
self -> super .request_header_checker = _check_request_headers ;
93
131
self -> super .response_body_composer = _compose_response_body ;
@@ -99,32 +137,53 @@ log_proto_http_scraper_responder_server_new(LogTransport *transport,
99
137
{
100
138
LogProtoHTTPScraperResponder * self = g_new0 (LogProtoHTTPScraperResponder , 1 );
101
139
102
- log_proto_http_scraper_responder_server_init (self , transport , (LogProtoHTTPScraperResponderOptionsStoreage * )options );
140
+ log_proto_http_scraper_responder_server_init (self , transport , (LogProtoHTTPScraperResponderOptionsStorage * )options );
103
141
return & self -> super .super .super .super ;
104
142
}
105
143
106
144
/* Options */
107
145
108
146
void
109
- log_proto_http_scraper_responder_options_defaults (LogProtoHTTPScraperResponderOptions * options )
147
+ log_proto_http_scraper_responder_options_defaults (LogProtoHTTPScraperResponderOptionsStorage * options )
110
148
{
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 ;
113
153
}
114
154
115
155
void
116
- log_proto_http_scraper_responder_options_init (LogProtoHTTPScraperResponderOptions * options ,
156
+ log_proto_http_scraper_responder_options_init (LogProtoHTTPScraperResponderOptionsStorage * options ,
117
157
GlobalConfig * cfg )
118
158
{
119
- if (options -> initialized )
159
+ if (options -> super . initialized )
120
160
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;
123
182
}
124
183
125
184
void
126
- log_proto_http_scraper_responder_destroy (LogProtoHTTPScraperResponderOptions * options )
185
+ log_proto_http_scraper_responder_destroy (LogProtoHTTPScraperResponderOptionsStorage * options )
127
186
{
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;
130
189
}
0 commit comments