Commit 52b0927f2382fa29729d719c97499d295e9db82e

Authored by Cédric RICARD
1 parent 15bb49b1

Added performances logs for long SQL queries (more than 1 second)

calexium_lib/database/db_utils.anubis
@@ -9,10 +9,30 @@ @@ -9,10 +9,30 @@
9 9
10 read tools/basis.anubis 10 read tools/basis.anubis
11 read system/logger.anubis 11 read system/logger.anubis
  12 +read system/string.anubis
12 read data_base/sqlite.anubis 13 read data_base/sqlite.anubis
13 14
14 read calexium_lib/net_services_protocols/logger_service.anubis 15 read calexium_lib/net_services_protocols/logger_service.anubis
15 16
  17 +define String
  18 + __utime_to_string
  19 + (
  20 + UTime t
  21 + ) =
  22 + to_decimal(t.seconds) + "." + zero_pad_n(6, t.microseconds ) + " s".
  23 +
  24 +define One
  25 + __logLongQueries
  26 + (
  27 + UTime t0,
  28 + String sql_query
  29 + ) =
  30 + with t = unow - t0,
  31 + if t.seconds > 0 then
  32 + logTrace("SQL", logMask("sql_profiling"), "[SQL] " + __utime_to_string(t) + " executing [" + sql_query + "]")
  33 + else
  34 + unique.
  35 +
16 public define Result(SQLite3Error, One) 36 public define Result(SQLite3Error, One)
17 sql_transaction 37 sql_transaction
18 ( 38 (
@@ -21,6 +41,7 @@ public define Result(SQLite3Error, One) @@ -21,6 +41,7 @@ public define Result(SQLite3Error, One)
21 String message 41 String message
22 ) = 42 ) =
23 // logDebug(debug_log, "Entering into transaction [" + message + "]."); 43 // logDebug(debug_log, "Entering into transaction [" + message + "].");
  44 + with t0 = unow,
24 if db_do_transaction( 45 if db_do_transaction(
25 db, 46 db,
26 (One _) |-> 47 (One _) |->
@@ -36,10 +57,11 @@ public define Result(SQLite3Error, One) @@ -36,10 +57,11 @@ public define Result(SQLite3Error, One)
36 { 57 {
37 error(err_and_result) then 58 error(err_and_result) then
38 // logDebug(debug_log, "Exiting from transaction [" + message + "] with error."); 59 // logDebug(debug_log, "Exiting from transaction [" + message + "] with error.");
39 - if err_and_result is (err, mb_result) then  
40 - error(err), 60 + __logLongQueries(t0, sql_command);
  61 + if err_and_result is (err, mb_result) then error(err),
41 ok(_) then 62 ok(_) then
42 // logDebug(debug_log, "Exiting from transaction [" + message + "]."); 63 // logDebug(debug_log, "Exiting from transaction [" + message + "].");
  64 + __logLongQueries(t0, sql_command);
43 ok(unique) 65 ok(unique)
44 }. 66 }.
45 67
@@ -54,10 +76,15 @@ public define SQLite3QueryResult @@ -54,10 +76,15 @@ public define SQLite3QueryResult
54 String msg //message to be shown if an error occure 76 String msg //message to be shown if an error occure
55 ) = 77 ) =
56 //we try with 30 sec of timeout 78 //we try with 30 sec of timeout
  79 + with t0 = unow,
57 if sql_query_timeout(db, sql_query, initial_bindings, 60, 100) is 80 if sql_query_timeout(db, sql_query, initial_bindings, 60, 100) is
58 { 81 {
59 - error(sql_error) then logError("DB", db_error(sql_error,msg)); error(sql_error),  
60 - ok(headers, cursor, reset) then ok(headers, cursor, reset) 82 + error(sql_error) then logError("DB", db_error(sql_error,msg));
  83 + __logLongQueries(t0, sql_query);
  84 + error(sql_error),
  85 + ok(headers, cursor, reset) then
  86 + __logLongQueries(t0, sql_query);
  87 + ok(headers, cursor, reset)
61 }. 88 }.
62 89
63 // deprecated. Use one of the previous ones. 90 // deprecated. Use one of the previous ones.
@@ -69,10 +96,14 @@ public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) @@ -69,10 +96,14 @@ public define Maybe(SQLite3HeadersOrRow -> SQLite3Row)
69 String msg //message to be shown if an error occure 96 String msg //message to be shown if an error occure
70 ) = 97 ) =
71 //we try with 30 sec of timeout 98 //we try with 30 sec of timeout
  99 + with t0 = unow,
