aboutsummaryrefslogtreecommitdiff
path: root/kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala')
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala56
1 files changed, 56 insertions, 0 deletions
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala
new file mode 100644
index 00000000..30e17e77
--- /dev/null
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala
@@ -0,0 +1,56 @@
+package kamon.newrelic
+
+import spray.json._
+import kamon.newrelic.Agent._
+
+object AgentJsonProtocol extends DefaultJsonProtocol {
+
+ implicit object ConnectJsonWriter extends RootJsonWriter[AgentInfo] {
+ def write(obj: AgentInfo): JsValue =
+ JsArray(
+ JsObject(
+ "agent_version" -> JsString("3.1.0"),
+ "app_name" -> JsArray(JsString(obj.appName)),
+ "host" -> JsString(obj.host),
+ "identifier" -> JsString(s"java:${obj.appName}"),
+ "language" -> JsString("java"),
+ "pid" -> JsNumber(obj.pid)
+ )
+ )
+ }
+
+ import NewRelicMetric._
+
+ implicit def listWriter[T : JsonWriter] = new JsonWriter[List[T]] {
+ def write(list: List[T]) = JsArray(list.map(_.toJson))
+ }
+
+ implicit object MetricDetailWriter extends JsonWriter[(ID, Data)] {
+ def write(obj: (ID, Data)): JsValue = {
+ val (id, data) = obj
+ JsArray(
+ JsObject(
+ "name" -> JsString(id.name) // TODO Include scope
+ ),
+ JsArray(
+ JsNumber(data.total),
+ JsNumber(data.totalExclusive),
+ JsNumber(data.min),
+ JsNumber(data.max),
+ JsNumber(data.sumOfSquares),
+ JsNumber(data.callCount)
+ )
+ )
+ }
+ }
+
+ implicit object MetricDataWriter extends RootJsonWriter[MetricData] {
+ def write(obj: MetricData): JsValue =
+ JsArray(
+ JsNumber(obj.runId),
+ JsNumber(obj.start),
+ JsNumber(obj.end),
+ obj.metrics.toJson
+ )
+ }
+}