aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/core/trace/ExceptionLoggingSizedBufferingTraceConsumer.scala
blob: 399e2c68c78cade2aed51f6e3b75d27846645ec8 (plain) (tree)
1
2
3
4
5
6
7

                             
                                                                

                                               
 
                                  











                                                                                                                  
                                                                    

                                             




                                            

                              




                                            
 
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.control.NonFatal

/**
  * 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)
    } catch {
      case NonFatal(e) => exceptionLogger(e)
    }

  override def flush(): Unit =
    try {
      flushableTraceConsumer.flush()
    } catch {
      case NonFatal(e) => exceptionLogger(e)
    }
}