| 2958 | } |
| 2959 | |
| 2960 | void AdmissionController::PoolToJsonLocked(const string& pool_name, |
| 2961 | rapidjson::Value* resource_pools, rapidjson::Document* document) { |
| 2962 | auto it = pool_stats_.find(pool_name); |
| 2963 | if (it == pool_stats_.end()) return; |
| 2964 | PoolStats* stats = &it->second; |
| 2965 | RequestQueue& queue = request_queue_map_[pool_name]; |
| 2966 | // Get the pool stats |
| 2967 | using namespace rapidjson; |
| 2968 | Value pool_info_json(kObjectType); |
| 2969 | stats->ToJson(&pool_info_json, document); |
| 2970 | |
| 2971 | // Get the queued queries |
| 2972 | Value queued_queries(kArrayType); |
| 2973 | queue.Iterate([&queued_queries, document](QueueNode* node) { |
| 2974 | if (node->group_states.empty()) { |
| 2975 | Value query_info(kObjectType); |
| 2976 | query_info.AddMember("query_id", "N/A", document->GetAllocator()); |
| 2977 | query_info.AddMember("mem_limit", 0, document->GetAllocator()); |
| 2978 | query_info.AddMember("mem_limit_to_admit", 0, document->GetAllocator()); |
| 2979 | query_info.AddMember("num_backends", 0, document->GetAllocator()); |
| 2980 | queued_queries.PushBack(query_info, document->GetAllocator()); |
| 2981 | return true; |
| 2982 | } |
| 2983 | ScheduleState* state = node->group_states.begin()->state.get(); |
| 2984 | Value query_info(kObjectType); |
| 2985 | Value query_id(PrintId(state->query_id()).c_str(), document->GetAllocator()); |
| 2986 | query_info.AddMember("query_id", query_id, document->GetAllocator()); |
| 2987 | query_info.AddMember( |
| 2988 | "mem_limit", state->per_backend_mem_limit(), document->GetAllocator()); |
| 2989 | query_info.AddMember("mem_limit_to_admit", state->per_backend_mem_to_admit(), |
| 2990 | document->GetAllocator()); |
| 2991 | query_info.AddMember( |
| 2992 | "coord_mem_limit", state->coord_backend_mem_limit(), document->GetAllocator()); |
| 2993 | query_info.AddMember("coord_mem_to_admit", state->coord_backend_mem_to_admit(), |
| 2994 | document->GetAllocator()); |
| 2995 | query_info.AddMember("num_backends", state->per_backend_schedule_states().size(), |
| 2996 | document->GetAllocator()); |
| 2997 | queued_queries.PushBack(query_info, document->GetAllocator()); |
| 2998 | return true; |
| 2999 | }); |
| 3000 | pool_info_json.AddMember("queued_queries", queued_queries, document->GetAllocator()); |
| 3001 | |
| 3002 | // Get the queued reason for the query at the head of the queue. |
| 3003 | if (!queue.empty()) { |
| 3004 | Value head_queued_reason( |
| 3005 | queue.head() |
| 3006 | ->profile->GetInfoString(PROFILE_INFO_KEY_LAST_QUEUED_REASON) |
| 3007 | ->c_str(), |
| 3008 | document->GetAllocator()); |
| 3009 | pool_info_json.AddMember( |
| 3010 | "head_queued_reason", head_queued_reason, document->GetAllocator()); |
| 3011 | } |
| 3012 | |
| 3013 | resource_pools->PushBack(pool_info_json, document->GetAllocator()); |
| 3014 | } |
| 3015 | |
| 3016 | void AdmissionController::PoolToJson(const string& pool_name, |
| 3017 | rapidjson::Value* resource_pools, rapidjson::Document* document) { |
nothing calls this directly
no test coverage detected