Update mod_logxml to work with ejabberd git master

This commit is contained in:
Badlop 2015-02-02 17:10:55 +01:00
parent 2b7bbd9535
commit 350d4d3884
2 changed files with 35 additions and 37 deletions

View File

@ -3,7 +3,7 @@
Homepage: http://www.ejabberd.im/mod_logxml Homepage: http://www.ejabberd.im/mod_logxml
Author: Badlop Author: Badlop
Module for ejabberd 0.7.5 or newer Module for ejabberd git master
DESCRIPTION DESCRIPTION
@ -42,7 +42,6 @@ timezone:
Default value: local Default value: local
show_ip: show_ip:
If the IP address of the local user should be logged to file. 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 Default value: false
rotate_days: rotate_days:
Rotate logs every X days Rotate logs every X days
@ -61,29 +60,28 @@ check_rotate_kpackets:
Default value: 1 Default value: 1
EXAMPLE CONFIGURATION EXAMPLE CONFIGURATION
--------------------- ---------------------
In ejabberd.cfg, in the modules section, add the module. For example: In ejabberd.yml, 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}
]},
...
]}.
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 FORMAT OF XML

View File

@ -24,35 +24,35 @@
%% ------------------- %% -------------------
start(Host, Opts) -> 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), Rd = gen_mod:get_opt(rotate_days, Opts, fun(A) -> A end, 1),
Rf = case gen_mod:get_opt(rotate_megs, Opts, 10) of Rf = case gen_mod:get_opt(rotate_megs, Opts, fun(A) -> A end, 10) of
no -> no; no -> no;
Rf1 -> Rf1*1024*1024 Rf1 -> Rf1*1024*1024
end, 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; no -> no;
Rp1 -> Rp1*1000 Rp1 -> Rp1*1000
end, end,
RotateO = {Rd, Rf, Rp}, 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]), Orientation = gen_mod:get_opt(orientation, Opts, fun(A) -> A end, [send, recv]),
Stanza = gen_mod:get_opt(stanza, Opts, [iq, message, presence, other]), Stanza = gen_mod:get_opt(stanza, Opts, fun(A) -> A end, [iq, message, presence, other]),
Direction = gen_mod:get_opt(direction, Opts, [internal, vhosts, external]), Direction = gen_mod:get_opt(direction, Opts, fun(A) -> A end, [internal, vhosts, external]),
FilterO = { FilterO = {
{orientation, Orientation}, {orientation, Orientation},
{stanza, Stanza}, {stanza, Stanza},
{direction, Direction}}, {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_send_packet, Host, ?MODULE, send_packet, 90),
ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, receive_packet, 90), ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, receive_packet, 90),
register(gen_mod:get_module_proc(Host, ?PROCNAME), 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])). Timezone, ShowIP, FilterO])).
stop(Host) -> stop(Host) ->
@ -110,10 +110,10 @@ filter(FilterO, E) ->
FilterO, FilterO,
{Orientation, From, To, Packet} = E, {Orientation, From, To, Packet} = E,
{xmlelement, Stanza_str, _Attrs, _Els} = Packet, {xmlel, Stanza_str, _Attrs, _Els} = Packet,
Stanza = list_to_atom(Stanza_str), 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 {Host_local, Host_remote} = case Orientation of
send -> {From#jid.lserver, To#jid.lserver}; send -> {From#jid.lserver, To#jid.lserver};
recv -> {To#jid.lserver, From#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), TimestampISO = get_now_iso(Timezone),
io:fwrite(Io, "<packet or=\"~p\" ljid=\"~s\" ~sts=\"~s\">~s</packet>~n", io:fwrite(Io, "<packet or=\"~p\" ljid=\"~s\" ~sts=\"~s\">~s</packet>~n",
[Orientation, jlib:jid_to_string(LocalJID), LocalIPS, [Orientation, jlib:jid_to_string(LocalJID), LocalIPS,
TimestampISO, xml:element_to_string(Packet)]). TimestampISO, binary_to_list(xml:element_to_binary(Packet))]).
%% ------------------- %% -------------------
%% File %% File
@ -258,7 +258,7 @@ get_now_iso(Timezone) ->
local -> calendar:now_to_local_time(now()); local -> calendar:now_to_local_time(now());
universal -> calendar:now_to_universal_time(now()) universal -> calendar:now_to_universal_time(now())
end, 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 -> calc_div(A, B) when is_integer(A) and is_integer(B) and B =/= 0 ->
A/B; A/B;