Skip to content

Commit

Permalink
Remove Unwanted Built Context
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristopherDavenport committed Jul 10, 2023
1 parent 8feb7a5 commit 210fddb
Showing 1 changed file with 41 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ object ServerMiddleware {
def responseAdditionalContext(prelude: Response[Pure]) = Map.empty[String, String]
val responseLogBody = false
val responseBodyMaxSize = 65535
val removedContextKeys = Set.empty[String]
def logLevel(prelude: Request[Pure], outcome: Outcome[Option, Throwable, Response[Pure]]): Option[LogLevel] = LogLevel.Info.some
def logMessage(prelude: Request[Pure], outcome: Outcome[Option, Throwable, Response[Pure]], now: FiniteDuration): String = s"Http Server - ${prelude.method}"

Expand All @@ -60,6 +61,7 @@ object ServerMiddleware {
Defaults.responseAdditionalContext(_),
Defaults.responseLogBody,
Defaults.responseBodyMaxSize,
Defaults.removedContextKeys,
Defaults.logLevel(_, _),
Defaults.logMessage(_,_,_)
)
Expand All @@ -82,6 +84,8 @@ object ServerMiddleware {
responseLogBody: Boolean,
responseBodyMaxSize: Long,

removedContextKeys: Set[String],

logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
){ self =>
Expand All @@ -99,6 +103,7 @@ object ServerMiddleware {
responseAdditionalContext: Response[Pure] => Map[String, String] = self.responseAdditionalContext,
responseLogBody: Boolean = self.responseLogBody,
responseBodyMaxSize: Long = self.responseBodyMaxSize,
removedContextKeys: Set[String] = self.removedContextKeys,
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel] = self.logLevel,
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String = self.logMessage,
) = new ServerMiddlewareBuilder[F](
Expand All @@ -114,10 +119,14 @@ object ServerMiddleware {
responseAdditionalContext,
responseLogBody,
responseBodyMaxSize,
removedContextKeys,
logLevel,
logMessage
)

def withRemovedContextKeys(removedContextKeys: Set[String]) =
copy(removedContextKeys = removedContextKeys)

def withWillLog(willLog: Request[Pure] => F[Boolean]) =
copy(willLog = willLog)

Expand Down Expand Up @@ -151,11 +160,11 @@ object ServerMiddleware {
copy(respHeaders = respHeaders)

def httpApp(app: HttpApp[F]): HttpApp[F] =
if (requestLogBody || responseLogBody) httpAppWithBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, requestLogBody, requestBodyMaxSize, respHeaders, responseAdditionalContext, responseLogBody, responseBodyMaxSize, logLevel, logMessage)(app)
else httpAppNoBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, respHeaders, responseAdditionalContext, logLevel, logMessage)(app)
if (requestLogBody || responseLogBody) httpAppWithBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, requestLogBody, requestBodyMaxSize, respHeaders, responseAdditionalContext, responseLogBody, responseBodyMaxSize, removedContextKeys, logLevel, logMessage)(app)
else httpAppNoBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, respHeaders, responseAdditionalContext, removedContextKeys, logLevel, logMessage)(app)
def httpRoutes(routes: HttpRoutes[F]): HttpRoutes[F] =
if (requestLogBody || responseLogBody) httpRoutesWithBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, requestLogBody, requestBodyMaxSize, respHeaders, responseAdditionalContext, responseLogBody, responseBodyMaxSize, logLevel, logMessage)(routes)
else httpRoutesNoBody(logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, respHeaders, responseAdditionalContext, logLevel, logMessage)(routes)
if (requestLogBody || responseLogBody) httpRoutesWithBody[F](logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, requestLogBody, requestBodyMaxSize, respHeaders, responseAdditionalContext, responseLogBody, responseBodyMaxSize, removedContextKeys, logLevel, logMessage)(routes)
else httpRoutesNoBody(logger, willLog, routeClassifier, reqHeaders, requestAdditionalContext, requestIncludeUrl, respHeaders, responseAdditionalContext, removedContextKeys, logLevel, logMessage)(routes)

}

