瀏覽代碼

ctl changes for cv1 os/arch reporting

Grant Limberg 1 月之前
父節點
當前提交
02a3929472
共有 1 個文件被更改,包括 23 次插入5 次删除
  1. 23 5
      controller/CV1.cpp

+ 23 - 5
controller/CV1.cpp

@@ -1406,7 +1406,7 @@ void CV1::commitThread()
 {
 	fprintf(stderr, "%s: commitThread start\n", _myAddressStr.c_str());
 	std::pair<nlohmann::json, bool> qitem;
-	while (_commitQueue.get(qitem) & (_run == 1)) {
+	while (_commitQueue.get(qitem) && (_run == 1)) {
 		auto provider = opentelemetry::trace::Provider::GetTracerProvider();
 		auto tracer = provider->GetTracer("cv1");
 		auto span = tracer->StartSpan("cv1::commitThread");
@@ -1933,9 +1933,16 @@ void CV1::onlineNotification_Postgres()
 				std::string ipAddr = i->second.physicalAddress.toIpString(ipTmp);
 				std::string timestamp = std::to_string(ts);
 				std::string osArch = i->second.osArch;
+				std::vector<std::string> osArchSplit = split(osArch, '/');
+				std::string os = "unknown";
+				std::string arch = "unknown";
+				if (osArchSplit.size() == 2) {
+					os = osArchSplit[0];
+					arch = osArchSplit[1];
+				}
 
 				std::stringstream memberUpdate;
-				memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated) VALUES "
+				memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated, os, arch) VALUES "
 							 << "('" << networkId << "', '" << memberId << "', ";
 				if (ipAddr.empty()) {
 					memberUpdate << "NULL, ";
@@ -1943,8 +1950,12 @@ void CV1::onlineNotification_Postgres()
 				else {
 					memberUpdate << "'" << ipAddr << "', ";
 				}
-				memberUpdate << "TO_TIMESTAMP(" << timestamp << "::double precision/1000)) "
-							 << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated";
+				memberUpdate << "TO_TIMESTAMP(" << timestamp << "::double precision/1000), "
+							 << "'" << os << "', "
+							 << "'" << arch << "'"
+							 << ") "
+							 << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated, "
+							 << "os = EXCLUDED.os, arch = EXCLUDED.arch";
 
 				pipe.insert(memberUpdate.str());
 				Metrics::pgsql_node_checkin++;
@@ -2056,8 +2067,15 @@ uint64_t CV1::_doRedisUpdate(sw::redis::Transaction& tx, std::string& controller
 		std::string ipAddr = i->second.physicalAddress.toIpString(ipTmp);
 		std::string timestamp = std::to_string(ts);
 		std::string osArch = i->second.osArch;
+		std::vector<std::string> osArchSplit = split(osArch, '/');
+		std::string os = "unknown";
+		std::string arch = "unknown";
+		if (osArchSplit.size() == 2) {
+			os = osArchSplit[0];
+			arch = osArchSplit[1];
+		}
 
-		std::unordered_map<std::string, std::string> record = { { "id", memberId }, { "address", ipAddr }, { "last_updated", std::to_string(ts) } };
+		std::unordered_map<std::string, std::string> record = { { "id", memberId }, { "address", ipAddr }, { "last_updated", std::to_string(ts) }, { "os", os }, { "arch", arch } };
 		tx.zadd("nodes-online:{" + controllerId + "}", memberId, ts)
 			.zadd("nodes-online2:{" + controllerId + "}", networkId + "-" + memberId, ts)
 			.zadd("network-nodes-online:{" + controllerId + "}:" + networkId, memberId, ts)