std::shared_ptr LimitlessMonitorService::GetHostInfo()

in src/limitless/limitless_monitor_service.cc [156:175]


std::shared_ptr<HostInfo> LimitlessMonitorService::GetHostInfo(const std::string& service_id) {
    std::lock_guard<std::mutex> services_guard(*(this->services_mutex));
    if (!this->services.contains(service_id)) {
        LOG(ERROR) << "Attempted to get host info for non-existent monitor with service ID " << service_id;
        return nullptr;
    }

    std::shared_ptr<LimitlessMonitor> service = this->services[service_id];

    std::lock_guard<std::mutex> limitless_routers_guard(*(service->limitless_routers_mutex));
    std::vector<HostInfo> hosts = *(service->limitless_routers);
    if (hosts.empty()) {
        return nullptr;
    }

    std::unordered_map<std::string, std::string> properties;
    RoundRobinHostSelector::SetRoundRobinWeight(hosts, properties);
    std::shared_ptr<HostInfo> host = std::make_shared<HostInfo>(round_robin.GetHost(hosts, true, properties));
    return host;
}