|  | @@ -35,6 +35,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include <grpc/support/log.h>
 | 
	
		
			
				|  |  |  #include "test/cpp/qps/stats.h"
 | 
	
		
			
				|  |  | +#include "user_data_client.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace grpc {
 | 
	
		
			
				|  |  |  namespace testing {
 | 
	
	
		
			
				|  | @@ -120,5 +121,107 @@ void GprLogReporter::ReportTimes(const ScenarioResult& result) const {
 | 
	
		
			
				|  |  |                    [](ResourceUsage u) { return u.wall_time; }));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +UserDataClient userDataClient(grpc::CreateChannel("localhost:50052", grpc::InsecureCredentials(),
 | 
	
		
			
				|  |  | +                          ChannelArguments()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//Leaderboard Reported implementation.
 | 
	
		
			
				|  |  | +void UserDatabaseReporter::ReportQPS(const ScenarioResult& result) const {
 | 
	
		
			
				|  |  | +  double qps = result.latencies.Count() /
 | 
	
		
			
				|  |  | +              average(result.client_resources,
 | 
	
		
			
				|  |  | +                      [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  userDataClient.setAccessToken(access_token_);
 | 
	
		
			
				|  |  | +  userDataClient.setQPS(qps);
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  int userDataState = userDataClient.sendDataIfReady();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  switch(userDataState) {
 | 
	
		
			
				|  |  | +    case 1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data sent to user database successfully");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +    case -1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data could not be sent to user database");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void UserDatabaseReporter::ReportQPSPerCore(const ScenarioResult& result,
 | 
	
		
			
				|  |  | +                                      const ServerConfig& server_config) const {
 | 
	
		
			
				|  |  | +  double qps = result.latencies.Count() /
 | 
	
		
			
				|  |  | +              average(result.client_resources,
 | 
	
		
			
				|  |  | +                      [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  double qpsPerCore = qps / server_config.threads();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  userDataClient.setAccessToken(access_token_);
 | 
	
		
			
				|  |  | +  //TBD
 | 
	
		
			
				|  |  | +  userDataClient.setQPSPerCore(qpsPerCore);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  int userDataState = userDataClient.sendDataIfReady();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  switch(userDataState) {
 | 
	
		
			
				|  |  | +    case 1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data sent to user database successfully");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +    case -1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data could not be sent to user database");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void UserDatabaseReporter::ReportLatency(const ScenarioResult& result) const {
 | 
	
		
			
				|  |  | +  userDataClient.setAccessToken(access_token_);
 | 
	
		
			
				|  |  | +  userDataClient.setLatencies(result.latencies.Percentile(50) / 1000,
 | 
	
		
			
				|  |  | +                                 result.latencies.Percentile(90) / 1000,
 | 
	
		
			
				|  |  | +                                 result.latencies.Percentile(95) / 1000,
 | 
	
		
			
				|  |  | +                                 result.latencies.Percentile(99) / 1000,
 | 
	
		
			
				|  |  | +                                 result.latencies.Percentile(99.9) / 1000);
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  int userDataState = userDataClient.sendDataIfReady();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  switch(userDataState) {
 | 
	
		
			
				|  |  | +    case 1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data sent to user database successfully");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +    case -1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data could not be sent to user database");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void UserDatabaseReporter::ReportTimes(const ScenarioResult& result) const {
 | 
	
		
			
				|  |  | +  double serverSystemTime = 100.0 * sum(result.server_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.system_time; }) /
 | 
	
		
			
				|  |  | +                    sum(result.server_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +  double serverUserTime = 100.0 * sum(result.server_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.user_time; }) /
 | 
	
		
			
				|  |  | +                    sum(result.server_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +  double clientSystemTime = 100.0 * sum(result.client_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.system_time; }) /
 | 
	
		
			
				|  |  | +                    sum(result.client_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +  double clientUserTime = 100.0 * sum(result.client_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.user_time; }) /
 | 
	
		
			
				|  |  | +                    sum(result.client_resources,
 | 
	
		
			
				|  |  | +                  [](ResourceUsage u) { return u.wall_time; });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  userDataClient.setAccessToken(access_token_);
 | 
	
		
			
				|  |  | +  userDataClient.setTimes(serverSystemTime, serverUserTime, 
 | 
	
		
			
				|  |  | +    clientSystemTime, clientUserTime);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  int userDataState = userDataClient.sendDataIfReady();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  switch(userDataState) {
 | 
	
		
			
				|  |  | +    case 1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data sent to user database successfully");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +    case -1:
 | 
	
		
			
				|  |  | +      gpr_log(GPR_INFO, "Data could not be sent to user database");
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }  // namespace testing
 | 
	
		
			
				|  |  |  }  // namespace grpc
 |