Update mod_logxml to work with ejabberd git master
This commit is contained in:
parent
2b7bbd9535
commit
350d4d3884
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue