From 800787d72aef341d25591d79e1407c562887f791 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 5 Feb 2016 15:07:00 +0200 Subject: [PATCH] stats: Split stats-connection.[ch] to lib-stats/ and plugin's mail-specific parts. --- src/lib-stats/Makefile.am | 5 +- .../stats => lib-stats}/stats-connection.c | 70 +----------------- src/lib-stats/stats-connection.h | 10 +++ src/plugins/stats/Makefile.am | 4 +- src/plugins/stats/mail-stats-connection.c | 72 +++++++++++++++++++ src/plugins/stats/mail-stats-connection.h | 19 +++++ src/plugins/stats/stats-connection.h | 21 ------ src/plugins/stats/stats-plugin.c | 10 +-- 8 files changed, 115 insertions(+), 96 deletions(-) rename src/{plugins/stats => lib-stats}/stats-connection.c (56%) create mode 100644 src/lib-stats/stats-connection.h create mode 100644 src/plugins/stats/mail-stats-connection.c create mode 100644 src/plugins/stats/mail-stats-connection.h delete mode 100644 src/plugins/stats/stats-connection.h diff --git a/src/lib-stats/Makefile.am b/src/lib-stats/Makefile.am index 48695dd30e..d06f3bc0c8 100644 --- a/src/lib-stats/Makefile.am +++ b/src/lib-stats/Makefile.am @@ -1,14 +1,17 @@ noinst_LTLIBRARIES = libstats.la AM_CPPFLAGS = \ - -I$(top_srcdir)/src/lib + -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/lib-master libstats_la_SOURCES = \ stats.c \ + stats-connection.c \ stats-parser.c headers = \ stats.h \ + stats-connection.h \ stats-parser.h pkginc_libdir = $(pkgincludedir) diff --git a/src/plugins/stats/stats-connection.c b/src/lib-stats/stats-connection.c similarity index 56% rename from src/plugins/stats/stats-connection.c rename to src/lib-stats/stats-connection.c index 35d2ac9653..389ed861c4 100644 --- a/src/plugins/stats/stats-connection.c +++ b/src/lib-stats/stats-connection.c @@ -1,17 +1,13 @@ /* Copyright (c) 2011-2016 Dovecot authors, see the included COPYING file */ #include "lib.h" -#include "base64.h" -#include "hostpid.h" -#include "net.h" #include "str.h" -#include "strescape.h" #include "master-service.h" -#include "mail-storage.h" -#include "stats.h" -#include "stats-plugin.h" #include "stats-connection.h" +#include +#include + struct stats_connection { int refcount; @@ -106,63 +102,3 @@ void stats_connection_send(struct stats_connection *conn, const string_t *str) conn->fd = -1; } } - -void stats_connection_connect(struct stats_connection *conn, - struct mail_user *user) -{ - struct stats_user *suser = STATS_USER_CONTEXT(user); - string_t *str = t_str_new(128); - - str_append(str, "CONNECT\t"); - /* required fields */ - str_append(str, suser->stats_session_id); - str_append_c(str, '\t'); - str_append_tabescaped(str, user->username); - str_append_c(str, '\t'); - str_append_tabescaped(str, user->service); - str_printfa(str, "\t%s", my_pid); - - /* optional fields */ - if (user->local_ip != NULL) { - str_append(str, "\tlip="); - str_append(str, net_ip2addr(user->local_ip)); - } - if (user->remote_ip != NULL) { - str_append(str, "\trip="); - str_append(str, net_ip2addr(user->remote_ip)); - } - str_append_c(str, '\n'); - stats_connection_send(conn, str); -} - -void stats_connection_disconnect(struct stats_connection *conn, - struct mail_user *user) -{ - struct stats_user *suser = STATS_USER_CONTEXT(user); - string_t *str = t_str_new(128); - - str_append(str, "DISCONNECT\t"); - str_append(str, suser->stats_session_id); - str_append_c(str, '\n'); - stats_connection_send(conn, str); -} - -void stats_connection_send_session(struct stats_connection *conn, - struct mail_user *user, - const struct stats *stats) -{ - struct stats_user *suser = STATS_USER_CONTEXT(user); - string_t *str = t_str_new(256); - buffer_t *buf; - - buf = buffer_create_dynamic(pool_datastack_create(), 128); - stats_export(buf, stats); - - str_append(str, "UPDATE-SESSION\t"); - str_append(str, suser->stats_session_id); - str_append_c(str, '\t'); - base64_encode(buf->data, buf->used, str); - - str_append_c(str, '\n'); - stats_connection_send(conn, str); -} diff --git a/src/lib-stats/stats-connection.h b/src/lib-stats/stats-connection.h new file mode 100644 index 0000000000..7555f72e32 --- /dev/null +++ b/src/lib-stats/stats-connection.h @@ -0,0 +1,10 @@ +#ifndef STATS_CONNECTION_H +#define STATS_CONNECTION_H + +struct stats_connection *stats_connection_create(const char *path); +void stats_connection_ref(struct stats_connection *conn); +void stats_connection_unref(struct stats_connection **conn); + +void stats_connection_send(struct stats_connection *conn, const string_t *str); + +#endif diff --git a/src/plugins/stats/Makefile.am b/src/plugins/stats/Makefile.am index ee26f37421..fd7e5411c8 100644 --- a/src/plugins/stats/Makefile.am +++ b/src/plugins/stats/Makefile.am @@ -16,12 +16,12 @@ module_LTLIBRARIES = \ lib90_stats_plugin_la_SOURCES = \ mail-stats.c \ mail-stats-fill.c \ - stats-connection.c \ + mail-stats-connection.c \ stats-plugin.c noinst_HEADERS = \ mail-stats.h \ - stats-connection.h \ + mail-stats-connection.h \ stats-plugin.h stats_moduledir = $(moduledir)/stats diff --git a/src/plugins/stats/mail-stats-connection.c b/src/plugins/stats/mail-stats-connection.c new file mode 100644 index 0000000000..f3103be80e --- /dev/null +++ b/src/plugins/stats/mail-stats-connection.c @@ -0,0 +1,72 @@ +/* Copyright (c) 2011-2016 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "base64.h" +#include "hostpid.h" +#include "net.h" +#include "str.h" +#include "strescape.h" +#include "mail-storage.h" +#include "stats.h" +#include "stats-plugin.h" +#include "mail-stats-connection.h" + +void mail_stats_connection_connect(struct stats_connection *conn, + struct mail_user *user) +{ + struct stats_user *suser = STATS_USER_CONTEXT(user); + string_t *str = t_str_new(128); + + str_append(str, "CONNECT\t"); + /* required fields */ + str_append(str, suser->stats_session_id); + str_append_c(str, '\t'); + str_append_tabescaped(str, user->username); + str_append_c(str, '\t'); + str_append_tabescaped(str, user->service); + str_printfa(str, "\t%s", my_pid); + + /* optional fields */ + if (user->local_ip != NULL) { + str_append(str, "\tlip="); + str_append(str, net_ip2addr(user->local_ip)); + } + if (user->remote_ip != NULL) { + str_append(str, "\trip="); + str_append(str, net_ip2addr(user->remote_ip)); + } + str_append_c(str, '\n'); + stats_connection_send(conn, str); +} + +void mail_stats_connection_disconnect(struct stats_connection *conn, + struct mail_user *user) +{ + struct stats_user *suser = STATS_USER_CONTEXT(user); + string_t *str = t_str_new(128); + + str_append(str, "DISCONNECT\t"); + str_append(str, suser->stats_session_id); + str_append_c(str, '\n'); + stats_connection_send(conn, str); +} + +void mail_stats_connection_send_session(struct stats_connection *conn, + struct mail_user *user, + const struct stats *stats) +{ + struct stats_user *suser = STATS_USER_CONTEXT(user); + string_t *str = t_str_new(256); + buffer_t *buf; + + buf = buffer_create_dynamic(pool_datastack_create(), 128); + stats_export(buf, stats); + + str_append(str, "UPDATE-SESSION\t"); + str_append(str, suser->stats_session_id); + str_append_c(str, '\t'); + base64_encode(buf->data, buf->used, str); + + str_append_c(str, '\n'); + stats_connection_send(conn, str); +} diff --git a/src/plugins/stats/mail-stats-connection.h b/src/plugins/stats/mail-stats-connection.h new file mode 100644 index 0000000000..3b3362b580 --- /dev/null +++ b/src/plugins/stats/mail-stats-connection.h @@ -0,0 +1,19 @@ +#ifndef MAIL_STATS_CONNECTION_H +#define MAIL_STATS_CONNECTION_H + +#include "stats-connection.h" + +struct mail_stats; +struct mail_user; + +void mail_stats_connection_connect(struct stats_connection *conn, + struct mail_user *user); +void mail_stats_connection_disconnect(struct stats_connection *conn, + struct mail_user *user); + +void mail_stats_connection_send_session(struct stats_connection *conn, + struct mail_user *user, + const struct stats *stats); +void mail_stats_connection_send(struct stats_connection *conn, const string_t *str); + +#endif diff --git a/src/plugins/stats/stats-connection.h b/src/plugins/stats/stats-connection.h deleted file mode 100644 index 5ab37a11a0..0000000000 --- a/src/plugins/stats/stats-connection.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef STATS_CONNECTION_H -#define STATS_CONNECTION_H - -struct mail_stats; -struct mail_user; - -struct stats_connection *stats_connection_create(const char *path); -void stats_connection_ref(struct stats_connection *conn); -void stats_connection_unref(struct stats_connection **conn); - -void stats_connection_connect(struct stats_connection *conn, - struct mail_user *user); -void stats_connection_disconnect(struct stats_connection *conn, - struct mail_user *user); - -void stats_connection_send_session(struct stats_connection *conn, - struct mail_user *user, - const struct stats *stats); -void stats_connection_send(struct stats_connection *conn, const string_t *str); - -#endif diff --git a/src/plugins/stats/stats-plugin.c b/src/plugins/stats/stats-plugin.c index b5db95815f..fa65bb8c34 100644 --- a/src/plugins/stats/stats-plugin.c +++ b/src/plugins/stats/stats-plugin.c @@ -8,7 +8,7 @@ #include "settings-parser.h" #include "mail-stats.h" #include "stats.h" -#include "stats-connection.h" +#include "mail-stats-connection.h" #include "stats-plugin.h" #define STATS_CONTEXT(obj) \ @@ -129,8 +129,8 @@ static void session_stats_refresh(struct mail_user *user) suser->session_sent_duplicate = !changed; suser->last_session_update = now; stats_copy(suser->last_sent_session_stats, suser->session_stats); - stats_connection_send_session(suser->stats_conn, user, - suser->session_stats); + mail_stats_connection_send_session(suser->stats_conn, user, + suser->session_stats); } if (suser->to_stats_timeout != NULL) @@ -333,7 +333,7 @@ static void stats_user_deinit(struct mail_user *user) stats_io_deactivate, user); /* send final stats before disconnection */ session_stats_refresh(user); - stats_connection_disconnect(stats_conn, user); + mail_stats_connection_disconnect(stats_conn, user); if (suser->to_stats_timeout != NULL) timeout_remove(&suser->to_stats_timeout); @@ -434,7 +434,7 @@ static void stats_user_created(struct mail_user *user) suser->last_sent_session_stats = stats_alloc(user->pool); MODULE_CONTEXT_SET(user, stats_user_module, suser); - stats_connection_connect(suser->stats_conn, user); + mail_stats_connection_connect(suser->stats_conn, user); suser->to_stats_timeout = timeout_add(suser->refresh_secs*1000, session_stats_refresh_timeout, user);