Mercurial > irccd
annotate plugins/logger/logger.js @ 164:3b38931801ff
Plugin logger: add initial unit test
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 25 May 2016 21:27:16 +0200 |
parents | 5ed0c78a6785 |
children | e0ca65f5ecd0 |
rev | line source |
---|---|
0 | 1 /* |
2 * logger.js -- plugin to log everything | |
3 * | |
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
19 // Plugin information. |
0 | 20 info = { |
21 author: "David Demelier <markand@malikania.fr>", | |
22 license: "ISC", | |
23 summary: "A plugin to log everything", | |
24 version: "@IRCCD_VERSION@" | |
25 }; | |
26 | |
164
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
27 // Modules. |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
28 var Directory = Irccd.Directory; |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
29 var File = Irccd.File; |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
30 var Logger = Irccd.Logger; |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
31 var Plugin = Irccd.Plugin; |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
32 var Util = Irccd.Util; |
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
33 |
0 | 34 /** |
35 * All available formats. | |
36 */ | |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
37 Plugin.format = { |
0 | 38 "cmode": "%H:%M:%S :: #{nickname} changed the mode to: #{mode} #{arg}", |
39 "cnotice": "%H:%M:%S :: [notice] (#{channel}) #{nickname}: #{message}", | |
40 "join": "%H:%M:%S >> #{nickname} joined #{channel}", | |
41 "kick": "%H:%M:%S :: #{target} has been kicked by #{nickname} [reason: #{reason}]", | |
42 "me": "%H:%M:%S * #{nickname} #{message}", | |
43 "message": "%H:%M:%S #{nickname}: #{message}", | |
44 "mode": "%H:%M:%S :: #{nickname} set mode #{mode} to #{arg}", | |
45 "notice": "%H:%M:%S [notice] (#{nickname}) #{message}", | |
46 "part": "%H:%M:%S << #{nickname} left #{channel} [#{reason}]", | |
47 "query": "%H:%M:%S #{nickname}: #{message}", | |
48 "topic": "%H:%M:%S :: #{nickname} changed the topic of #{channel} to: #{topic}" | |
49 }; | |
50 | |
51 /** | |
52 * Load all formats. | |
53 */ | |
54 function loadFormats() | |
55 { | |
164
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
56 // --- DEPRECATED ------------------------------------------- |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
57 // |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
58 // This code will be removed. |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
59 // |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
60 // Since: 2.1.0 |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
61 // Until: 3.0.0 |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
62 // Reason: new [format] section replaces it. |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
63 // |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
64 // ---------------------------------------------------------- |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
65 for (var key in Plugin.format) { |
0 | 66 var optname = "format-" + key; |
67 | |
68 if (typeof (Plugin.config[optname]) !== "string") | |
69 continue; | |
70 | |
71 if (Plugin.config[optname].length === 0) | |
72 Logger.warning("skipping empty '" + optname + "' format"); | |
73 else | |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
74 Plugin.format[key] = Plugin.config[optname]; |
0 | 75 } |
76 } | |
77 | |
78 function keywords(server, channel, origin, extra) | |
79 { | |
80 var kw = { | |
81 "server": server.toString(), | |
82 "channel": channel, | |
83 "origin": origin, | |
84 "nickname": Util.splituser(origin) | |
85 }; | |
86 | |
87 for (var key in extra) | |
88 kw[key] = extra[key]; | |
89 | |
90 return kw; | |
91 } | |
92 | |
93 function write(fmt, args) | |
94 { | |
95 var path = Util.format(Plugin.config["path"], args); | |
96 var directory = File.dirname(path); | |
97 | |
164
3b38931801ff
Plugin logger: add initial unit test
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
98 // Try to create the directory. |
0 | 99 if (!File.exists(directory)) { |
100 Logger.debug("creating directory: " + directory); | |
101 Directory.mkdir(directory); | |
102 } | |
103 | |
104 Logger.debug("opening: " + path); | |
105 | |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
106 var str = Util.format(Plugin.format[fmt], args); |
0 | 107 var file = new File(path, "wa"); |
108 | |
109 file.write(str + "\n"); | |
110 } | |
111 | |
112 function onLoad() | |
113 { | |
114 if (Plugin.config["path"] === undefined) | |
115 throw new Error("Missing 'path' option"); | |
144
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
116 |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
117 loadFormats(); |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
118 } |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
119 |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
120 function onReload() |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
121 { |
5ed0c78a6785
Plugin logger: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
122 loadFormats(); |
0 | 123 } |
124 | |
125 function onChannelMode(server, origin, channel, mode, arg) | |
126 { | |
127 write("cmode", keywords(server, channel, origin, { | |
128 "arg": arg, | |
129 "mode": mode, | |
130 "source": channel | |
131 })); | |
132 } | |
133 | |
134 function onChannelNotice(server, origin, channel, notice) | |
135 { | |
136 write("cnotice", keywords(server, channel, origin, { | |
137 "message": notice, | |
138 "source": channel | |
139 })); | |
140 } | |
141 | |
142 function onInvite(server, origin, channel) | |
143 { | |
144 write("invite", keywords(server, channel, origin, { | |
145 "source": channel | |
146 })); | |
147 } | |
148 | |
149 function onJoin(server, origin, channel) | |
150 { | |
151 write("join", keywords(server, channel, origin, { | |
152 "source": channel | |
153 })); | |
154 } | |
155 | |
156 function onKick(server, origin, channel, target, reason) | |
157 { | |
158 write("kick", keywords(server, channel, origin, { | |
159 "target": target, | |
160 "source": channel, | |
161 "reason": reason | |
162 })); | |
163 } | |
164 | |
165 function onMe(server, origin, channel, message) | |
166 { | |
167 write("me", keywords(server, channel, origin, { | |
168 "message": message, | |
169 "source": channel | |
170 })); | |
171 } | |
172 | |
173 function onMessage(server, origin, channel, message) | |
174 { | |
175 write("message", keywords(server, channel, origin, { | |
176 "message": message, | |
177 "source": channel | |
178 })); | |
179 } | |
180 | |
181 function onMode(server, origin, mode) | |
182 { | |
183 write("mode", keywords(server, undefined, origin, { | |
184 "mode": mode, | |
185 "source": Util.splituser(origin) | |
186 })); | |
187 } | |
188 | |
189 function onNick(server, origin, nickname) | |
190 { | |
191 // TODO: write for all servers/channels a log entry | |
192 } | |
193 | |
194 function onNotice(server, origin, notice) | |
195 { | |
196 write("notice", keywords(server, undefined, origin, { | |
197 "message": notice, | |
198 "source": Util.splituser(origin) | |
199 })); | |
200 } | |
201 | |
202 function onPart(server, origin, channel, reason) | |
203 { | |
204 write("part", keywords(server, channel, origin, { | |
205 "reason": reason, | |
206 "source": channel | |
207 })); | |
208 } | |
209 | |
210 function onQuery(server, origin, message) | |
211 { | |
212 write("query", keywords(server, undefined, origin, { | |
213 "source": Util.splituser(origin), | |
214 "message": message | |
215 })); | |
216 } | |
217 | |
218 function onTopic(server, origin, channel, topic) | |
219 { | |
220 write("topic", keywords(server, channel, origin, { | |
221 "source": channel, | |
222 "topic": topic | |
223 })); | |
224 } |