diff options
Diffstat (limited to 'kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala')
-rw-r--r-- | kamon-newrelic/src/main/scala/kamon/newrelic/AgentJsonProtocol.scala | 56 |
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 + ) + } +} |