static void sd_to_bson (const mongoc_server_description_t *sd, bson_t *bson) { mongoc_host_list_t *host_list; host_list = mongoc_server_description_host ( (mongoc_server_description_t *) sd); bson_init (bson); BSON_APPEND_UTF8 (bson, "address", host_list->host_and_port); append_array (bson, "arbiters", &sd->arbiters); append_array (bson, "hosts", &sd->hosts); append_array (bson, "passives", &sd->passives); if (sd->current_primary) { BSON_APPEND_UTF8 (bson, "primary", sd->current_primary); } if (sd->set_name) { BSON_APPEND_UTF8 (bson, "setName", sd->set_name); } BSON_APPEND_UTF8 ( bson, "type", mongoc_server_description_type ((mongoc_server_description_t *) sd)); }
static bool mongodb_driver_add_server_debug(mongoc_server_description_t *sd, Array *retval) { mongoc_host_list_t *host = mongoc_server_description_host(sd); const bson_t *is_master = mongoc_server_description_ismaster(sd); Variant v_last_is_master; Array a_last_is_master; retval->set(s_MongoDriverServer_host, host->host); retval->set(s_MongoDriverServer_port, host->port); retval->set(s_MongoDriverServer_type, hippo_server_description_type(sd)); retval->set(s_MongoDriverServer_is_primary, strcmp(mongoc_server_description_type(sd), hippo_server_description_type_map[HIPPO_SERVER_RS_PRIMARY].name) == 0); retval->set(s_MongoDriverServer_is_secondary, strcmp(mongoc_server_description_type(sd), hippo_server_description_type_map[HIPPO_SERVER_RS_SECONDARY].name) == 0); retval->set(s_MongoDriverServer_is_arbiter, strcmp(mongoc_server_description_type(sd), hippo_server_description_type_map[HIPPO_SERVER_RS_ARBITER].name) == 0); hippo_bson_conversion_options_t options = HIPPO_TYPEMAP_DEBUG_INITIALIZER; BsonToVariantConverter convertor(bson_get_data(is_master), is_master->len, options); convertor.convert(&v_last_is_master); a_last_is_master = v_last_is_master.toArray(); retval->set(s_MongoDriverServer_is_hidden, a_last_is_master.exists(s_MongoDriverServer_hidden) && !!a_last_is_master[s_MongoDriverServer_hidden].toBoolean()); retval->set(s_MongoDriverServer_is_passive, a_last_is_master.exists(s_MongoDriverServer_passive) && !!a_last_is_master[s_MongoDriverServer_passive].toBoolean()); if (a_last_is_master.exists(s_MongoDriverServer_tags)) { retval->set(s_MongoDriverServer_tags, a_last_is_master[s_MongoDriverServer_tags]); } retval->set(s_MongoDriverServer_last_is_master, a_last_is_master); retval->set(s_MongoDriverServer_round_trip_time, mongoc_server_description_round_trip_time(sd)); return true; }
String HHVM_METHOD(MongoDBDriverServer, getHost) { MongoDBDriverServerData* data = Native::data<MongoDBDriverServerData>(this_); mongoc_server_description_t *sd; if ((sd = mongoc_client_get_server_description(data->m_client, data->m_server_id))) { String host(mongoc_server_description_host(sd)->host); mongoc_server_description_destroy(sd); return host; } throw MongoDriver::Utils::CreateAndConstruct(MongoDriver::s_MongoDriverExceptionRuntimeException_className, "Failed to get server description", HPHP::Variant((uint64_t) 0)); }