This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new bd020685cf Cleanup of the rate_limit simulator (#10728)
bd020685cf is described below
commit bd020685cf8a779759a1e22c875d83549b9429be
Author: Leif Hedstrom <[email protected]>
AuthorDate: Sun Nov 5 16:23:39 2023 -0700
Cleanup of the rate_limit simulator (#10728)
---
plugins/experimental/rate_limit/ip_reputation.cc | 4 +-
plugins/experimental/rate_limit/iprep_simu.cc | 71 ++++++++++++------------
2 files changed, 38 insertions(+), 37 deletions(-)
diff --git a/plugins/experimental/rate_limit/ip_reputation.cc
b/plugins/experimental/rate_limit/ip_reputation.cc
index 0bb183785f..29c03f0f20 100644
--- a/plugins/experimental/rate_limit/ip_reputation.cc
+++ b/plugins/experimental/rate_limit/ip_reputation.cc
@@ -299,7 +299,7 @@ SieveLru::dump()
TSAssert(_initialized);
for (uint32_t i = 0; i < _num_buckets + 1; ++i) {
- long long cnt = 0, sum = 0;
+ int64_t cnt = 0, sum = 0;
auto lru = _buckets[i];
std::cout << '\n' << "Dumping bucket " << i << " (size=" << lru->size() <<
", max_size=" << lru->max_size() << ")" << '\n';
@@ -310,7 +310,7 @@ SieveLru::dump()
sum += count;
#if 0
if (0 == i) { // Also dump the content of the top bucket
- std::cout << "\t" << key << "; Count=" << count << ", Bucket=" <<
bucket << std::endl;
+ std::cout << "\t" << key << "; Count=" << count << ", Bucket=" <<
bucket << "\n";
}
#endif
}
diff --git a/plugins/experimental/rate_limit/iprep_simu.cc
b/plugins/experimental/rate_limit/iprep_simu.cc
index 2b3d33e18b..407576feab 100644
--- a/plugins/experimental/rate_limit/iprep_simu.cc
+++ b/plugins/experimental/rate_limit/iprep_simu.cc
@@ -71,7 +71,7 @@ splitArg(std::string str)
end = start;
}
} else {
- std::cerr << "Malformed argument: " << str << std::endl;
+ std::cerr << "Malformed argument: " << str << "\n";
}
return {start, end, incr};
@@ -108,11 +108,11 @@ parseArgs(int argc, char **argv)
switch (c) {
case 'h':
case '?':
- std::cerr << "usage: iprep_simu -b|--buckets <size>[-<end bucket
range>[/<increment>]]" << std::endl;
- std::cerr << " -s|--size <bucket size>[-<end bucket
size range>[/<increment>]]" << std::endl;
- std::cerr << " -t|--threshold <bucket num>[-<end bucket
num range>[/<increment>]]" << std::endl;
- std::cerr << " [-p|--perma <permablock>[-<end
permablock range>[/<increment>]]]" << std::endl;
- std::cerr << " [-h|--help" << std::endl;
+ std::cerr << "usage: iprep_simu -b|--buckets <size>[-<end bucket
range>[/<increment>]]\n";
+ std::cerr << " -s|--size <bucket size>[-<end bucket
size range>[/<increment>]]\n";
+ std::cerr << " -t|--threshold <bucket num>[-<end bucket
num range>[/<increment>]]\n";
+ std::cerr << " [-p|--perma <permablock>[-<end
permablock range>[/<increment>]]]\n";
+ std::cerr << " [-h|--help\n";
exit(0);
break;
case 'b':
@@ -186,13 +186,13 @@ loadFile(const std::string &fname, IpMap &all_ips, IpList
&ips)
}
std::cout << std::setprecision(3);
- std::cout << "Total number of requests: " << ips.size() << std::endl;
- std::cout << "\tGood requests: " << good_requests << " (" << 100.0 *
good_requests / ips.size() << "%)" << std::endl;
- std::cout << "\tBad requests: " << bad_requests << " (" << 100.0 *
bad_requests / ips.size() << "%)" << std::endl;
- std::cout << "Unique IPs in set: " << all_ips.size() << std::endl;
- std::cout << "\tGood IPs: " << good_ips << " (" << 100.0 * good_ips /
all_ips.size() << "%)" << std::endl;
- std::cout << "\tBad IPs: " << bad_ips << " (" << 100.0 * bad_ips /
all_ips.size() << "%)" << std::endl;
- std::cout << std::endl;
+ std::cout << "Total number of requests: " << ips.size() << "\n";
+ std::cout << "\tGood requests: " << good_requests << " (" << 100.0 *
good_requests / ips.size() << "%)\n";
+ std::cout << "\tBad requests: " << bad_requests << " (" << 100.0 *
bad_requests / ips.size() << "%)\n";
+ std::cout << "Unique IPs in set: " << all_ips.size() << "\n";
+ std::cout << "\tGood IPs: " << good_ips << " (" << 100.0 * good_ips /
all_ips.size() << "%)\n";
+ std::cout << "\tBad IPs: " << bad_ips << " (" << 100.0 * bad_ips /
all_ips.size() << "%)\n";
+ std::cout << "\n";
return {good_requests, bad_requests};
}
@@ -200,7 +200,8 @@ loadFile(const std::string &fname, IpMap &all_ips, IpList
&ips)
int
main(int argc, char *argv[])
{
- auto options = parseArgs(argc, argv);
+ std::string name = "simulator";
+ auto options = parseArgs(argc, argv);
// All remaining arguments should be files, so lets process them one by one
for (int file_num = optind; file_num < argc; ++file_num) {
@@ -218,8 +219,9 @@ main(int argc, char *argv[])
for (uint32_t permablock = options.start_permablock; permablock <=
options.end_permablock;
permablock += options.incr_permablock) {
// Setup the buckets and metrics for this loop
- IpReputation::SieveLru ipt(buckets, size);
-
+ // ToDo: This needs to be initialized, with a YAML or something
+ // IpReputation::SieveLru ipt(buckets, size);
+ auto ipt = new IpReputation::SieveLru(name);
auto start = std::chrono::system_clock::now();
// Some metrics
@@ -233,14 +235,14 @@ main(int argc, char *argv[])
for (auto iter : ips) {
auto &[ip, data] = *iter;
auto &[count, status] = data;
- auto [bucket, cur_cnt] = ipt.increment(ip);
+ auto [bucket, cur_cnt] = ipt->increment(ip);
// Currently we only allow perma-blocking on items in bucket 1,
so check for that first.
- if (cur_cnt > permablock && bucket == ipt.lastBucket()) {
- bucket = ipt.block(ip);
+ if (cur_cnt > permablock && bucket == ipt->lastBucket()) {
+ bucket = ipt->block(ip);
}
- if (bucket == ipt.blockBucket()) {
+ if (bucket == ipt->blockBucket()) {
if (!status) {
++good_perm_blocked;
} else {
@@ -267,36 +269,35 @@ main(int argc, char *argv[])
uint32_t total_perm_blocked = bad_perm_blocked + good_perm_blocked;
uint32_t total_allowed = bad_allowed + good_allowed;
- // ipt.dump();
+ // ipt->dump();
std::chrono::duration<double> elapsed_seconds = end - start;
std::cout << "Running with size=" << size << ", buckets=" <<
buckets << ", threshold=" << threshold
- << ", permablock=" << permablock << std::endl;
- std::cout << "Processing time: " << elapsed_seconds.count() <<
std::endl;
- std::cout << "Denied requests: " << total_blocked +
total_perm_blocked << std::endl;
+ << ", permablock=" << permablock << "\n";
+ std::cout << "Processing time: " << elapsed_seconds.count() <<
"\n";
+ std::cout << "Denied requests: " << total_blocked +
total_perm_blocked << "\n";
std::cout << "\tGood requests denied: " << good_blocked +
good_perm_blocked << " ("
- << 100.0 * (good_blocked + good_perm_blocked) /
good_requests << "%)" << std::endl;
+ << 100.0 * (good_blocked + good_perm_blocked) /
good_requests << "%)\n";
std::cout << "\tBad requests denied: " << bad_blocked +
bad_perm_blocked << " ("
- << 100.0 * (bad_blocked + bad_perm_blocked) /
bad_requests << "%)" << std::endl;
- std::cout << "Allowed requests: " << total_allowed << std::endl;
+ << 100.0 * (bad_blocked + bad_perm_blocked) /
bad_requests << "%)\n";
+ std::cout << "Allowed requests: " << total_allowed << "\n";
std::cout << "\tGood requests allowed: " << good_allowed << " ("
<< 100.0 * good_allowed / good_requests << "%)"
- << std::endl;
+ << "\n";
std::cout << "\tBad requests allowed: " << bad_allowed << " (" <<
100.0 * bad_allowed / bad_requests << "%)"
- << std::endl;
+ << "\n";
if (permablock) {
- std::cout << "Permanently blocked IPs: " <<
ipt.bucketSize(ipt.blockBucket()) << std::endl;
+ std::cout << "Permanently blocked IPs: " <<
ipt->bucketSize(ipt->blockBucket()) << "\n";
std::cout << "\tGood requests permanently denied: " <<
good_perm_blocked << " ("
- << 100.0 * good_perm_blocked / good_requests << "%)"
<< std::endl;
+ << 100.0 * good_perm_blocked / good_requests << "%)\n";
std::cout << "\tBad requests permanently denied: " <<
bad_perm_blocked << " ("
- << 100.0 * bad_perm_blocked / bad_requests << "%)" <<
std::endl;
+ << 100.0 * bad_perm_blocked / bad_requests << "%)\n";
}
std::cout << "Estimated score (lower is better): "
<< 100.0 * ((100.0 * good_blocked / good_requests +
100.0 * bad_allowed / bad_requests) /
(100.0 * good_allowed / good_requests +
100.0 * bad_blocked / bad_requests))
- << std::endl;
- std::cout << "Memory used for IP Reputation data: " <<
ipt.memoryUsed() / (1024.0 * 1024.0) << "MB" << std::endl
- << std::endl;
+ << "\n";
+ std::cout << "Memory used for IP Reputation data: " <<
ipt->memoryUsed() / (1024.0 * 1024.0) << "MB\n\n";
}
}
}