@@ -19,6 +19,7 @@ public class SysbenchMetricsParser : MetricsParser
1919 private const string ReconnectsPerSecond = "reconnects/sec" ;
2020 private const string Second = "seconds" ;
2121 private const string MilliSecond = "milliseconds" ;
22+ private Dictionary < string , IConvertible > metricMetadata = new Dictionary < string , IConvertible > ( ) ;
2223
2324 /// <summary>
2425 /// Constructor for <see cref="SysbenchMetricsParser"/>
@@ -32,29 +33,32 @@ public SysbenchMetricsParser(string rawText)
3233 /// <inheritdoc/>
3334 public override IList < Metric > Parse ( )
3435 {
36+ var match = Regex . Match ( this . RawText , @"sysbench\s+([\d\.]+-[\w\d]+)" ) ;
37+ string sysbenchversion = match . Success ? match . Groups [ 1 ] . Value : string . Empty ;
38+ this . metricMetadata [ "sysbench_version" ] = sysbenchversion ;
3539 this . Preprocess ( ) ;
3640 List < Metric > metrics = new List < Metric > ( ) ;
3741
3842 // Create list of Metrics Info
3943 List < MetricInfo > metricInfoList = new List < MetricInfo > ( )
4044 {
41- new MetricInfo ( "# read queries" , string . Empty , MetricRelativity . HigherIsBetter ) ,
42- new MetricInfo ( "# write queries" , string . Empty , MetricRelativity . HigherIsBetter ) ,
43- new MetricInfo ( "# other queries" , string . Empty , MetricRelativity . HigherIsBetter ) ,
44- new MetricInfo ( "# transactions" , string . Empty , MetricRelativity . HigherIsBetter ) ,
45- new MetricInfo ( "transactions/sec" , TransactionsPerSecond , MetricRelativity . HigherIsBetter ) ,
46- new MetricInfo ( "# queries" , string . Empty , MetricRelativity . HigherIsBetter ) ,
47- new MetricInfo ( "queries/sec" , QueriesPerSecond , MetricRelativity . HigherIsBetter ) ,
48- new MetricInfo ( "# ignored errors" , string . Empty , MetricRelativity . HigherIsBetter ) ,
49- new MetricInfo ( "ignored errors/sec" , IgnoredErrorsPerSecond , MetricRelativity . HigherIsBetter ) ,
50- new MetricInfo ( "# reconnects" , string . Empty , MetricRelativity . HigherIsBetter ) ,
51- new MetricInfo ( "reconnects/sec" , ReconnectsPerSecond , MetricRelativity . HigherIsBetter ) ,
52- new MetricInfo ( "elapsed time" , Second , MetricRelativity . LowerIsBetter ) ,
53- new MetricInfo ( "latency min" , MilliSecond , MetricRelativity . LowerIsBetter ) ,
54- new MetricInfo ( "latency avg" , MilliSecond , MetricRelativity . LowerIsBetter ) ,
55- new MetricInfo ( "latency max" , MilliSecond , MetricRelativity . LowerIsBetter ) ,
56- new MetricInfo ( "latency p95" , MilliSecond , MetricRelativity . LowerIsBetter ) ,
57- new MetricInfo ( "latency sum" , MilliSecond , MetricRelativity . LowerIsBetter ) ,
45+ new MetricInfo ( "# read queries" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
46+ new MetricInfo ( "# write queries" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
47+ new MetricInfo ( "# other queries" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
48+ new MetricInfo ( "# transactions" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
49+ new MetricInfo ( "transactions/sec" , TransactionsPerSecond , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
50+ new MetricInfo ( "# queries" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
51+ new MetricInfo ( "queries/sec" , QueriesPerSecond , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
52+ new MetricInfo ( "# ignored errors" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
53+ new MetricInfo ( "ignored errors/sec" , IgnoredErrorsPerSecond , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
54+ new MetricInfo ( "# reconnects" , string . Empty , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
55+ new MetricInfo ( "reconnects/sec" , ReconnectsPerSecond , MetricRelativity . HigherIsBetter , metadata : this . metricMetadata ) ,
56+ new MetricInfo ( "elapsed time" , Second , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
57+ new MetricInfo ( "latency min" , MilliSecond , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
58+ new MetricInfo ( "latency avg" , MilliSecond , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
59+ new MetricInfo ( "latency max" , MilliSecond , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
60+ new MetricInfo ( "latency p95" , MilliSecond , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
61+ new MetricInfo ( "latency sum" , MilliSecond , MetricRelativity . LowerIsBetter , metadata : this . metricMetadata ) ,
5862 } ;
5963
6064 if ( ! string . IsNullOrEmpty ( this . PreprocessedText ) )
@@ -84,7 +88,7 @@ public override IList<Metric> Parse()
8488 {
8589 MetricInfo metricInfo = metricInfoList [ metricInfoIndex ] ;
8690 Match m = mc [ mcIndex ] ;
87- metrics . Add ( new Metric ( $ "{ metricInfo . Name } ", Convert . ToDouble ( m . Value ) , metricInfo . Unit , metricInfo . Relativity ) ) ;
91+ metrics . Add ( new Metric ( $ "{ metricInfo . Name } ", Convert . ToDouble ( m . Value ) , metricInfo . Unit , metricInfo . Relativity , metadata : metricInfo . Metadata ) ) ;
8892 metricInfoIndex ++ ;
8993 }
9094
@@ -107,18 +111,21 @@ protected override void Preprocess()
107111 // helper class that contains Metric Name, Unit, and Relativity
108112 private class MetricInfo
109113 {
110- public MetricInfo ( string name , string unit , MetricRelativity relativity )
114+ public MetricInfo ( string name , string unit , MetricRelativity relativity , Dictionary < string , IConvertible > metadata )
111115 {
112116 this . Name = name ;
113117 this . Unit = unit ;
114118 this . Relativity = relativity ;
119+ this . Metadata = metadata ;
115120 }
116121
117122 public string Name { get ; set ; }
118123
119124 public string Unit { get ; set ; }
120125
121126 public MetricRelativity Relativity { get ; set ; }
127+
128+ public Dictionary < string , IConvertible > Metadata { get ; set ; }
122129 }
123130 }
124131}
0 commit comments