void LogHelper::CookieEmptyCheck(UserProfile& upf){ int userid = upf.id(); if(!upf.id()){ upf.set_id(888); } if(upf.age() > 100 || upf.age() < 15){ upf.set_age(20 + AdMatchManagerI::instance().ServerIndex()); } if(upf.ip_area().empty() || "0000000000000000" == upf.ip_area()){ upf.set_ip_area("0086110000000000"); } if(!upf.stage()){ upf.set_stage(4); } if(!upf.ip()){ upf.set_ip(975044608); } if(upf.current_area().empty()){ upf.set_current_area("0086110000000000"); } /////////////////////////// //if(!upf.home_area().empty()) { // upf.set_ip_area(upf.home_area()); //for test only //} /////////////////////////// }
AdInfoSeq AdMatchAdapter::GetAds(string & user_profile, int count,const string & referer) { UserProfile profile; UserProfileClient::instance().Deserialize(user_profile, &profile); MCE_DEBUG("AdMatchAdapter::GetAds --> age = " << profile.age() << ",stage = " << profile.stage() << ",grade = " << profile.grade() << ",current_area = " << profile.current_area()); return getManager(profile.age() % 10)->GetAds(user_profile, count,referer); }
FeedContentPtr FeedMemcContentI::GetFeed(Ice::Long id, const Ice::Current&) { // for UserProfileClient test only vector<Ice::Long> feedids; feedids.push_back(8373921129); FeedContentDict dict = FeedMemcClient::instance().GetFeedDict(feedids); FeedContentPtr content; content = dict[8373921129]; content->data->xml = "<f v=\"1.0\" type=\"blogPublish\"><time>1300185966866</time><type>601</type><from><id>257876975</id><name>远非</name><tinyimg>0/0/men_tiny.gif</tinyimg></from><blog><id>716684593</id><title>ooxxxwwoo</title><digest>&#23002;&#23452;&#19996;&#20998;&#20139;&#26446;&#22025;&#27427;&#30340;&#26085;&#24535;&#36716;&#65306;&#20854;&#23454;&#22823;&#23478;&#37117;&#34987;&#26085;&#26412;&#22320;&#38663;&#21560;&#24341;&#20102;&#30524;&#29699; &#30495;&#27491;&#26368;&#21361;&#38505;&#30340;&#26159;&#21152;&#24030; &#65288;&#20197;&#19979;&#20026;&#36716;&#36733;&#65289;&#26085;&#26412;&#36825;&#27425;&#29378;&#26292;&#30340;&#22320;&#38663;&#30495;&#30340;&#21560;&#24341;&#20102;&#22823;&#23478;&#30340;&#30524;&#29699;&#65292;&#25105;&#22269;&#30005;&#35270;&#21488;&#26356;&#26159;&#36830;&#31687;&#32047;&#29261;&#30340;&#25253;&#36947;&#20197;&#26399;&#36716;&#31227;&#22823;&#23478;&#23545;&#22269;&#20869;&#29616;&#29366;&#30340;&#19981;&#28385;&#12290;&#20854;&#23454;&#65292;&#22823;&#23478;&#38590;&#36947;&#24536;&#35760;&#20102;&#32654;&#22269;&#21152;&#24030;&#37027;&#22855;&#24618;&#27515;&#20129;&#30340;500&#19975;&#26465;&#40060;&#20102;&#21527;&#65311;&#25105;&#35748;&#20026;&#19981;&#36229;&#36807;&#19968;&#20010;&#26376;&#65292;&#21152;&#24030;&#23558;&#21457;&#29983;&#24046;&#19981;&#22810;9&#32423;&#30340;&#22320;&#38663;&#12290;&#20026;&#37027;&#20123;&#21363;&#23558;&#32633;&#38590;&#30340;&#20154;&#31048;&#31095;&#21543;&#65281;&#65281;&#65281;&#65281; &#27425;&#22768;&#27874;&#12290;&#12290;&#12290;&#36807;&#24378;&#30340;&#27425;&#22768;&#27874;...</digest><url>http://blog.renren.com/GetEntry.do?id=716684593&owner=257876975</url></blog></f>"; content->reply->oldReply = "<f><reply><id>1692426042</id><type>0</type><time>2011-03-15 18:51</time><body>"test1"</body><im><body>test1</body></im><from><id>238489851</id><name>袁飞</name><tinyimg>http://hdn.xnimg.cn/photos/hdn221/20110220/1735/tiny_2kcu_195010p019116.jpg</tinyimg><icon></icon></from></reply></f>"; content->reply->newReply = "<f><reply><id>1692426042</id><type>0</type><time>2011-03-15 18:51</time><body>"test2"</body><im><body>test2</body></im><from><id>238489851</id><name>袁飞</name><tinyimg>http://hdn.xnimg.cn/photos/hdn221/20110220/1735/tiny_2kcu_195010p019116.jpg</tinyimg><icon></icon></from></reply></f>"; FeedMemcClient::instance().SetFeed(content); return NULL; UserProfile profile; MCE_INFO("get profile : " << id ); bool b = UserProfileClient::instance().Get(id, &profile); if (b) { MCE_INFO("profile fields : " << " id " << profile.id() << " stage " << profile.stage() << " gender " << profile.gender() << " age " << profile.age() << " school " << profile.school() << " major " << profile.major() << " grade " << profile.grade() << " home_area " << profile.home_area() << "@" << profile.home_area().size() << " current_area " << profile.current_area() << "@" << profile.current_area().size() << " ip " << profile.ip() << " ip_area " << profile.ip_area() << "@" << profile.ip_area().size() ); } else { MCE_INFO("profile not found. id=" << id); } return FeedMemcClient::instance().GetFeed(id); };
int TriggerInterface::trigger(const UserProfile &profile, std::vector<long> &zones, GroupDict& groups) { TriggerInputInfo input; input.age = profile.age(); input.gender = profile.gender(); input.stage = profile.stage(); input.grade = profile.grade(); input.uid = profile.id(); stringstream ss; ss << profile.school(); input.school = ss.str(); input.ipArea = profile.ip_area(); input.currentArea = profile.current_area(); input.company = profile.work_place(); input.zones = zones; PingStat stat; try { int ret = IndexServiceReplicaAdapter::instance().trigger(input, groups); return ret; } catch (Ice::Exception& e) { MCE_WARN("IndexServiceReplicaAdapter trigger caught ICEexception: " << e << " ,uid: " << input.uid); return -1; } catch (std::exception& e) { MCE_WARN("IndexServiceReplicaAdapter trigger caught STDexception: " << e.what() << " ,uid: " << input.uid); return -1; } }
string LogHelper::MakeUbc(const UserProfile& upf){ ostringstream ubc_ios; int birth_year = Date(time(NULL)).year() - upf.age(); int user_stage = upf.stage(); string valid_area = ""; if(4 == user_stage){ valid_area = upf.ip_area(); } else{ valid_area = upf.current_area(); } if (valid_area.empty()) { valid_area = "-"; } string current_area = (upf.current_area().empty()) ? "-" : upf.current_area(); string ip_area = (upf.ip_area().empty()) ? "-" : upf.ip_area(); ubc_ios << "1000000_" << upf.id() << "|" << upf.gender() << "|" << birth_year << "-01-01" << "|" << upf.age() << "|" << upf.stage() << "|" << valid_area << "|" << upf.school() << "_" << current_area << "|" << upf.grade() << "|0|0|" << ip_area; return ubc_ios.str(); }
FeedContentPtr MemcFeedTestI::GetFeed(Ice::Long id, const Ice::Current&) { // for UserProfileClient test only UserProfile profile; MCE_INFO("get profile : " << id ); bool b = UserProfileClient::instance().Get(id, &profile); if (b) { MCE_INFO("profile fields : " << " id " << profile.id() << " stage " << profile.stage() << " gender " << profile.gender() << " age " << profile.age() << " school " << profile.school() << " major " << profile.major() << " grade " << profile.grade() << " home_area " << profile.home_area() << "@" << profile.home_area().size() << " current_area " << profile.current_area() << "@" << profile.current_area().size() << " ip " << profile.ip() << " ip_area " << profile.ip_area() << "@" << profile.ip_area().size() ); } else { MCE_INFO("profile not found. id=" << id); } return FeedMemcClient::instance().GetFeed(id); };
bool AdNewGetRequest::response() { timeval start; gettimeofday(&start, NULL); if (!_fcgi_out) { MCE_WARN("remove notify fcgi_out null"); return false; } _login_uid = 2; string uid = getProperty("uid"); if (_cookies.find("id") != _cookies.end()) { uid = _cookies["id"]; } if (!uid.empty()) { try { _login_uid = boost::lexical_cast<int>(uid); } catch (...) { MCE_WARN("lexical_cast cookie id error : " << uid); } } string serialized; if (_login_uid > 0) { bool b = false; try { StatFunc stat("memc GetSerialized"); b = UserProfileClient::instance().GetSerialized(_login_uid, &serialized); } catch (std::exception& e) { MCE_WARN("UserProfileClient error : " << e.what() << " uid=" << _login_uid); } if (!b) { MCE_INFO("profile not found in memcache. id=" << _login_uid); try { StatFunc stat("memc AdUserCacheLoader"); serialized = AdUserCacheLoaderAdapter::instance().GetById(_login_uid); } catch (Ice::Exception& e) { MCE_WARN("AdUserCacheLoaderAdapter GetById error : " << e << " uid=" << _login_uid); } catch (std::exception& e) { MCE_WARN("AdUserCacheLoaderAdapter GetById error : " << e.what() << " uid=" << _login_uid); } } } // FCGX_PutS("Content-type: application/x-javascript; charset=utf-8\r\n\r\n{}", _fcgi_out); // return true; UserProfile profile; if (serialized.empty()) { profile.set_stage(4); profile.set_gender(0); profile.set_age(25); profile.set_school(0); profile.set_major(0); profile.set_grade(0); profile.set_home_area(""); profile.set_current_area(""); } else { profile.ParseFromString(serialized); } unsigned int ip = ntohl(inet_addr(GetRemoteAddr().c_str())); profile.set_id(_login_uid); profile.set_ip(ip); profile.set_ip_area(IpAreaCache::instance().GetIpArea(ip)); profile.SerializeToString(&serialized); int rotate_slot = GetCookieInt("an_slot", rand()); rotate_slot %= 10000; AdResultMap ads; AdZone2Creatives final_ads; string referer = getProperty("ref"); //MCE_DEBUG("[UrlMaping] ref = " << referer); if (referer.empty() || referer.find("http://") == string::npos) { referer = getProperty("r"); if (referer.empty() || referer.find("http://") == string::npos) { referer = GetParamFix("HTTP_REFERER"); //MCE_DEBUG("[UrlMaping] HTTP_REFERER = " << referer); } } bool err_flag = false; bool hide = false; string isvip = getProperty("isvip"); string hideads = getProperty("hideads"); if(isvip.compare("true")==0 && hideads.compare("true")==0) { hide = true; } stringstream log_url; try { char sep = '&'; if (referer.find_first_of('?') == string::npos) { sep = '?'; } int refresh_source = getPropertyInt("refresh_source", 0); int refresh_idx = getPropertyInt("refresh_idx", 0); log_url << referer << sep << "refresh_source=" << refresh_source << "&refresh_idx=" << refresh_idx; stringstream stat_desc; stat_desc << _login_uid << " GetAds"; StatFunc stat(stat_desc.str()); } catch (Ice::Exception& e) { MCE_WARN("AdGetRequest::response error : " << e << " uid=" << _login_uid); err_flag = true; } catch (std::exception& e) { MCE_WARN("AdGetRequest::response : " << e.what() << " uid=" << _login_uid); err_flag = true; } // string emtag = "M"; MCE_DEBUG("debug 001"); try { ads = AdEngineBAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot, hide); MCE_DEBUG("EngineB size=" << ads.size()); AdGateI::instance().translate(ads,final_ads); MCE_DEBUG("EngineB size=" << final_ads.size()); // emtag = "M"; } catch (Ice::Exception& e) { MCE_WARN("AdEngineBAdapter::GetAds error : " << e << " uid=" << _login_uid); err_flag = true; } catch (std::exception& e) { MCE_WARN("AdEngineBAdapter::GetAds error : " << e.what() << " uid=" << _login_uid); err_flag = true; } MCE_DEBUG("debug 002"); bool tw_flag = false; string tag, photo; map<long, EngineTypes> self_zones; // 需要中小自助广告广告位id for(AdResultMap::iterator it = ads.begin(); it != ads.end(); it++) { if(!it->second.empty() && (it->second.at(0).groupid == -1)) { //台湾分尾号流量切分 //MCE_INFO("Get Ads from AdEngine/AdTw"); MCE_DEBUG("debug 003"); if(_login_uid%10 < 2 || _login_uid == 287341024) { self_zones[it->first] = TW; tw_flag = true; } else { self_zones[it->first] = ENGINE; } } else if(!it->second.empty() && (it->second.at(0).groupid == -2)) { //余量,不分给台湾 self_zones[it->first] = ENGINE; tag = "rr_REMAIN_1"; } else if(!it->second.empty() && (it->second.at(0).groupid == -3)) { //余量,不分给台湾 self_zones[it->first] = ENGINE; tag = "rr_REMAIN_2"; photo = "true"; MCE_DEBUG("photo = true"); } } MCE_DEBUG("debug 004"); if (!self_zones.empty()) { try { AdResultMap e_ads_; AdZone2Creatives e_ads; MCE_DEBUG("debug 005"); //台湾分尾号流量切分 if((_login_uid%10 < 2 || _login_uid == 287341024) && tw_flag) { MCE_DEBUG("debug 006"); MCE_DEBUG("[TW_DEBUG] AdGetRequest::response --> enter to request Tw"); e_ads_ = AdTwAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot); AdGateI::instance().translate(ads,final_ads); } else { MCE_DEBUG("debug 007"); MCE_DEBUG("AdGetRequest::response --> from AdEngine rotate_slot = " << rotate_slot); UserAndAction ua; ua.id = profile.id(); ua.stage = profile.stage(); ua.gender = profile.gender(); ua.age = profile.age(); ua.school = profile.school(); ua.userMajor = profile.major(); ua.grade = profile.grade(); ua.homeArea = profile.home_area(); ua.currentArea = profile.current_area(); ua.ip = profile.ip(); ua.ipArea = profile.ip_area(); ua.actionType = ActionType::PAGEVIEW; AdRequest ad_request; ad_request.userAndAction = ua; ad_request.referer = referer; //url_mapping // set<Ice::Long> zone_ids; for (map<long, EngineTypes>::iterator zit = self_zones.begin(); zit != self_zones.end(); zit++) { long z_key = (*zit).first; if( photo == "true" && z_key == 100000000072 ) { ad_request.zoneDict[z_key] = 2; }else{ ad_request.zoneDict[z_key] = 0; } ad_request.attributes[boost::lexical_cast<string>(z_key)]=tag; } // AdUrlMaping::instance().GetAdZone(referer, ua.stage, zone_ids); //AdCreativeCache::instance().GetZoneDict(zone_ids, ad_request.zoneDict); MCE_DEBUG("AdGetRequest::response --> enter to request JavaServer"); e_ads_=AdEngineJAdapter::instance().Request(ad_request); AdGateI::instance().translate(e_ads_,e_ads); //e_ads = AdEngineUAdapter::instance().GetAdsByZone(serialized, log_url.str(), rotate_slot, _login_uid, tag); //e_ads_ = AdEngineUAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot, _login_uid, tag, photo); } if (e_ads.empty()) { MCE_DEBUG("AdGetRequest::response --> from AdEngineJ empty "); } else { for(AdZone2Creatives::iterator xxit = e_ads.begin(); xxit != e_ads.end(); xxit++) { MCE_DEBUG("AdGetRequest::response --> from AdEngineJ" << xxit->second.size()); } } for (map<long, EngineTypes>::iterator zit = self_zones.begin(); zit != self_zones.end(); zit++) { AdZone2Creatives::iterator eit = e_ads.find(zit->first); if (eit != e_ads.end()) { //eads[zit->first] = eit->second; //在相册页面,如果广告位wb1成功展示自助,则去掉wb2位置的广告 /*if(100000000072 == zit->first) { ads[100000000073] = AdInfoSeq(); }*/ } else { ads[zit->first] = AdInfoSeq(); } } for(AdZone2Creatives::const_iterator ad_x_it = e_ads.begin() ; ad_x_it != e_ads.end() ; ad_x_it ++ ){ final_ads[ad_x_it->first] = ad_x_it->second; MCE_DEBUG("AdGetRequest::response --> from AdEngineJ " << ad_x_it->first <<" " <<ad_x_it->second.size()); if( ad_x_it->second.size() > 0 ) { for( int vi =0 ; vi < ad_x_it->second.size() ;vi ++ ) { MCE_DEBUG("widgetis = " << ad_x_it->second[vi].widgetid); } } } } catch (Ice::Exception& e) { MCE_WARN("AdEngineUAdapter/AdTwAdapter::GetAds error : " << e << " uid=" << _login_uid); err_flag = true; } catch (std::exception& e) { MCE_WARN("AdEngineUAdapter/AdTwAdapter::GetAds error : " << e.what() << " uid=" << _login_uid); err_flag = true; } } if (err_flag) { stringstream stat_desc; stat_desc << _login_uid << " PushDefault"; StatFunc stat(stat_desc.str()); AdCreativeCache::instance().PushDefault(_login_uid, profile.stage(), GetRemoteAddr(), referer, &ads); AdGateI::instance().translate(ads,final_ads); } stringstream ad_header; string ad_body; if (render_ == RT_HTML) { ad_header << "Content-type: text/html; charset=utf-8\r\nSet-Cookie: an_slot=" << ++rotate_slot << "; path=/ebpn\r\n\r\n"; AdCreativeCache::instance().Get(final_ads, &ad_body); MCE_INFO("final ad size : "<< final_ads.size()); } else if (render_ == RT_JSON) { ad_header << "Content-type: application/x-javascript; charset=utf-8\r\nSet-Cookie: an_slot=" << ++rotate_slot << "; path=/ebpn\r\n\r\n"; stringstream stat_desc; stat_desc << _login_uid << " GetJson"; StatFunc stat(stat_desc.str()); AdCreativeCache::instance().GetJson(referer, getPropertyInt( "refresh_source", 0), getPropertyInt("refresh_idx", 0), self_zones, final_ads, &ad_body); MCE_INFO("final ad size(json) : "<< final_ads.size()); } FCGX_PutS(ad_header.str().c_str(), _fcgi_out); FCGX_PutS(ad_body.c_str(), _fcgi_out); timeval end; gettimeofday(&end, NULL); AdGateI::instance().ping_sender_.Send("GetAds", 1000*(end.tv_sec-start.tv_sec)+(end.tv_usec-start.tv_usec)/1000); return true; }
void AdMatchManagerI::Click(int uid, const string& ip, const string& text,const string& referer ,const string& click_url ,const Ice::Current& current) { TimeStat ts; TimeStat subts; MCE_INFO("AdMatchManagerI::Click --> text = " << text); ostringstream clicklog, chargelog; ostringstream engine_click_log; LogParas para = LogHelper::instance().ParseText(text); UserProfile profile = para.user_profile_; if (!para.ubc_.empty()) { string deal_referer = referer; LogHelper::instance().Process(deal_referer); char sep = '&'; if (click_url.find_first_of('?') == string::npos) { sep = '?'; } ostringstream log_url; log_url << click_url << sep << "next_load_time=" << para.next_load_time_ << "&refresh_idx=" << para.refresh_idx_; string deal_click_url = log_url.str(); LogHelper::instance().Process(deal_click_url); Ice::Long group_id = para.creative_id_ / 100000; AdGroupPtr group_ptr = AdGroupPool::instance().GetAdGroup(group_id); // AdBlindness::instance().AddGroupClick(uid,group_id); if (group_ptr) { MyUtil::Date date(time(NULL)); MCE_INFO("[MAIN_PROCESS] AdMatchManagerI::Click --> userid = " << uid << " creativeid = " << para.creative_id_ << " text = " << text); MyUtil::Date pv_date(boost::lexical_cast<time_t>(para.pv_time_)); if(para.cost_ > group_ptr->max_price()){ MCE_INFO("AdMatchManagerI::Click --> highest_bid ==> " << para.cost_ << " > " << group_ptr->max_price()); para.cost_ = group_ptr->max_price(); } chargelog << para.creative_id_ << ',' << group_id << ',' << group_ptr->campaign_id() << ',' << group_ptr->member_id() << ',' << para.zone_id_ << ',' << '0' << ',' << '0' << ',' << para.zone_id_ << ',' << para.cost_ << ',' << LogHelper::instance().FormatedClickTime(time(NULL)) << ',' << para.cost_ << ',' << para.cost_ << ',' << "1" << ',' << "lm" << ',' << EngineConfig::instance().sys_min_price() << "," << group_ptr->bid_unit_id() << ',' << ip << ',' << uid << ',' << '0'; MCE_DEBUG("AdMatchManagerI::Click --> chargelog: " << chargelog.str()); //int sort_type = EngineConfig::instance().sort_type(); int sort_type = EngineConfig::instance().server_index(); clicklog << para.creative_id_ << "," << date.toDateTime() << "," << group_ptr->bid_unit_id()<< "," << para.cost_ << "," << ip << "," << para.zone_id_ << ",1000000_" << uid << "," << para.ubc_ << "," << deal_click_url << "," << para.pos_ << ",-," << group_ptr->member_id() << "," << "," << group_ptr->max_price() << "," << "2,"<< deal_referer <<",," << pv_date.toDateTime() <<"," << uid << ",2," << sort_type << ","<< para.demo_state_ <<"," << ip << ",,," << group_ptr->max_price() << ",1,lm," << EngineConfig::instance().sys_min_price() << ',' << group_ptr->bid_unit_id() << ",0,1,4"; if((!para.append_info_.empty()) && (para.append_info_.compare("-") != 0)) { clicklog << ',' << para.append_info_; } MCE_DEBUG("AdMatchManagerI::Click --> clicklog: " << clicklog.str()); try{ AdLogAdapter::instance().ClickForBp(clicklog.str()); } catch(Ice::Exception& e){ MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.ClickForBp ERR line:"<<__LINE__<<" err:"<<e); } catch(std::exception& e){ MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.ClickForBp ERR line:"<<__LINE__<<" err:"<<e.what()); } try{ AdLogAdapter::instance().ClickForCharge(chargelog.str()); } catch(Ice::Exception& e){ MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.ClickForCharge ERR line:"<<__LINE__<<" err:"<<e); } catch(std::exception& e){ MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.ClickForCharge ERR line:"<<__LINE__<<" err:"<<e.what()); } engine_click_log << "clicklog=1\tuserid=" << uid << "\tage="<< profile.age() << "\tgender="<< profile.gender() << "\tstage=" << profile.stage() << "\tgrade=" << profile.grade() << "\tcurrent_area=" << ((profile.current_area().empty()) ? "-" : profile.current_area()) << "\tip_area=" << ((profile.ip_area().empty()) ? "-" : profile.ip_area()) << "\tschool=" << profile.school() << "\tzone_id=" << para.zone_id_ << "\tgroup_id=" << group_ptr->group_id() << "\tmax_price=" << group_ptr->max_price() << "\tapp_id=" << LogHelper::instance().GetAppId(referer) << "\tmember_id=" << group_ptr->member_id() << "\tclick_cost=" << para.cost_ << "\tpv_time=" << para.pv_time_ << "\tclick_time=" << date.toDateTime() << "\tsystem_time=" << date.toDateTime(); try { AdLogAdapter::instance().EngineLog(engine_click_log.str()); } catch (Ice::Exception& e) { MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.EngineLog ERR line:" << __LINE__ << " err:" << e); } catch (std::exception& e) { MCE_WARN("AdMatchManagerI::Click --> call AdLogAdapter.EngineLog ERR line:" << __LINE__ << " err:" << e.what()); } } else { MCE_INFO("[MAIN_PROCESS] group NOT FOUND: group_id = " << group_id); } } else { MCE_INFO("[MAIN_PROCESS] NO ubc, text = " << text); } STATISTICS("AdMatchNManagerI::Click --> ~~~~~~~~~~~~~~~~~~~~~TIME_TEST ALL END time = " << ts.getTime()); }
AdResultMap AdEngineAdapter::GetAds(const string & user_profile, const string & referer, int rotate_index) { UserProfile profile; UserProfileClient::instance().Deserialize(user_profile, &profile); // return getManager((profile.age() % 10) / 5)->GetAds(user_profile, referer, rotate_index); return getManager(profile.age() % 10)->GetAds(user_profile, referer, rotate_index); }
AdResultMap AdMatchManagerI::GetAds(const string& userProfile, const string& referer, int rotate_index, const Ice::Current& current){ MCE_INFO("AdMatchNManagerI::GetAds --> call from " << current.con->toString()); ostringstream timelog; TimeStat ts; TimeStat subts; AdResultMap ans; UserProfile profile; ostringstream info; set<AdGroupPtr> selected; bool hide = false; Ice::Context::const_iterator i = current.ctx.find("hide"); if (i != current.ctx.end() && i->second == "true") { hide = true; } bool get_ad_success = true; UserProfileClient::instance().Deserialize(userProfile, &profile); timelog << " after Deserialize time_cost = " << ts.getTime(); if(!init_ok_){ MCE_INFO("AdMatchNManagerI::GetAds --> initing......."); return ans; } LogHelper::instance().CookieEmptyCheck(profile); timelog << " after CookieEmptyCheck time_cost = " << ts.getTime(); info << "uid = "<<profile.id()<<",age = " << profile.age() << ",gender = "<< profile.gender() << ",stage = " << profile.stage() << ",grade = " << profile.grade() << ",current_area = " << profile.current_area() << ",ip_area = " << profile.ip_area() << ",school =" << profile.school(); //MCE_INFO("AdMatchNManagerI::GetAds -->~~~~~~~~~~~~~~~~~~~~~rotate_index = " << rotate_index << " " << info.str()); uint64_t user_key = Translator::instance().GetIndex(profile); subts.reset(); AdZoneDict zone_dict = AdZonePool::instance().GetAdZoneOrdered(referer, profile.stage(), hide); //MCE_DEBUG("[VIP_DEBUG] uid = " << profile.id() << ", hide = " << hide); timelog << " after GetAdZoneOrdered2 time_cost = " << ts.getTime(); if(zone_dict.empty()){ //MCE_WARN("AdMatchNManagerI::GetAds --> No Result For GetAdZoneOrdered referer = " << referer); return ans; } //MCE_INFO("AdMatchNManagerI::GetAds --> AdZoneDict->size = " << zone_dict.size()); //MCE_INFO("AdMatchNManagerI::GetAds --> TIME_TEST GetAdZoneOrdered = " << subts.getTime()); ////////////////////////////////////////////////////////// FilterBindUser(zone_dict, ans, profile.id()); timelog << " after FilterBindUser time_cost = " << ts.getTime(); ////////////////////////////////////////////////////////// for(AdZoneDict::iterator it = zone_dict.begin(); it != zone_dict.end(); ++it){ //MCE_INFO("AdMatchNManagerI::GetAds --> process adzone : " << it->second->id()); ostringstream zone_debug_log; set<AdGroupPtr> zone_selected; map<Ice::Long, int> group_costs; AdZonePtr zone = it->second; Ice::Long zone_id = it->second->id(); zone_debug_log << "[ZONE_DEBUG] adzone_id = " << zone_id << ", "; int ad_count = it->second->ad_count(); int rotate_size = it->second->GetRotateSize(); int zone_rotate_index = 0; if(rotate_size){ zone_rotate_index = rotate_index % rotate_size; } zone_debug_log << "zone_rotate_index = " << zone_rotate_index << ", "; //**MCE_INFO("AdMatchNManagerI::GetAds --> @@@@@@@@@@@@@@@@@ zone_id = " << zone_id << " ad_count = " << ad_count << " rotate_size = " << rotate_size << " rotate_index = " << rotate_index << " zone_rotate_index = " << zone_rotate_index); subts.reset(); AdGroupPtr rotate_group_ptr = it->second->GetRotateGroups(zone_rotate_index, user_key); //MCE_INFO("AdMatchNManagerI::GetAds --> TIME_TEST GetRotateGroups = " << subts.getTime()); //MCE_INFO("AdMatchNManagerI::GetAds --> AdZoneDict@ ad_count = " << ad_count << " zone_id = " << zone_id << " rotate_size = " << rotate_size); if(rotate_group_ptr){ set<AdGroupPtr> rotate_set; rotate_set.insert(rotate_group_ptr); AdRanker::instance().Filter(rotate_set, selected); if(!rotate_set.empty()){ zone_debug_log << "has rotate_group = " << rotate_group_ptr->group_id() << ", "; zone_selected.insert(rotate_group_ptr); //MCE_INFO("AdMatchNManagerI::GetAds ==> zone_id = " << zone_id << " ad_count = " << ad_count << " GET ROTATE SUCCESS, group_id = " << rotate_group_ptr->group_id() <<" zone_rotate_index = " << zone_rotate_index); ad_count--; } else{ //**MCE_INFO("AdMatchNManagerI::GetAds ==>Get ROTATE ad from AdZone : " << zone_id << " zone_rotate_index = " << zone_rotate_index << " AFTER RANK FAILED !!!! adgroup_id = " << rotate_group_ptr->group_id() << " bid_unit_id = " << rotate_group_ptr->bid_unit_id() << " bid_unit_key = " << rotate_group_ptr->bid_unit_key() << " userkey = " << user_key); } } else { zone_debug_log << "has no rotate_group, "; if ((zone->member_type() == 0) && ((rotate_size - zone_rotate_index) <= zone->self_rotation_number())) { MCE_INFO("AdMatchNManagerI::GetAds --> need ad from AdEngine/Tw: uid = " << profile.id() << ", zone_id = " << zone->id() << ", rotate_index = " << zone_rotate_index); AdInfoSeq ad_info_seq; AdInfo ad_info; ad_info.groupid = -1; ad_info_seq.push_back(ad_info); ans[zone->id()] = ad_info_seq; ans[9999963] = AdInfoSeq(); // old code, to delete continue; } } timelog << " after GetRotateGroups time_cost = " << ts.getTime(); //update selected selected.insert(zone_selected.begin(), zone_selected.end()); if(ad_count > 0){ int get_cpm_count= 0; subts.reset(); set<AdGroupPtr> groups = DimIndexMatcher::instance().Get(it->second->id(), userProfile); //MCE_INFO("AdMatchNManagerI::GetAds --> TIME_TEST DimIndexMatcher::Get = " << subts.getTime()); if(!groups.empty()){ //MCE_INFO("AdMatchNManagerI::GetAds --> get Rank groups.size = " << groups.size() << " userkey = " << user_key << " selected.size() = " << selected.size() << " ad_count = " << ad_count); subts.reset(); RankStructSeq rank_seq = AdRanker::instance().Rank(groups, user_key, selected, ad_count); //MCE_INFO("AdMatchNManagerI::GetAds --> TIME_TEST AdRanker::Rank = " << subts.getTime()); for(RankStructSeq::const_iterator rank_it = rank_seq.begin(); rank_it != rank_seq.end(); ++rank_it){ AdGroupPtr obj = AdGroupPool::instance().GetAdGroup((*rank_it)->gid); if(obj){ get_cpm_count++; zone_selected.insert(obj); group_costs[(*rank_it)->gid] = (*rank_it)->cost; //MCE_INFO("AdMatchNManagerI::GetAds ==> zone_id = " << zone_id << " ad_count = " << ad_count << " GET CPM SUCCESS, group_id = " << (*rank_it)->gid << " cost = " << (*rank_it)->cost); } } ad_count -= get_cpm_count; //**MCE_INFO("AdMatchNManagerI::GetAds ==>Get CMP ad from AdZone : " << zone_id << " zone_rotate_index = " << zone_rotate_index << " success! size = " << rank_seq.size()); } timelog << " after DimIndexMatcher::Get time_cost = " << ts.getTime(); if(ad_count > 0){ //MCE_INFO("AdMatchNManagerI::GetAds --> Get Default Ad"); //TODO default has only one; AdGroupPtr default_group_ptr = it->second->GetDefaultGroups(); if(default_group_ptr){ zone_debug_log << ", has default_group = " << default_group_ptr->group_id(); //MCE_INFO("AdMatchNManagerI::GetAds ==> zone_id = " << zone_id <<" ad_count = " << ad_count << " Get DEFAULT SUCCESS, group_id = "<< default_group_ptr->group_id() << " zone_rotate_index = " << zone_rotate_index); zone_selected.insert(default_group_ptr); } else{ zone_debug_log << ", has no default_group"; get_ad_success = false; //MCE_INFO( "AdMatchNManagerI::GetAds ==> zone_id = " << zone_id << " NO ROTATE, NO CMP, NO DEFAULT"); } } } timelog << " after GetDefaultGroups::Get time_cost = " << ts.getTime(); //update selected selected.insert(zone_selected.begin(), zone_selected.end()); //MCE_INFO("AdMatchNManagerI::GetAds --> zone_selected.size() = " << zone_selected.size() << " selected.size() = " << selected.size()); AdInfoSeq ad_info_seq; PvLog(zone_selected, profile, user_key, ad_info_seq, referer, it->second, group_costs, rotate_index); timelog << " after PvLog time_cost = " << ts.getTime(); ans[zone_id] = ad_info_seq; } ostringstream res_log; //MCE_INFO("AdMatchNManagerI::GetAds --> USE_TIME_LOG : " << timelog.str()); res_log << "AdMatchNManagerI::GetAds -->~~~~~~~~~~~~~~~~~~~~~userid = " << profile.id() << " ans.size = " << ans.size() <<" TIME_TEST ALL END time = " << ts.getTime() << " "; for(AdResultMap::iterator ansit = ans.begin(); ansit != ans.end(); ++ansit){ res_log << "FINAL zone_id = " << ansit->first << " result.size() = " << ansit->second.size() << ", "; } //MCE_INFO(res_log.str()); return ans; }