Skip to content

Commit a08f7e9

Browse files
Merge pull request #1939 from lift/ajk-service-request-timer
Implement customizable service request timers
2 parents 5ac794a + 90c5351 commit a08f7e9

4 files changed

Lines changed: 50 additions & 10 deletions

File tree

web/webkit/src/main/scala/net/liftweb/http/LiftRules.scala

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1994,9 +1994,30 @@ class LiftRules() extends Factory with FormVendor with LazyLoggable {
19941994
*/
19951995
@volatile var logUnreadRequestVars = true
19961996

1997-
/** Controls whether or not the service handling timing messages (Service request (GET) ... took ... Milliseconds) are logged. Defaults to true. */
1997+
/** Controls whether or not the service handling timing messages (Service request (GET) ... took ... Milliseconds) are logged.
1998+
* If set to false NoOpServiceTimer is used.
1999+
* We should remove this setting in Lift-4 and only depend on serviceRequestTimer
2000+
* Defaults to true.
2001+
* */
19982002
@volatile var logServiceRequestTiming = true
19992003

2004+
/**
2005+
* Handles logging of servicing a request
2006+
* two default implementations:
2007+
* - NoOpServiceTimer that does nothing
2008+
* - StandardServiceTimer that logs time it takes to serve the request (Service request (GET) ... took ... Milliseconds).
2009+
* This is the default used.
2010+
*
2011+
* Set custom in Boot:
2012+
* LiftRules.installServiceRequestTimer(MyCustomServiceTimer)
2013+
*/
2014+
val serviceRequestTimer = new LiftRulesGuardedSetting[FactoryMaker[ServiceRequestTimer]]("serviceRequestTimer", new FactoryMaker[ServiceRequestTimer](StandardServiceTimer){})
2015+
2016+
def installServiceRequestTimer(default: ServiceRequestTimer): Unit = {
2017+
val factoryMaker = new FactoryMaker[ServiceRequestTimer](default) {}
2018+
serviceRequestTimer.set(factoryMaker)
2019+
}
2020+
20002021
/** Provides a function that returns random names for form variables, page ids, callbacks, etc. */
20012022
@volatile var funcNameGenerator: () => String = defaultFuncNameGenerator(Props.mode)
20022023

web/webkit/src/main/scala/net/liftweb/http/LiftServlet.scala

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,7 @@ class LiftServlet extends Loggable {
159159
)
160160
}
161161

162-
if (LiftRules.logServiceRequestTiming) {
163-
logTime {
164-
val ret = doService(req, resp)
165-
val msg = "Service request (" + req.request.method + ") " + req.request.uri + " returned " + resp.getStatus + ","
166-
(msg, ret)
167-
}
168-
} else {
169-
doService(req, resp)
170-
}
162+
LiftRules.serviceRequestTimer.get.vend.logTime(req, resp)(doService)
171163
}
172164

173165
req.request.resumeInfo match {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.liftweb.http
2+
3+
import net.liftweb.http.provider.HTTPResponse
4+
import net.liftweb.util.Helpers
5+
6+
trait ServiceRequestTimer {
7+
def logTime(req: Req, resp: HTTPResponse)(doService: (Req, HTTPResponse) => Boolean): Boolean
8+
}
9+
10+
object NoOpServiceTimer extends ServiceRequestTimer {
11+
override def logTime(req: Req, resp: HTTPResponse)(doService: (Req, HTTPResponse) => Boolean): Boolean = {
12+
doService(req, resp)
13+
}
14+
}
15+
16+
object StandardServiceTimer extends ServiceRequestTimer {
17+
override def logTime(req: Req, resp: HTTPResponse)(doService: (Req, HTTPResponse) => Boolean): Boolean = {
18+
Helpers.logTime {
19+
val ret = doService(req, resp)
20+
val msg = "Service request (" + req.request.method + ") " + req.request.uri + " returned " + resp.getStatus + ","
21+
(msg, ret)
22+
}
23+
}
24+
}

web/webkit/src/main/scala/net/liftweb/http/provider/HTTPProvider.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ trait HTTPProvider {
132132
}
133133

134134
private def postBoot {
135+
if (!LiftRules.logServiceRequestTiming) {
136+
LiftRules.installServiceRequestTimer(NoOpServiceTimer)
137+
}
135138
try {
136139
ResourceBundle getBundle (LiftRules.liftCoreResourceName)
137140
} catch {

0 commit comments

Comments
 (0)