From e1a911cac43654ca20b4cf42290c61de1dc78079 Mon Sep 17 00:00:00 2001
From: Marcio Diaz <marcio.diaz@gmail.com>
Date: Tue, 26 Nov 2019 18:17:34 +0100
Subject: [PATCH] Add receiver for Grafana (#4211)

---
 substrate/Cargo.lock                |  1 +
 substrate/client/cli/src/params.rs  |  2 ++
 substrate/client/tracing/Cargo.toml |  1 +
 substrate/client/tracing/src/lib.rs | 12 ++++++++++--
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock
index 7bf2fcba019..32995ac322c 100644
--- a/substrate/Cargo.lock
+++ b/substrate/Cargo.lock
@@ -6578,6 +6578,7 @@ dependencies = [
 name = "substrate-tracing"
 version = "2.0.0"
 dependencies = [
+ "grafana-data-source 2.0.0",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "substrate-telemetry 2.0.0",
diff --git a/substrate/client/cli/src/params.rs b/substrate/client/cli/src/params.rs
index 1324d3419f8..09a18db2078 100644
--- a/substrate/client/cli/src/params.rs
+++ b/substrate/client/cli/src/params.rs
@@ -265,6 +265,7 @@ arg_enum! {
 	pub enum TracingReceiver {
 		Log,
 		Telemetry,
+		Grafana,
 	}
 }
 
@@ -273,6 +274,7 @@ impl Into<substrate_tracing::TracingReceiver> for TracingReceiver {
 		match self {
 			TracingReceiver::Log => substrate_tracing::TracingReceiver::Log,
 			TracingReceiver::Telemetry => substrate_tracing::TracingReceiver::Telemetry,
+			TracingReceiver::Grafana => substrate_tracing::TracingReceiver::Grafana,
 		}
 	}
 }
diff --git a/substrate/client/tracing/Cargo.toml b/substrate/client/tracing/Cargo.toml
index 25a1a7331be..431889cbec6 100644
--- a/substrate/client/tracing/Cargo.toml
+++ b/substrate/client/tracing/Cargo.toml
@@ -11,6 +11,7 @@ parking_lot = "0.9.0"
 tracing-core = "0.1.7"
 
 substrate-telemetry = { path = "../telemetry" }
+grafana-data-source = { path = "../grafana-data-source" }
 
 [dev-dependencies]
 tracing = "0.1.10"
diff --git a/substrate/client/tracing/src/lib.rs b/substrate/client/tracing/src/lib.rs
index d6fc4a6418d..664d5bf7a94 100644
--- a/substrate/client/tracing/src/lib.rs
+++ b/substrate/client/tracing/src/lib.rs
@@ -39,6 +39,7 @@ use parking_lot::Mutex;
 use tracing_core::{event::Event, Level, metadata::Metadata, span::{Attributes, Id, Record}, subscriber::Subscriber};
 
 use substrate_telemetry::{telemetry, SUBSTRATE_INFO};
+use grafana_data_source::{self, record_metrics};
 
 /// Used to configure how to receive the metrics
 #[derive(Debug, Clone)]
@@ -47,6 +48,8 @@ pub enum TracingReceiver {
 	Log,
 	/// Output to telemetry
 	Telemetry,
+	/// Output to Grafana,
+	Grafana,
 }
 
 impl Default for TracingReceiver {
@@ -59,7 +62,7 @@ impl Default for TracingReceiver {
 struct SpanDatum {
 	id: u64,
 	name: &'static str,
-	target: String,
+	target: &'static str,
 	level: Level,
 	line: u32,
 	start_time: Instant,
@@ -124,7 +127,7 @@ impl Subscriber for ProfilingSubscriber {
 		let span_datum = SpanDatum {
 			id: id,
 			name: attrs.metadata().name(),
-			target: attrs.metadata().target().to_string(),
+			target: attrs.metadata().target(),
 			level: attrs.metadata().level().clone(),
 			line: attrs.metadata().line().unwrap_or(0),
 			start_time: Instant::now(),
@@ -172,6 +175,7 @@ impl ProfilingSubscriber {
 		match self.receiver {
 			TracingReceiver::Log => print_log(span_datum),
 			TracingReceiver::Telemetry => send_telemetry(span_datum),
+			TracingReceiver::Grafana => send_grafana(span_datum),
 		}
 	}
 }
@@ -196,3 +200,7 @@ fn send_telemetry(span_datum: SpanDatum) {
 		"time" => span_datum.overall_time.as_nanos(),
 	);
 }
+
+fn send_grafana(span_datum: SpanDatum) {
+	record_metrics!(span_datum.target => span_datum.overall_time.as_nanos());
+}
-- 
GitLab