72 if sql_query_timeout(db, sql_query, [], 60, 100) is 100 if sql_query_timeout(db, sql_query, [], 60, 100) is
73 { 101 {
74 - error(sql_error) then logError("DB", db_error(sql_error,msg));failure, 102 + error(sql_error) then logError("DB", db_error(sql_error,msg));
  103 + __logLongQueries(t0, sql_query);
  104 + failure,
75 ok(headers, cursor, reset) then 105 ok(headers, cursor, reset) then
  106 + __logLongQueries(t0, sql_query);
76 success((SQLite3HeadersOrRow h_or_r) |-> if h_or_r is 107 success((SQLite3HeadersOrRow h_or_r) |-> if h_or_r is
77 { 108 {
78 headers then 109 headers then
calexium_lib/net_services_protocols/logger_service.anubis
@@ -237,35 +237,6 @@ public define Maybe(UDP_Server) @@ -237,35 +237,6 @@ public define Maybe(UDP_Server)
237 237
238 /****************** CLIENT PART *******************/ 238 /****************** CLIENT PART *******************/
239 239
240 -/*  
241 - define One  
242 - send_log_msg  
243 - (  
244 - MessageQueue queue,  
245 - Message log_msg  
246 - )=  
247 - with test_msg = message(_CXM_REQUEST_FOR_SERVICE),  
248 - forget(add_int32(test_msg, "service", _CXM_LOGGER_SERVICE_ID));  
249 - forget(add_int32(test_msg, "version", 1));  
250 - queue.add_Message_to_send(test_msg);  
251 - if queue.get_next_received_Message(30) is  
252 - {  
253 - timeout then println("send_log_msg receive timeout"),  
254 - closed then println("send_log_msg socket closed"),  
255 - msg(msg) then  
256 - if find_int32(msg, "STATUS") is  
257 - {  
258 - failure then println("status not found"),  
259 - success(v) then  
260 - if v = _CXM_OK then  
261 - queue.add_Message_to_send(log_msg);  
262 - forget(wait_for_reply(queue, _CXM_LOGGER_LOG, 30))  
263 - else  
264 - println("requested service started won't start")  
265 - }  
266 - }.  
267 -*/  
268 -  
269 define One 240 define One
270 local_net_logger 241 local_net_logger
271 ( 242 (
@@ -273,22 +244,7 @@ define One @@ -273,22 +244,7 @@ define One
273 Message log_message 244 Message log_message
274 )= 245 )=
275 forget(send_message_by_udp(log_message, ip_address((127,0,0,1)), logger_port)). 246 forget(send_message_by_udp(log_message, ip_address((127,0,0,1)), logger_port)).
276 -  
277 -/* if find_string(log_message, "LogString") is  
278 - {  
279 - failure then println("process_log can't find LogString"),  
280 - success(log_string) then println(log_string)  
281 - }.  
282 - if connect( ip_address((127,0,0,1)), 33125) is  
283 - {  
284 - error(_) then println("can't connect to logger server ["+logger_server+"]");  
285 - forget(process_log(fullLogger, log_message)),  
286 - ok(conn) then  
287 - with queue = create_MessageQueue("net logger sender"),  
288 - message_transceiver(conn, queue);  
289 - send_log_msg(queue, log_message);  
290 - queue.quit(unique)  
291 - }.*/ 247 +
292 248
293 define Message 249 define Message
294 create_log_msg 250 create_log_msg
@@ -306,6 +262,67 @@ define Message @@ -306,6 +262,67 @@ define Message
306 forget(add_int32(log_msg, "Thread", virtual_machine_id)); 262 forget(add_int32(log_msg, "Thread", virtual_machine_id));
307 log_msg 263 log_msg
308 . 264 .
  265 +*/
  266 +
  267 +// HACK Begin of Hacked version
  268 + define String debug_log = "Debug".
  269 + define String config_log = "Config".
  270 + define String incoming_log = "Incoming".
  271 + define String outgoing_log = "Outgoing".
  272 + define String pop3_log = "POP3".
  273 + define String mailing_log = "Mailing".
  274 + define String errors_log = "Errors".
  275 + define String security_log = "Security".
  276 + define String spams_log = "Spams".
  277 + define String api_log = "MF_API".
  278 + define String internal_log = "INTERNAL".
  279 +
  280 +
  281 + define String
  282 + get_log_file
  283 + (
  284 + String log_name
  285 + ) =
  286 + if log_name = debug_log then "debug.log"
  287 + else if log_name = "SendMail" then "debug.log"
  288 + else if log_name = config_log then "config.log"
  289 + else if log_name = incoming_log then "incoming.log"
  290 + else if log_name = outgoing_log then "outgoing.log"
  291 + else if log_name = pop3_log then "pop3.log"
  292 + else if log_name = mailing_log then "mailing.log"
  293 + else if log_name = errors_log then "errors.log"
  294 + else if log_name = "DB" then "errors.log"
  295 + else if log_name = "SQL" then "sql_profiling.log"
  296 + else if log_name = security_log then "security.log"
  297 + else if log_name = spams_log then "spams.log"
  298 + else if log_name = api_log then "api.log"
  299 + else if log_name = internal_log then "internal"
  300 + else "unknown.log".
  301 +
  302 +
  303 + define One
  304 + local_net_logger
  305 + (
  306 + String logger_server,
  307 + One _
  308 + )=
  309 + unique.
  310 +
  311 + define One
  312 + create_log_msg
  313 + (
  314 + String logger_name,
  315 + String log_string,
  316 + Int level
  317 + )=
  318 + with log = createLogger(logger_name, 8, "/var/MailFountain/log/" + get_log_file(logger_name), logTrace, logTrace),
  319 + logLevel = get_LogLevel_from_value(level),
  320 + protect
  321 + doLog(log, log_string, logLevel, virtual_machine_id).
  322 +
  323 +// HACK End of Hacked version
  324 +
  325 +
309 326
310 public define One 327 public define One
311 log( 328 log(
@@ -366,3 +383,15 @@ public define One @@ -366,3 +383,15 @@ public define One
366 with log_msg = create_log_msg(logger_name, log_string, 6), 383 with log_msg = create_log_msg(logger_name, log_string, 6),
367 forget(add_string(log_msg, "LogMask", log_mask.mask)); 384 forget(add_string(log_msg, "LogMask", log_mask.mask));
368 local_net_logger("127.0.0.1", log_msg). 385 local_net_logger("127.0.0.1", log_msg).
  386 +
  387 +// HACK hacked version
  388 + public define One
  389 + logTrace(
  390 + String logger_name,
  391 + LogMask log_mask,
  392 + String log_string
  393 + )=
  394 + if log_mask is logMask(mask) then
  395 + if mask = "send_mail" | mask = "smtp" | mask = "sql_profiling" then
  396 + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 6))
  397 + else unique.