aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/trace/ExceptionLoggingSizedBufferingTraceConsumer.scala
blob: fd3a843d5892873d0596d3c6ef6066c7e2937507 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package xyz.driver.core.trace

import com.google.cloud.trace.v1.consumer.{FlushableTraceConsumer}
import com.google.devtools.cloudtrace.v1.Traces
import com.typesafe.scalalogging.Logger
import scala.util.Try

/**
  * ExceptionLoggingFlushableTraceConsumer simply wraps a flushable trace consumer and catches/logs any exceptions
  * @param traceConsumer the flusable trace consumer to wrap
  * @param log where to log any exceptions
  */
class ExceptionLoggingFlushableTraceConsumer(traceConsumer: FlushableTraceConsumer, log: Logger)
    extends FlushableTraceConsumer {

  private val flushableTraceConsumer = traceConsumer

  private def exceptionLogger(exception: Throwable): Unit =
    log.error(s"Encountered exception logging to google $exception")

  override def receive(trace: Traces): Unit =
    Try(flushableTraceConsumer.receive(trace)).recover({case e => exceptionLogger(e)}).get

  override def flush(): Unit =
    Try(flushableTraceConsumer.flush()).recover({case e => exceptionLogger(e)}).get
}