aboutsummaryrefslogtreecommitdiff
path: root/kamon-spray/src/test
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-07-23 15:08:59 -0300
committerIvan Topolnjak <ivantopo@gmail.com>2014-07-23 15:08:59 -0300
commit63f99d1f5cc7850fc7c559385b85fa1828d7cd79 (patch)
treeec38ed5146eedddd455d8525e7f9fa10679b8190 /kamon-spray/src/test
parent78badb3090a07fe6447255b6d3d690f0f8569feb (diff)
downloadKamon-63f99d1f5cc7850fc7c559385b85fa1828d7cd79.tar.gz
Kamon-63f99d1f5cc7850fc7c559385b85fa1828d7cd79.tar.bz2
Kamon-63f99d1f5cc7850fc7c559385b85fa1828d7cd79.zip
+ core,spray: create and implement http server metrics for spray, related to #56
Diffstat (limited to 'kamon-spray/src/test')
-rw-r--r--kamon-spray/src/test/scala/kamon/spray/SprayServerMetricsSpec.scala91
-rw-r--r--kamon-spray/src/test/scala/kamon/spray/SprayServerTracingSpec.scala (renamed from kamon-spray/src/test/scala/kamon/spray/ServerRequestInstrumentationSpec.scala)33
2 files changed, 93 insertions, 31 deletions
diff --git a/kamon-spray/src/test/scala/kamon/spray/SprayServerMetricsSpec.scala b/kamon-spray/src/test/scala/kamon/spray/SprayServerMetricsSpec.scala
new file mode 100644
index 00000000..c4b370d7
--- /dev/null
+++ b/kamon-spray/src/test/scala/kamon/spray/SprayServerMetricsSpec.scala
@@ -0,0 +1,91 @@
+package kamon.spray
+
+import akka.actor.ActorSystem
+import akka.testkit.{ TestProbe, TestKitBase }
+import com.typesafe.config.ConfigFactory
+import kamon.Kamon
+import kamon.http.HttpServerMetrics
+import kamon.metric._
+import org.scalatest.concurrent.{ PatienceConfiguration, ScalaFutures }
+import org.scalatest.{ Matchers, WordSpecLike }
+import spray.http.{ StatusCodes, HttpResponse, HttpRequest }
+import spray.httpx.RequestBuilding
+
+class SprayServerMetricsSpec extends TestKitBase with WordSpecLike with Matchers with RequestBuilding
+ with ScalaFutures with PatienceConfiguration with TestServer {
+
+ val collectionContext = CollectionContext(100)
+
+ implicit lazy val system: ActorSystem = ActorSystem("spray-server-metrics-spec", ConfigFactory.parseString(
+ """
+ |akka {
+ | loglevel = ERROR
+ |}
+ |
+ |kamon {
+ | metrics {
+ | tick-interval = 1 hour
+ |
+ | filters = [
+ | {
+ | trace {
+ | includes = [ "*" ]
+ | excludes = []
+ | }
+ | }
+ | ]
+ | }
+ |}
+ """.stripMargin))
+
+ "the Spray Server metrics instrumentation" should {
+ "record trace metrics for requests received" in {
+ Kamon(Metrics)(system).register(TraceMetrics("GET: /record-trace-metrics"), TraceMetrics.Factory).get.collect(collectionContext)
+ val (connection, server) = buildClientConnectionAndServer
+ val client = TestProbe()
+
+ for (repetition ← 1 to 10) {
+ client.send(connection, Get("/record-trace-metrics"))
+ server.expectMsgType[HttpRequest]
+ server.reply(HttpResponse(entity = "ok"))
+ client.expectMsgType[HttpResponse]
+ }
+
+ for (repetition ← 1 to 5) {
+ client.send(connection, Get("/record-trace-metrics"))
+ server.expectMsgType[HttpRequest]
+ server.reply(HttpResponse(entity = "bad-request", status = StatusCodes.BadRequest))
+ client.expectMsgType[HttpResponse]
+ }
+
+ val snapshot = Kamon(Metrics)(system).register(TraceMetrics("GET: /record-trace-metrics"), TraceMetrics.Factory).get.collect(collectionContext)
+ snapshot.elapsedTime.numberOfMeasurements should be(15)
+ }
+
+ "record http serve metrics for all the requests" in {
+ Kamon(Metrics)(system).register(HttpServerMetrics, HttpServerMetrics.Factory).get.collect(collectionContext)
+ val (connection, server) = buildClientConnectionAndServer
+ val client = TestProbe()
+
+ for (repetition ← 1 to 10) {
+ client.send(connection, Get("/record-http-metrics"))
+ server.expectMsgType[HttpRequest]
+ server.reply(HttpResponse(entity = "ok"))
+ client.expectMsgType[HttpResponse]
+ }
+
+ for (repetition ← 1 to 5) {
+ client.send(connection, Get("/record-http-metrics"))
+ server.expectMsgType[HttpRequest]
+ server.reply(HttpResponse(entity = "bad-request", status = StatusCodes.BadRequest))
+ client.expectMsgType[HttpResponse]
+ }
+
+ val snapshot = Kamon(Metrics)(system).register(HttpServerMetrics, HttpServerMetrics.Factory).get.collect(collectionContext)
+ snapshot.countsPerTraceAndStatusCode("GET: /record-http-metrics")("200").count should be(10)
+ snapshot.countsPerTraceAndStatusCode("GET: /record-http-metrics")("400").count should be(5)
+ snapshot.countsPerStatusCode("200").count should be(10)
+ snapshot.countsPerStatusCode("400").count should be(5)
+ }
+ }
+}
diff --git a/kamon-spray/src/test/scala/kamon/spray/ServerRequestInstrumentationSpec.scala b/kamon-spray/src/test/scala/kamon/spray/SprayServerTracingSpec.scala
index ab9116fd..48253b1d 100644
--- a/kamon-spray/src/test/scala/kamon/spray/ServerRequestInstrumentationSpec.scala
+++ b/kamon-spray/src/test/scala/kamon/spray/SprayServerTracingSpec.scala
@@ -30,10 +30,10 @@ import com.typesafe.config.ConfigFactory
import kamon.metric.TraceMetrics.ElapsedTime
import kamon.metric.instrument.Histogram
-class ServerRequestInstrumentationSpec extends TestKitBase with WordSpecLike with Matchers with RequestBuilding
+class SprayServerTracingSpec extends TestKitBase with WordSpecLike with Matchers with RequestBuilding
with ScalaFutures with PatienceConfiguration with TestServer {
- implicit lazy val system: ActorSystem = ActorSystem("client-pipelining-segment-strategy-instrumentation-spec", ConfigFactory.parseString(
+ implicit lazy val system: ActorSystem = ActorSystem("spray-server-tracing-spec", ConfigFactory.parseString(
"""
|akka {
| loglevel = ERROR
@@ -52,12 +52,6 @@ class ServerRequestInstrumentationSpec extends TestKitBase with WordSpecLike wit
| }
| ]
| }
- |
- | spray {
- | client {
- | segment-collection-strategy = internal
- | }
- | }
|}
""".stripMargin))
@@ -104,29 +98,6 @@ class ServerRequestInstrumentationSpec extends TestKitBase with WordSpecLike wit
response.headers should not contain (RawHeader(Kamon(Spray).traceTokenHeaderName, "propagation-disabled"))
}
-
- "open and finish a trace during the lifetime of a request" in {
- val (connection, server) = buildClientConnectionAndServer
- val client = TestProbe()
-
- val metricListener = TestProbe()
- Kamon(Metrics)(system).subscribe(TraceMetrics, "*", metricListener.ref, permanently = true)
- metricListener.expectMsgType[TickMetricSnapshot]
-
- client.send(connection, Get("/open-and-finish"))
- server.expectMsgType[HttpRequest]
- server.reply(HttpResponse(entity = "ok"))
- client.expectMsgType[HttpResponse]
-
- val tickSnapshot = metricListener.expectMsgType[TickMetricSnapshot]
- val traceMetrics = tickSnapshot.metrics.find { case (k, v) ⇒ k.name.contains("open-and-finish") } map (_._2.metrics)
- traceMetrics should not be empty
-
- traceMetrics map { metrics ⇒
- metrics(ElapsedTime).asInstanceOf[Histogram.Snapshot].numberOfMeasurements should be(1L)
- }
- }
-
}
def enableAutomaticTraceTokenPropagation(): Unit = setIncludeTraceToken(true)