11package contentapi
22
33import java .util .concurrent .TimeUnit
4-
54import org .apache .pekko .actor .{ActorSystem => PekkoActorSystem }
65import com .github .nscala_time .time .Implicits ._
76import com .gu .contentapi .client .model ._
@@ -18,10 +17,14 @@ import concurrent.CircuitBreakerRegistry
1817import conf .Configuration
1918import conf .Configuration .contentApi
2019import conf .switches .Switches .CircuitBreakerSwitch
20+ import net .logstash .logback .marker .Markers .appendEntries
21+ import play .api .MarkerContext
2122
23+ import java .lang .System .currentTimeMillis
2224import scala .concurrent .duration .{Duration , MILLISECONDS }
2325import scala .concurrent .{ExecutionContext , Future }
2426import scala .util .Try
27+ import scala .jdk .CollectionConverters ._
2528
2629object QueryDefaults {
2730 // NOTE - do NOT add body to this list
@@ -146,11 +149,33 @@ final case class CircuitBreakingContentApiClient(
146149 override def get (url : String , headers : Map [String , String ])(implicit
147150 executionContext : ExecutionContext ,
148151 ): Future [HttpResponse ] = {
149- if (CircuitBreakerSwitch .isSwitchedOn) {
150- circuitBreaker.withCircuitBreaker(super .get(url, headers)(executionContext))
151- } else {
152- super .get(url, headers)
153- }
152+ val start = currentTimeMillis()
153+
154+ val resp =
155+ if (CircuitBreakerSwitch .isSwitchedOn) {
156+ circuitBreaker.withCircuitBreaker(super .get(url, headers)(executionContext))
157+ } else {
158+ super .get(url, headers)
159+ }
160+
161+ resp.foreach((r : HttpResponse ) => {
162+ val duration : Long = currentTimeMillis() - start
163+
164+ val markers = MarkerContext (
165+ appendEntries(
166+ Map (
167+ " method" -> " GET" ,
168+ " status" -> r.statusCode,
169+ " duration" -> duration,
170+ " requestUri" -> url,
171+ " contentLength" -> r.body.length,
172+ ).asJava,
173+ ),
174+ )
175+ log.info(s " Request to Content API took ${duration}ms " )(markers)
176+ })
177+
178+ resp
154179 }
155180}
156181
0 commit comments