contrib & lib: fix other clients of clock
[nit.git] / lib / popcorn / pop_middlewares.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2016 Alexandre Terrasa <alexandre@moz-code.org>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 module pop_middlewares
18
19 import pop_handlers
20 import console
21 import realtime
22
23 # Initialize session in request if non existent.
24 #
25 # Should be called before any use of the session.
26 class SessionInit
27 super Handler
28
29 redef fun all(req, res) do if req.session == null then req.session = new Session
30 end
31
32 # Initialize a clock for the resquest.
33 #
34 # Can be used to compute the time passed to respond that request.
35 class RequestClock
36 super Handler
37
38 redef fun all(req, res) do req.clock = new Clock
39 end
40
41 # Display log info about request processing.
42 class ConsoleLog
43 super Handler
44
45 # Do we want colors in the console output?
46 var colors = true
47
48 redef fun all(req, res) do
49 var clock = req.clock
50 if clock != null then
51 print "{req.method} {req.uri} {status(res)} ({clock.total}s)"
52 else
53 print "{req.method} {req.uri} {status(res)}"
54 end
55 end
56
57 # Colorize the request status.
58 private fun status(res: HttpResponse): String do
59 if colors then return res.color_status
60 return res.status_code.to_s
61 end
62 end
63
64 redef class HttpRequest
65 # Time that request was received by the Popcorn app.
66 var clock: nullable Clock = null
67 end
68
69 redef class HttpResponse
70 # Return `self` status colored for console.
71 fun color_status: String do
72 if status_code == 200 then return status_code.to_s.green
73 if status_code == 304 then return status_code.to_s.blue
74 if status_code == 404 then return status_code.to_s.yellow
75 return status_code.to_s.red
76 end
77 end