| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | /* * * Copyright 2015, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * *     * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. *     * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. *     * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */#include "test/cpp/qps/perf_db_client.h"namespace grpc {namespace testing {// sets the client and server config informationvoid PerfDbClient::setConfigs(const ClientConfig& clientConfig,                              const ServerConfig& serverConfig) {  this->clientConfig_ = clientConfig;  this->serverConfig_ = serverConfig;}// sets the QPSvoid PerfDbClient::setQPS(double QPS) { this->QPS_ = QPS; }// sets the QPS per corevoid PerfDbClient::setQPSPerCore(double QPSPerCore) {  this->QPSPerCore_ = QPSPerCore;}// sets the 50th, 90th, 95th, 99th and 99.9th percentile latencyvoid PerfDbClient::setLatencies(double percentileLatency50,                                double percentileLatency90,                                double percentileLatency95,                                double percentileLatency99,                                double percentileLatency99Point9) {  this->percentileLatency50_ = percentileLatency50;  this->percentileLatency90_ = percentileLatency90;  this->percentileLatency95_ = percentileLatency95;  this->percentileLatency99_ = percentileLatency99;  this->percentileLatency99Point9_ = percentileLatency99Point9;}// sets the server and client, user and system timesvoid PerfDbClient::setTimes(double serverSystemTime, double serverUserTime,                            double clientSystemTime, double clientUserTime) {  this->serverSystemTime_ = serverSystemTime;  this->serverUserTime_ = serverUserTime;  this->clientSystemTime_ = clientSystemTime;  this->clientUserTime_ = clientUserTime;}// sends the data to the performance database serverbool PerfDbClient::sendData(std::string access_token, std::string test_name,                            std::string sys_info, std::string tag) {  // Data record request object  SingleUserRecordRequest singleUserRecordRequest;  // setting access token, name of the test and the system information  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_;  *(singleUserRecordRequest.mutable_server_config()) = this->serverConfig_;  Metrics* metrics = singleUserRecordRequest.mutable_metrics();  // setting metrcs in data record request  if (QPS_ != DBL_MIN) {    metrics->set_qps(this->QPS_);  }  if (QPSPerCore_ != DBL_MIN) {    metrics->set_qps_per_core(this->QPSPerCore_);  }  if (percentileLatency50_ != DBL_MIN) {    metrics->set_perc_lat_50(this->percentileLatency50_);  }  if (percentileLatency90_ != DBL_MIN) {    metrics->set_perc_lat_90(this->percentileLatency90_);  }  if (percentileLatency95_ != DBL_MIN) {    metrics->set_perc_lat_95(this->percentileLatency95_);  }  if (percentileLatency99_ != DBL_MIN) {    metrics->set_perc_lat_99(this->percentileLatency99_);  }  if (percentileLatency99Point9_ != DBL_MIN) {    metrics->set_perc_lat_99_point_9(this->percentileLatency99Point9_);  }  if (serverSystemTime_ != DBL_MIN) {    metrics->set_server_system_time(this->serverSystemTime_);  }  if (serverUserTime_ != DBL_MIN) {    metrics->set_server_user_time(this->serverUserTime_);  }  if (clientSystemTime_ != DBL_MIN) {    metrics->set_client_system_time(this->clientSystemTime_);  }  if (clientUserTime_ != DBL_MIN) {    metrics->set_client_user_time(this->clientUserTime_);  }  SingleUserRecordReply singleUserRecordReply;  ClientContext context;  Status status = stub_->RecordSingleClientData(      &context, singleUserRecordRequest, &singleUserRecordReply);  if (status.ok()) {    return true;  // data sent to database successfully  } else {    return false;  // error in data sending  }}}  // testing}  // grpc
 |