platform/statistic/set_random_data.cpp (58 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <array>
#include <chrono>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
std::string Exec(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
auto pipe = popen(cmd, "r"); // get rid of shared_ptr
if (!pipe) throw std::runtime_error("popen() failed!");
while (!feof(pipe)) {
if (fgets(buffer.data(), 128, pipe) != nullptr) result += buffer.data();
}
auto rc = pclose(pipe);
if (rc == EXIT_SUCCESS) { // == 0
} else if (rc == EXIT_FAILURE) { // EXIT_FAILURE is not used by all programs,
// maybe needs some adaptation.
}
return result;
}
int main(int argc, char** argv) {
if (argc < 3) {
printf("<test/loop> <value> \n");
return 0;
}
std::string command = argv[1];
std::string value = argv[2];
std::string output = "";
int count = 0;
if (command == "test") {
for (int i = 0; i < std::stoi(value); i++) {
std::stringstream ss;
ss << " bazel-bin/service/tools/kv/api_tools/kv_service_tools --config "
"service/tools/config/interface/service.config --cmd set "
<< "--key key" << (std::rand() % 500) << " " << "--value value"
<< (std::rand() % 500);
std::string test = ss.str();
output = Exec(test.c_str());
std::cout << i << " " << output << std::endl;
}
} else if (command == "loop") {
while (1) {
std::string test =
"/home/jyu25/nexres/bazel-bin/example/kv_server_tools "
"/home/jyu25/nexres/example/kv_client_config.config set " +
std::to_string(std::rand() % 500) + " " +
std::to_string(std::rand() % 500);
output = Exec(test.c_str());
std::cout << ++count << " " << output << std::endl;
}
}
return 0;
}