Adds a module for logging requests
authorBlackMinou <romain.chanoir@viacesi.fr>
Sun, 29 Nov 2015 23:06:34 +0000 (18:06 -0500)
committerBlackMinou <romain.chanoir@viacesi.fr>
Mon, 30 Nov 2015 11:41:26 +0000 (06:41 -0500)
Signed-off-by: BlackMinou <romain.chanoir@viacesi.fr>

lib/nitcorn/log.nit [new file with mode: 0644]

diff --git a/lib/nitcorn/log.nit b/lib/nitcorn/log.nit
new file mode 100644 (file)
index 0000000..c0d6d52
--- /dev/null
@@ -0,0 +1,59 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Services inserting a timestamp in all prints and to log each requests
+# Also keep track of the performances of the requests
+module log
+
+import reactor
+import realtime
+import performance_analysis
+
+redef class Action
+
+       redef fun prepare_respond_and_close(request, truncated_uri, http_server) do
+               if not log_nitcorn_actions then
+                       super
+                       return
+               end
+               print """{{{class_name}}} enter:
+uri="{{{truncated_uri}}}"
+query="{{{request.query_string}}}"
+body:{{{request.body.length}}} bytes"""
+               var clock = new Clock
+               super
+               var perf = sys.perfs[class_name]
+               perf.add(clock.lapse)
+               if perf.count % perfs_print_period == 0 then print "{class_name} perfs: {perf}:"
+               print "{class_name} return: uri={truncated_uri}"
+       end
+end
+
+redef fun print(object) do
+       var timestamp = new Tm.gmtime
+       super "{timestamp.year}/{timestamp.mon}/{timestamp.mday} "+
+       "{timestamp.hour}:{timestamp.min}:{timestamp.sec}: {object}"
+end
+
+redef fun print_error(object) do
+       var timestamp = new Tm.gmtime
+       super "{timestamp.year}/{timestamp.mon}/{timestamp.mday} "+
+       "{timestamp.hour}:{timestamp.min}:{timestamp.sec}: {object}"
+end
+
+# Should the actions be logged ?
+fun log_nitcorn_actions: Bool do return false
+
+# Number of actions executed before printing the perfs
+fun perfs_print_period: Int do return 20