aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2013-01-06 21:31:12 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2013-01-06 21:31:12 +0400
commitf9302ce1b512970722265f61eb17fd3d3f870c45 (patch)
treecbfad9a432fbc3a92d4fff8893fcd88534048429 /src
parent38c4c4c5274905130e5bab354ef6cdf0472d5525 (diff)
downloadrspamd-f9302ce1b512970722265f61eb17fd3d3f870c45.tar.gz
rspamd-f9302ce1b512970722265f61eb17fd3d3f870c45.zip
Add sample graph function (no real data still).
Diffstat (limited to 'src')
-rw-r--r--src/webui.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/webui.c b/src/webui.c
index 05512286a..fdaff5912 100644
--- a/src/webui.c
+++ b/src/webui.c
@@ -65,6 +65,7 @@
#define PATH_SYMBOLS "/symbols"
#define PATH_MAPS "/maps"
#define PATH_GET_MAP "/getmap"
+#define PATH_GRAPH "/graph"
gpointer init_webui_worker (void);
void start_webui_worker (struct rspamd_worker *worker);
@@ -536,6 +537,96 @@ http_handle_get_map (struct evhttp_request *req, gpointer arg)
evbuffer_free (evb);
}
+/*
+ * Graph command handler:
+ * request: /graph
+ * headers: Password
+ * reply: json [
+ * { label: "Foo", data: [ [10, 1], [17, -14], [30, 5] ] },
+ * { label: "Bar", data: [ [10, 1], [17, -14], [30, 5] ] },
+ * {...}
+ * ]
+ */
+/* XXX: now this function returns only random data */
+static void
+http_handle_graph (struct evhttp_request *req, gpointer arg)
+{
+ struct rspamd_webui_worker_ctx *ctx = arg;
+ struct evbuffer *evb;
+ gint i, seed;
+ time_t now, t;
+ double vals[5][100];
+
+ evb = evbuffer_new ();
+ if (!evb) {
+ msg_err ("cannot allocate evbuffer for reply");
+ evhttp_send_reply (req, HTTP_INTERNAL, "500 insufficient memory", NULL);
+ return;
+ }
+
+ /* Trailer */
+ evbuffer_add (evb, "[", 1);
+
+ /* XXX: simple and stupid set */
+ seed = g_random_int ();
+ for (i = 0; i < 100; i ++, seed ++) {
+ vals[0][i] = (sin (seed) + 1) * 40.;
+ vals[1][i] = vals[0][i] * 0.5;
+ vals[2][i] = vals[0][i] * 0.1;
+ vals[3][i] = vals[0][i] * 0.3;
+ vals[4][i] = vals[0][i] * 1.9;
+ }
+
+ now = time (NULL);
+
+ /* Ham label */
+ t = now;
+ evbuffer_add_printf (evb, "{\"label\": \"Clean messages\", \"data\":[");
+ for (i = 0; i < 100; i ++, t -= 60) {
+ evbuffer_add_printf (evb, "[%lu,%.2f%s", (long unsigned)t, vals[0][i], i == 99 ? "]" : "],");
+ }
+ evbuffer_add (evb, "]},", 3);
+
+ /* Probable spam label */
+ t = now;
+ evbuffer_add_printf (evb, "{\"label\": \"Probable spam messages\", \"data\":[");
+ for (i = 0; i < 100; i ++, t -= 60) {
+ evbuffer_add_printf (evb, "[%lu,%.2f%s", (long unsigned)t, vals[1][i], i == 99 ? "]" : "],");
+ }
+ evbuffer_add (evb, "]},", 3);
+
+ /* Greylist label */
+ t = now;
+ evbuffer_add_printf (evb, "{\"label\": \"Greylisted messages\", \"data\":[");
+ for (i = 0; i < 100; i ++, t -= 60) {
+ evbuffer_add_printf (evb, "[%lu,%.2f%s", (long unsigned)t, vals[2][i], i == 99 ? "]" : "],");
+ }
+ evbuffer_add (evb, "]},", 3);
+
+ /* Reject label */
+ t = now;
+ evbuffer_add_printf (evb, "{\"label\": \"Rejected messages\", \"data\":[");
+ for (i = 0; i < 100; i ++, t -= 60) {
+ evbuffer_add_printf (evb, "[%lu,%.2f%s", (long unsigned)t, vals[3][i], i == 99 ? "]" : "],");
+ }
+ evbuffer_add (evb, "]},", 3);
+
+ /* Total label */
+ t = now;
+ evbuffer_add_printf (evb, "{\"label\": \"Total messages\", \"data\":[");
+ for (i = 0; i < 100; i ++, t -= 60) {
+ evbuffer_add_printf (evb, "[%lu,%.2f%s", (long unsigned)t, vals[4][i], i == 99 ? "]" : "],");
+ }
+ evbuffer_add (evb, "]}", 2);
+
+ evbuffer_add (evb, "]" CRLF, 3);
+ evhttp_add_header (req->output_headers, "Connection", "close");
+ http_calculate_content_length (evb, req);
+
+ evhttp_send_reply (req, HTTP_OK, "OK", evb);
+ evbuffer_free (evb);
+}
+
gpointer
init_webui_worker (void)
@@ -614,6 +705,7 @@ start_webui_worker (struct rspamd_worker *worker)
evhttp_set_cb (ctx->http, PATH_SYMBOLS, http_handle_symbols, ctx);
evhttp_set_cb (ctx->http, PATH_MAPS, http_handle_maps, ctx);
evhttp_set_cb (ctx->http, PATH_GET_MAP, http_handle_get_map, ctx);
+ evhttp_set_cb (ctx->http, PATH_GRAPH, http_handle_graph, ctx);
ctx->resolver = dns_resolver_init (ctx->ev_base, worker->srv->cfg);