From 350d4d3884f307f0289138ed78ca0a673759ceaf Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 2 Feb 2015 17:10:55 +0100 Subject: [PATCH] Update mod_logxml to work with ejabberd git master --- mod_logxml/README.txt | 40 +++++++++++++++++------------------ mod_logxml/src/mod_logxml.erl | 32 ++++++++++++++-------------- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/mod_logxml/README.txt b/mod_logxml/README.txt index 96da9ec..fa53e21 100644 --- a/mod_logxml/README.txt +++ b/mod_logxml/README.txt @@ -3,7 +3,7 @@ Homepage: http://www.ejabberd.im/mod_logxml Author: Badlop - Module for ejabberd 0.7.5 or newer + Module for ejabberd git master DESCRIPTION @@ -42,7 +42,6 @@ timezone: Default value: local show_ip: If the IP address of the local user should be logged to file. - This option requires ejabberd 2.0.0 or newer, specifically SVN r772 (2007-05-21) Default value: false rotate_days: Rotate logs every X days @@ -61,29 +60,28 @@ check_rotate_kpackets: Default value: 1 - EXAMPLE CONFIGURATION --------------------- -In ejabberd.cfg, in the modules section, add the module. For example: - -{modules, [ - ... - {mod_logxml, [ - {stanza, [message, other]}, - {direction, [external]}, - {orientation, [send, recv]}, - {logdir, "/var/jabber/logs/"}, - {timezone, universal}, - {show_ip, false}, % To enable this option you need ejabberd 2.0.0 or newer - {rotate_days, 1}, - {rotate_megs, 100}, - {rotate_kpackets, no}, - {check_rotate_kpackets, 1} - ]}, - ... -]}. +In ejabberd.yml, in the modules section, add the module. For example: +modules: + mod_logxml: + stanza: + - iq + - other + direction: + - external + orientation: + - send + - recv + logdir: "/tmp/logs/" + timezone: universal + show_ip: false + rotate_days: 1 + rotate_megs: 100 + rotate_kpackets: no + check_rotate_kpackets: 1 FORMAT OF XML diff --git a/mod_logxml/src/mod_logxml.erl b/mod_logxml/src/mod_logxml.erl index c550a21..5ac6238 100644 --- a/mod_logxml/src/mod_logxml.erl +++ b/mod_logxml/src/mod_logxml.erl @@ -24,35 +24,35 @@ %% ------------------- start(Host, Opts) -> - Logdir = gen_mod:get_opt(logdir, Opts, "/tmp/jabberlogs/"), + Logdir = gen_mod:get_opt(logdir, Opts, fun(A) -> A end, "/tmp/jabberlogs/"), - Rd = gen_mod:get_opt(rotate_days, Opts, 1), - Rf = case gen_mod:get_opt(rotate_megs, Opts, 10) of + Rd = gen_mod:get_opt(rotate_days, Opts, fun(A) -> A end, 1), + Rf = case gen_mod:get_opt(rotate_megs, Opts, fun(A) -> A end, 10) of no -> no; Rf1 -> Rf1*1024*1024 end, - Rp = case gen_mod:get_opt(rotate_kpackets, Opts, 10) of + Rp = case gen_mod:get_opt(rotate_kpackets, Opts, fun(A) -> A end, 10) of no -> no; Rp1 -> Rp1*1000 end, RotateO = {Rd, Rf, Rp}, - CheckRKP = gen_mod:get_opt(check_rotate_kpackets, Opts, 1), + CheckRKP = gen_mod:get_opt(check_rotate_kpackets, Opts, fun(A) -> A end, 1), - Timezone = gen_mod:get_opt(timezone, Opts, local), + Timezone = gen_mod:get_opt(timezone, Opts, fun(A) -> A end, local), - Orientation = gen_mod:get_opt(orientation, Opts, [send, recv]), - Stanza = gen_mod:get_opt(stanza, Opts, [iq, message, presence, other]), - Direction = gen_mod:get_opt(direction, Opts, [internal, vhosts, external]), + Orientation = gen_mod:get_opt(orientation, Opts, fun(A) -> A end, [send, recv]), + Stanza = gen_mod:get_opt(stanza, Opts, fun(A) -> A end, [iq, message, presence, other]), + Direction = gen_mod:get_opt(direction, Opts, fun(A) -> A end, [internal, vhosts, external]), FilterO = { {orientation, Orientation}, {stanza, Stanza}, {direction, Direction}}, - ShowIP = gen_mod:get_opt(show_ip, Opts, false), + ShowIP = gen_mod:get_opt(show_ip, Opts, fun(A) -> A end, false), ejabberd_hooks:add(user_send_packet, Host, ?MODULE, send_packet, 90), ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, receive_packet, 90), register(gen_mod:get_module_proc(Host, ?PROCNAME), - spawn(?MODULE, init, [Host, Logdir, RotateO, CheckRKP, + spawn(?MODULE, init, [binary_to_list(Host), Logdir, RotateO, CheckRKP, Timezone, ShowIP, FilterO])). stop(Host) -> @@ -110,10 +110,10 @@ filter(FilterO, E) -> FilterO, {Orientation, From, To, Packet} = E, - {xmlelement, Stanza_str, _Attrs, _Els} = Packet, - Stanza = list_to_atom(Stanza_str), + {xmlel, Stanza_str, _Attrs, _Els} = Packet, + Stanza = list_to_atom(binary_to_list(Stanza_str)), - Hosts_all = ejabberd_config:get_global_option(hosts), + Hosts_all = ejabberd_config:get_global_option(hosts, fun(A) -> A end), {Host_local, Host_remote} = case Orientation of send -> {From#jid.lserver, To#jid.lserver}; recv -> {To#jid.lserver, From#jid.lserver} @@ -194,7 +194,7 @@ add_log(Io, Timezone, ShowIP, {Orientation, From, To, Packet}, _OSD) -> TimestampISO = get_now_iso(Timezone), io:fwrite(Io, "~s~n", [Orientation, jlib:jid_to_string(LocalJID), LocalIPS, - TimestampISO, xml:element_to_string(Packet)]). + TimestampISO, binary_to_list(xml:element_to_binary(Packet))]). %% ------------------- %% File @@ -258,7 +258,7 @@ get_now_iso(Timezone) -> local -> calendar:now_to_local_time(now()); universal -> calendar:now_to_universal_time(now()) end, - jlib:timestamp_to_iso(TimeStamp). + binary_to_list(jlib:timestamp_to_iso(TimeStamp)). calc_div(A, B) when is_integer(A) and is_integer(B) and B =/= 0 -> A/B;