Expand All @@ -176,6 +185,7 @@ object ServerMiddleware {
responseLogBody: Boolean,
responseBodyMaxSize: Long,

removedContextKeys: Set[String],
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
)(routes: HttpApp[F]): HttpApp[F] = Kleisli{(req: Request[F]) =>
Expand Down Expand Up @@ -229,7 +239,7 @@ object ServerMiddleware {
outcome = Outcome.succeeded[Option, Throwable, Response[Pure]](respBodyFinal.fold(pureResp)(body => pureResp.withBodyStream(Stream.chunk(body))).some)
outcomeCtx = outcomeContext(outcome)
finalCtx = reqContext ++ responseCtx + outcomeCtx + duration ++ requestBodyCtx ++ responseBodyCtx
_ <- logLevelAware(logger, finalCtx, bodyPureReq, outcome, end, logLevel, logMessage)
_ <- logLevelAware(logger, finalCtx, bodyPureReq, outcome, end, removedContextKeys, logLevel, logMessage)
} yield ()
}
)
Expand All @@ -242,15 +252,15 @@ object ServerMiddleware {
val outcome = Outcome.canceled[Option, Throwable, Response[Pure]]
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
case Outcome.Errored(e) =>
Clock[F].realTime.flatMap{ end =>
val duration = "http.duration_ms" -> end.minus(start).toMillis.toString()
val outcome = Outcome.errored[Option, Throwable, Response[Pure]](e)
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
case Outcome.Succeeded(_) => Applicative[F].unit
}
Expand All @@ -277,6 +287,7 @@ object ServerMiddleware {
responseLogBody: Boolean,
responseBodyMaxSize: Long,

removedContextKeys: Set[String],
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
)(routes: HttpRoutes[F]): HttpRoutes[F] = Kleisli{(req: Request[F]) =>
Expand Down Expand Up @@ -331,7 +342,7 @@ object ServerMiddleware {
outcome = Outcome.succeeded[Option, Throwable, Response[Pure]](respBodyFinal.fold(pureResp)(body => pureResp.withBodyStream(Stream.chunk(body))).some)
outcomeCtx = outcomeContext(outcome)
finalCtx = reqContext ++ responseCtx + outcomeCtx + duration ++ requestBodyCtx ++ responseBodyCtx
_ <- logLevelAware(logger, finalCtx, newPureReq, outcome, end, logLevel, logMessage)
_ <- logLevelAware(logger, finalCtx, newPureReq, outcome, end, removedContextKeys, logLevel, logMessage)
} yield ()
}
).some.pure[F]
Expand All @@ -346,7 +357,7 @@ object ServerMiddleware {
outcome = Outcome.succeeded[Option, Throwable, Response[Pure]](None)
outcomeCtx = outcomeContext(outcome)
finalCtx = reqContext + outcomeCtx + duration ++ requestBodyCtx
_ <- logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
_ <- logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
} yield ()
action.as(Option.empty[Response[F]])
}
Expand All @@ -359,15 +370,15 @@ object ServerMiddleware {
val outcome = Outcome.canceled[Option, Throwable, Response[Pure]]
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
})
case Outcome.Errored(e) =>
OptionT.liftF(Clock[F].realTime.flatMap{ end =>
val duration = "http.duration_ms" -> end.minus(start).toMillis.toString()
val outcome = Outcome.errored[Option, Throwable, Response[Pure]](e)
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
})
case Outcome.Succeeded(fa) => OptionT.liftF(Applicative[F].unit)
}
Expand Down Expand Up @@ -404,6 +415,7 @@ object ServerMiddleware {
respHeaders: Set[CIString],
responseAdditionalContext: Response[Pure] => Map[String, String],

removedContextKeys: Set[String],
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
)(routes: HttpApp[F]): HttpApp[F] = Kleisli{(req: Request[F]) =>
Expand All @@ -422,15 +434,15 @@ object ServerMiddleware {
val outcome = Outcome.canceled[Option, Throwable, Response[Pure]]
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
case Outcome.Errored(e) =>
Clock[F].realTime.flatMap{ end =>
val duration = "http.duration_ms" -> end.minus(start).toMillis.toString()
val outcome = Outcome.errored[Option, Throwable, Response[Pure]](e)
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
case Outcome.Succeeded(fa) => fa.flatMap{
case resp =>
Expand All @@ -441,7 +453,7 @@ object ServerMiddleware {
val outcome = Outcome.succeeded[Option, Throwable, Response[Pure]](pureResp.some)
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext ++ responseCtx + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
}
}
Expand All @@ -464,6 +476,7 @@ object ServerMiddleware {
respHeaders: Set[CIString],
responseAdditionalContext: Response[Pure] => Map[String, String],

removedContextKeys: Set[String],
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
)(routes: HttpRoutes[F]): HttpRoutes[F] = Kleisli{(req: Request[F]) =>
Expand All @@ -485,7 +498,7 @@ object ServerMiddleware {
val outcome = Outcome.canceled[Option, Throwable, Response[Pure]]
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
}
case Outcome.Errored(e) =>
Expand All @@ -496,7 +509,7 @@ object ServerMiddleware {
val outcome = Outcome.errored[Option, Throwable, Response[Pure]](e)
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext+ outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
}
case Outcome.Succeeded(fa) => OptionT.liftF(fa.value.flatMap{
Expand All @@ -507,7 +520,7 @@ object ServerMiddleware {
val outcome = Outcome.succeeded[Option, Throwable, Response[Pure]](option.map(pureResponse))
val outcomeCtx = outcomeContext(outcome)
val finalCtx = reqContext ++ responseCtx + outcomeCtx + duration
logLevelAware(logger, finalCtx, pureReq, outcome, end, logLevel, logMessage)
logLevelAware(logger, finalCtx, pureReq, outcome, end, removedContextKeys, logLevel, logMessage)
}
})
}
Expand All @@ -534,31 +547,32 @@ object ServerMiddleware {
prelude: Request[Pure],
outcome: Outcome[Option, Throwable, Response[Pure]],
now: FiniteDuration,
removedContextKeys: Set[String],
logLevel: (Request[Pure], Outcome[Option, Throwable, Response[Pure]]) => Option[LogLevel],
logMessage: (Request[Pure], Outcome[Option, Throwable, Response[Pure]], FiniteDuration) => String,
): F[Unit] = {
(logLevel(prelude, outcome), outcome) match {
case (None, _) => Applicative[F].unit
case (Some(LogLevel.Trace), Outcome.Errored(e)) =>
logger.trace(ctx, e)(logMessage(prelude, outcome, now))
logger.trace(ctx -- removedContextKeys, e)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Trace), _) =>
logger.trace(ctx)(logMessage(prelude, outcome, now))
logger.trace(ctx -- removedContextKeys)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Debug), Outcome.Errored(e)) =>
logger.debug(ctx, e)(logMessage(prelude, outcome, now))
logger.debug(ctx -- removedContextKeys, e)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Debug), _) =>
logger.debug(ctx)(logMessage(prelude, outcome, now))
logger.debug(ctx -- removedContextKeys)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Info), Outcome.Errored(e)) =>
logger.info(ctx, e)(logMessage(prelude, outcome, now))
logger.info(ctx -- removedContextKeys, e)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Info), _) =>
logger.info(ctx)(logMessage(prelude, outcome, now))
logger.info(ctx -- removedContextKeys)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Warn), Outcome.Errored(e)) =>
logger.warn(ctx, e)(logMessage(prelude, outcome, now))
logger.warn(ctx -- removedContextKeys, e)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Warn), _) =>
logger.warn(ctx)(logMessage(prelude, outcome, now))
logger.warn(ctx -- removedContextKeys)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Error), Outcome.Errored(e)) =>
logger.error(ctx, e)(logMessage(prelude, outcome, now))
logger.error(ctx -- removedContextKeys, e)(logMessage(prelude, outcome, now))
case (Some(LogLevel.Error), _) =>
logger.error(ctx)(logMessage(prelude, outcome, now))
logger.error(ctx -- removedContextKeys)(logMessage(prelude, outcome, now))
}
}

Expand Down

0 comments on commit 210fddb

Please sign in to comment.