mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 20:13:44 +02:00
Merge branch 'remove_network_status_table' into dev
This commit is contained in:
commit
21467596bc
1 changed files with 0 additions and 123 deletions
|
@ -1421,129 +1421,6 @@ void PostgreSQL::onlineNotificationThread()
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int64_t now = OSUtils::now();
|
|
||||||
if ((now - lastUpdatedNetworkStatus) > 10000) {
|
|
||||||
lastUpdatedNetworkStatus = now;
|
|
||||||
|
|
||||||
std::vector<std::pair<uint64_t, std::shared_ptr<_Network>>> networks;
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> l(_networks_l);
|
|
||||||
for (auto i = _networks.begin(); i != _networks.end(); ++i) {
|
|
||||||
networks.push_back(*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::stringstream networkUpdate;
|
|
||||||
networkUpdate << "INSERT INTO ztc_network_status (network_id, bridge_count, authorized_member_count, online_member_count, total_member_count, last_modified) VALUES ";
|
|
||||||
bool nwFirstRun = true;
|
|
||||||
bool networkAdded = false;
|
|
||||||
for (auto i = networks.begin(); i != networks.end(); ++i) {
|
|
||||||
char tmp[64];
|
|
||||||
Utils::hex(i->first, tmp);
|
|
||||||
|
|
||||||
std::string networkId(tmp);
|
|
||||||
|
|
||||||
std::vector<std::string> &_notUsed = updateMap[networkId];
|
|
||||||
(void)_notUsed;
|
|
||||||
|
|
||||||
uint64_t authMemberCount = 0;
|
|
||||||
uint64_t totalMemberCount = 0;
|
|
||||||
uint64_t onlineMemberCount = 0;
|
|
||||||
uint64_t bridgeCount = 0;
|
|
||||||
uint64_t ts = now;
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> l2(i->second->lock);
|
|
||||||
authMemberCount = i->second->authorizedMembers.size();
|
|
||||||
totalMemberCount = i->second->members.size();
|
|
||||||
bridgeCount = i->second->activeBridgeMembers.size();
|
|
||||||
for (auto m=i->second->members.begin(); m != i->second->members.end(); ++m) {
|
|
||||||
auto lo = lastOnlineCumulative.find(std::pair<uint64_t,uint64_t>(i->first, m->first));
|
|
||||||
if (lo != lastOnlineCumulative.end()) {
|
|
||||||
if ((now - lo->second) <= (ZT_NETWORK_AUTOCONF_DELAY * 2)) {
|
|
||||||
++onlineMemberCount;
|
|
||||||
} else {
|
|
||||||
lastOnlineCumulative.erase(lo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *nvals[1] = {
|
|
||||||
networkId.c_str()
|
|
||||||
};
|
|
||||||
|
|
||||||
res = PQexecParams(conn,
|
|
||||||
"SELECT id FROM ztc_network WHERE id = $1",
|
|
||||||
1,
|
|
||||||
NULL,
|
|
||||||
nvals,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0);
|
|
||||||
|
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
|
||||||
fprintf(stderr, "Network lookup failed: %s", PQerrorMessage(conn));
|
|
||||||
PQclear(res);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nrows = PQntuples(res);
|
|
||||||
PQclear(res);
|
|
||||||
|
|
||||||
if (nrows == 1) {
|
|
||||||
std::string bc = std::to_string(bridgeCount);
|
|
||||||
std::string amc = std::to_string(authMemberCount);
|
|
||||||
std::string omc = std::to_string(onlineMemberCount);
|
|
||||||
std::string tmc = std::to_string(totalMemberCount);
|
|
||||||
std::string timestamp = std::to_string(ts);
|
|
||||||
|
|
||||||
if (nwFirstRun) {
|
|
||||||
nwFirstRun = false;
|
|
||||||
} else {
|
|
||||||
networkUpdate << ", ";
|
|
||||||
}
|
|
||||||
|
|
||||||
networkUpdate << "('" << networkId << "', " << bc << ", " << amc << ", " << omc << ", " << tmc << ", "
|
|
||||||
<< "TO_TIMESTAMP(" << timestamp << "::double precision/1000))";
|
|
||||||
|
|
||||||
networkAdded = true;
|
|
||||||
|
|
||||||
} else if (nrows > 1) {
|
|
||||||
fprintf(stderr, "Number of networks > 1?!?!?");
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
networkUpdate << " ON CONFLICT (network_id) DO UPDATE SET bridge_count = EXCLUDED.bridge_count, "
|
|
||||||
<< "authorized_member_count = EXCLUDED.authorized_member_count, online_member_count = EXCLUDED.online_member_count, "
|
|
||||||
<< "total_member_count = EXCLUDED.total_member_count, last_modified = EXCLUDED.last_modified";
|
|
||||||
if (networkAdded) {
|
|
||||||
res = PQexec(conn, networkUpdate.str().c_str());
|
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
|
||||||
fprintf(stderr, "Error during multiple network upsert: %s", PQresultErrorMessage(res));
|
|
||||||
}
|
|
||||||
PQclear(res);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// for (auto it = updateMap.begin(); it != updateMap.end(); ++it) {
|
|
||||||
// std::string networkId = it->first;
|
|
||||||
// std::vector<std::string> members = it->second;
|
|
||||||
// std::stringstream queryBuilder;
|
|
||||||
|
|
||||||
// std::string membersStr = ::join(members, ",");
|
|
||||||
|
|
||||||
// queryBuilder << "NOTIFY controller, '" << networkId << ":" << membersStr << "'";
|
|
||||||
// std::string query = queryBuilder.str();
|
|
||||||
|
|
||||||
// PGresult *res = PQexec(conn,query.c_str());
|
|
||||||
// if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
|
||||||
// fprintf(stderr, "ERROR: Error sending NOTIFY: %s\n", PQresultErrorMessage(res));
|
|
||||||
// }
|
|
||||||
// PQclear(res);
|
|
||||||
// }
|
|
||||||
|
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||||
}
|
}
|
||||||
fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str());
|
fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str());
|
||||||
|
|
Loading…
Add table
Reference in a new issue