Added support for passing a tag with the test
diff --git a/test/cpp/qps/perf_db.proto b/test/cpp/qps/perf_db.proto
index 50070fd..7f4a460 100644
--- a/test/cpp/qps/perf_db.proto
+++ b/test/cpp/qps/perf_db.proto
@@ -62,9 +62,10 @@
   string timestamp = 1;
   string test_name = 2;
   string sys_info = 3;
-  Metrics metrics = 4;
-  ClientConfig client_config = 5;
-  ServerConfig server_config = 6;
+  string tag = 4;
+  Metrics metrics = 5;
+  ClientConfig client_config = 6;
+  ServerConfig server_config = 7;
 }
 
 //User details
@@ -93,9 +94,10 @@
   string access_token = 1;
   string test_name = 2;
   string sys_info = 3;
-  Metrics metrics = 4;
-  ClientConfig client_config = 5;
-  ServerConfig server_config = 6;
+  string tag = 4;
+  Metrics metrics = 5;
+  ClientConfig client_config = 6;
+  ServerConfig server_config = 7;
 }
 
 //Reply to request for storing single user's data
diff --git a/test/cpp/qps/perf_db_client.cc b/test/cpp/qps/perf_db_client.cc
index 0905cde..c3a170b 100644
--- a/test/cpp/qps/perf_db_client.cc
+++ b/test/cpp/qps/perf_db_client.cc
@@ -72,7 +72,7 @@
 }
 
 //sends the data to the performancew database server
-int PerfDbClient::sendData(std::string access_token, std::string test_name, std::string sys_info) {
+int PerfDbClient::sendData(std::string access_token, std::string test_name, std::string sys_info, std::string tag) {
   //Data record request object
   SingleUserRecordRequest singleUserRecordRequest;
 
@@ -80,6 +80,7 @@
   singleUserRecordRequest.set_access_token(access_token);
   singleUserRecordRequest.set_test_name(test_name);
   singleUserRecordRequest.set_sys_info(sys_info);
+  singleUserRecordRequest.set_tag(tag);
 
   //setting configs
   *(singleUserRecordRequest.mutable_client_config()) = this->clientConfig_;
diff --git a/test/cpp/qps/perf_db_client.h b/test/cpp/qps/perf_db_client.h
index c19442f..be4766a 100644
--- a/test/cpp/qps/perf_db_client.h
+++ b/test/cpp/qps/perf_db_client.h
@@ -88,7 +88,7 @@
     double clientSystemTime, double clientUserTime);
 
   //sends the data to the performancew database server
-  int sendData(std::string access_token, std::string test_name, std::string sys_info);
+  int sendData(std::string access_token, std::string test_name, std::string sys_info, std::string tag);
 
 private:
   std::unique_ptr<PerfDbTransfer::Stub> stub_;
diff --git a/test/cpp/qps/report.cc b/test/cpp/qps/report.cc
index 59c0da3..7167d4e 100644
--- a/test/cpp/qps/report.cc
+++ b/test/cpp/qps/report.cc
@@ -173,7 +173,7 @@
 
 void PerfDbReporter::SendData() {
   //send data to performance database
-  int dataState = perfDbClient_.sendData(access_token_, test_name_, sys_info_);
+  int dataState = perfDbClient_.sendData(access_token_, test_name_, sys_info_, tag_);
 
   //check state of data sending
   switch(dataState) {
diff --git a/test/cpp/qps/report.h b/test/cpp/qps/report.h
index bba26b9..5655906 100644
--- a/test/cpp/qps/report.h
+++ b/test/cpp/qps/report.h
@@ -107,8 +107,9 @@
 /** Reporter for performance database tool */
 class PerfDbReporter : public Reporter {
  public:
-  PerfDbReporter(const string& name, const string& access_token, const string& test_name, const string& sys_info, const string& server_address)
-   : Reporter(name), access_token_(access_token), test_name_(test_name), sys_info_(sys_info) {
+  PerfDbReporter(const string& name, const string& access_token, const string& test_name, 
+    const string& sys_info, const string& server_address, const string& tag)
+   : Reporter(name), access_token_(access_token), test_name_(test_name), sys_info_(sys_info), tag_(tag) {
     perfDbClient_.init(grpc::CreateChannel(server_address, grpc::InsecureCredentials(), ChannelArguments()));
   }
   ~PerfDbReporter() { SendData(); };
@@ -118,6 +119,7 @@
   std::string access_token_;
   std::string test_name_;
   std::string sys_info_;
+  std::string tag_;
   void ReportQPS(const ScenarioResult& result) GRPC_OVERRIDE;
   void ReportQPSPerCore(const ScenarioResult& result) GRPC_OVERRIDE;
   void ReportLatency(const ScenarioResult& result) GRPC_OVERRIDE;
diff --git a/test/cpp/util/benchmark_config.cc b/test/cpp/util/benchmark_config.cc
index f8cfabd..030cb28 100644
--- a/test/cpp/util/benchmark_config.cc
+++ b/test/cpp/util/benchmark_config.cc
@@ -47,6 +47,8 @@
 
 DEFINE_string(server_address, "localhost:50052", "Address of the performance database server");
 
+DEFINE_string(tag, "", "Optional tag for the test");
+
 // In some distros, gflags is in the namespace google, and in some others,
 // in gflags. This hack is enabling us to find both.
 namespace google {}
@@ -69,7 +71,8 @@
   }
   if(FLAGS_report_metrics_db) {
     composite_reporter->add(
-      std::unique_ptr<Reporter>(new PerfDbReporter("PerfDbReporter", FLAGS_access_token, FLAGS_test_name, FLAGS_sys_info, FLAGS_server_address)));
+      std::unique_ptr<Reporter>(new PerfDbReporter("PerfDbReporter", FLAGS_access_token, FLAGS_test_name, 
+        FLAGS_sys_info, FLAGS_server_address, FLAGS_tag)));
   }
 
   return std::shared_ptr<Reporter>(composite_reporter);