Skip to content

Commit

Permalink
stats: Split stats-connection.[ch] to lib-stats/ and plugin's mail-sp…
Browse files Browse the repository at this point in the history
…ecific parts.
  • Loading branch information
sirainen committed Feb 5, 2016
1 parent b7a0a5c commit 800787d
Show file tree
Hide file tree
Showing 8 changed files with 115 additions and 96 deletions.
5 changes: 4 additions & 1 deletion 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)
Expand Down
@@ -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 <unistd.h>
#include <fcntl.h>

struct stats_connection {
int refcount;

Expand Down Expand Up @@ -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);
}
10 changes: 10 additions & 0 deletions 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
4 changes: 2 additions & 2 deletions src/plugins/stats/Makefile.am
Expand Up @@ -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
Expand Down
72 changes: 72 additions & 0 deletions 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);
}
19 changes: 19 additions & 0 deletions 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
21 changes: 0 additions & 21 deletions src/plugins/stats/stats-connection.h

This file was deleted.

10 changes: 5 additions & 5 deletions src/plugins/stats/stats-plugin.c
Expand Up @@ -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) \
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 800787d

Please sign in to comment.