blob: 1ff8d10ea04a9b87674c93148b4ad4b59248d773 (
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package xyz.driver.core.trace
import java.io.FileInputStream
import java.nio.file.{Files, Paths}
import java.util
import akka.http.scaladsl.model.HttpRequest
import com.google.auth.oauth2.GoogleCredentials
import com.google.cloud.trace.grpc.v1.GrpcTraceConsumer
import com.google.cloud.trace.v1.consumer.TraceConsumer
import com.typesafe.scalalogging.Logger
final class GoogleStackdriverTrace(projectId: String,
clientSecretsFile: String,
appName: String,
appEnvironment: String,
log: Logger)
extends GoogleServiceTracer {
// initialize our various tracking storage systems
private val clientSecretsInputStreamOpt: Option[FileInputStream] = if (Files.exists(Paths.get(clientSecretsFile))) {
Some(new FileInputStream(clientSecretsFile))
} else {
None
}
// if the google credentials are invalid, just log the traces
private val traceConsumer: TraceConsumer = clientSecretsInputStreamOpt.fold[TraceConsumer] {
log.warn(s"Google credentials not found in path: $clientSecretsFile")
new LoggingTraceConsumer(log)
} { clientSecretsInputStream =>
GrpcTraceConsumer
.create(
"cloudtrace.googleapis.com",
GoogleCredentials
.fromStream(clientSecretsInputStream)
.createScoped(util.Arrays.asList("https://www.googleapis.com/auth/trace.append"))
)
}
private val googleServiceTracer =
new GoogleStackdriverTraceWithConsumer(projectId, appName, appEnvironment, traceConsumer)
override def startSpan(httpRequest: HttpRequest): GoogleStackdriverTraceSpan =
googleServiceTracer.startSpan(httpRequest)
override def endSpan(span: GoogleStackdriverTraceSpan): Unit = googleServiceTracer.endSpan(span)
}
|