Пример #1
0
bool AdTestRequest::response() {
  MCE_DEBUG("AdTestRequest::response");
  if (!_fcgi_out) {
    MCE_WARN("AdTestRequest::response fcgi_out null");
    return false;
  }

  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);
    }
  }

  uid = getProperty("uid");
  string gender = getProperty("gender");
  string age = getProperty("age");
  string stage = getProperty("stage");
  string area = getProperty("area");
  string school = getProperty("school");
  string school_area = getProperty("school_area");
  string work_area = getProperty("work_area");
  string home_area = getProperty("home_area");
  string grade = getProperty("grade");
  string ip = getProperty("ip");
  string ip_area = getProperty("ip_area");
  string referer = getProperty("ref");
  MCE_DEBUG("AdTestRequest --> referer=" << referer << ",uid:" << uid
      << ", ip:" << ip << ", ip_area = " << ip_area);

  //UserID|Gender|Birthday|Age|Stage|Area|School_SchoolArea|Grade|IPArea

  UserProfile profile;
  //profile.set_ip_area(IpAreaCache::instance().GetIpArea(ip));
  profile.set_ip_area(ip_area);

  try {
    profile.set_id(boost::lexical_cast<int>(uid));
  } catch (...) {
  }

  try {
    profile.set_stage(boost::lexical_cast<int>(stage));
  } catch (...) {
  }

  try {
    profile.set_home_area(home_area);
  } catch (...) {
  }

  try {
    profile.set_gender(boost::lexical_cast<int>(gender));
  } catch (...) {
  }

  try {
    profile.set_age(boost::lexical_cast<int>(age));
  } catch (...) {
  }

  if (stage == "4") {
    profile.set_current_area(work_area);
    profile.set_school(0);
    profile.set_grade(0);
  } else if (stage == "2" || stage == "1") {
    profile.set_current_area(school_area);
    try {
      profile.set_school(boost::lexical_cast<Ice::Long>(school));
      profile.set_grade(boost::lexical_cast<int>(grade));
    } catch (...) {
    }
  }

  string serialized;
  profile.SerializeToString(&serialized);

  int rotate_slot = GetCookieInt("an_slot", rand());
  rotate_slot %= 10000;

  bool hide = false;
  string isvip = getProperty("isvip");
  string hideads = getProperty("hideads");
  if(isvip.compare("true")==0 && hideads.compare("true")==0) {
    hide = true;
  }

  AdResultMap ads;
  // string referer = GetParamFix("HTTP_REFERER");
  try {
    ads = AdEngineBAdapter::instance().GetAds(serialized, referer, rotate_slot, hide);
  } catch (Ice::Exception& e) {
    MCE_WARN("AdEngineBAdapter::GetAds error : " << e << " uid=" << uid);
  } catch (std::exception& e) {
    MCE_WARN("AdEngineBAdapter::GetAds error : " << e.what() << " uid=" << uid);
  }
  for (AdResultMap::iterator it = ads.begin(); it != ads.end(); ++it) {
    for (size_t i = 0; i < it->second.size(); ++i) {
      if (it->second.at(i).creativeid == 0) {
        MCE_WARN("test, creativeid is 0");
      }
    }
  }

  MCE_INFO("AdEngineBAdapter::GetAds return size : " << ads.size() << " uid="
      << uid << " stage=" << profile.stage() << " ip_area="
      << profile.ip_area());

  string ad_json;
  string ad_body;

  AdCreativeCache::instance().Get(ads, &ad_body);
  ad_body = ad_body + "<p/>" + ad_json;
  MCE_DEBUG("AdTestRequest::response --> uid:" << uid << " ,body:" << ad_body);
  ostringstream ad_header;
  ad_header << "Content-type: text/html; charset=utf-8\r\nSet-Cookie: an_slot="
      << ++rotate_slot << "; path=/ebpn\r\n\r\n";
  FCGX_PutS(ad_header.str().c_str(), _fcgi_out);
  FCGX_PutS(ad_body.c_str(), _fcgi_out);

  return true;
}
Пример #2
0
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;
}
Пример #3
0
string AdGateMI::GetAds(int uid, Ice::Long zoneid, const string& ip_str, const Ice::Current&) {
  MCE_INFO("AdGateMI::GetAds() --> uid = " << uid << ", zone_id = " << zoneid << ", ip = " << ip_str);
  ostringstream oss;
  oss << "http://3g.renren.com/" << zoneid;
  string referer = oss.str();
  string serialized;
  if (uid > 0) {
    bool b = false;
    try {
      StatFunc stat("memc GetSerialized");
      b = UserProfileClient::instance().GetSerialized(uid, &serialized);
    } catch (std::exception& e) {
      MCE_WARN("UserProfileClient error : " << e.what() << " uid="
          << uid);
    }   

    if (!b) {
      MCE_INFO("profile not found in memcache. id=" << uid);
      try {
        StatFunc stat("memc AdUserCacheLoader");
        serialized = AdUserCacheLoaderReplicaAdapter::instance().GetById(uid);
      } catch (Ice::Exception& e) {
        MCE_WARN("AdUserCacheLoaderReplicaAdapter GetById error : " << e << " uid="
            << uid);
      } catch (std::exception& e) {
        MCE_WARN("AdUserCacheLoaderReplicaAdapter GetById error : " << e.what()
            << " uid=" << uid);
      }
    }
  }

  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(ip_str.c_str()));
  profile.set_id(uid);
  profile.set_ip(ip);
  profile.set_ip_area(IpAreaCache::instance().GetIpArea(ip));
  profile.SerializeToString(&serialized);

  // int rotate_slot = (an_slot == 0) ? rand(): an_slot;
  // rotate_slot %= 10000;
  int rotate_slot = GetRotateSlot(uid);

  bool err_flag = false;

  AdResultMap ads;

  stringstream log_url;
  try {
    char sep = '&';
    if (referer.find_first_of('?') == string::npos) {
      sep = '?';
    }
    int refresh_source = 0;//getPropertyInt("refresh_source", 0);
    int refresh_idx = 0;//getPropertyInt("refresh_idx", 0);
    log_url << referer << sep << "refresh_source=" << refresh_source
      << "&refresh_idx=" << refresh_idx;

    stringstream stat_desc;
    stat_desc << uid << " GetAds";
    StatFunc stat(stat_desc.str());
  } catch (Ice::Exception& e) {
    MCE_WARN("AdGetRequest::response error : " << e << " uid=" << uid);
    err_flag = true;
  } catch (std::exception& e) {
    MCE_WARN("AdGetRequest::response : " << e.what() << " uid=" << uid);
    err_flag = true;
  }

  bool hide = false;
  try {
    ads = AdEngineBReplicaAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot, hide);
  } catch (Ice::Exception& e) {
    MCE_WARN("AdEngineBReplicaAdapter::GetAds error : " << e << " uid=" << uid);
    err_flag = true;
  } catch (std::exception& e) {
    MCE_WARN("AdEngineBReplicaAdapter::GetAds error : " << e.what() << " uid="
        << uid);
    err_flag = true;
  }

  if (err_flag) {
    stringstream stat_desc;
    stat_desc << uid << " PushDefault";
    StatFunc stat(stat_desc.str());
    AdCreativeCache::instance().PushDefault(uid, ip_str,
        referer, &ads);
  }

  for(AdResultMap::const_iterator it = ads.begin(); it != ads.end(); ++it) {
    MCE_INFO("AdEngineBReplicaAdapter::GetAds add default ad : " << it->first << '/' << it->second.size());
  }

  string ad_body;
  AdCreativeCache::instance().GetHtml(referer, ads, ad_body);

  return ad_body;
}
Пример #4
0
bool AdGetRequest::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;

  string referer = getProperty("ref");
  if (referer.empty() || referer.find("http://") == string::npos) {
    referer = getProperty("r");
    if (referer.empty() || referer.find("http://") == string::npos) {
      referer = GetParamFix("HTTP_REFERER");
    }
  }

  bool err_flag = false;

  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;
  }

  AdResultMap ads;
  AdZone2Creatives final_ads;

  try {
    ads = AdEngineBAdapter::instance().GetAds(serialized, log_url.str(),
        rotate_slot);
    //AdGateI::instance().translate(ads,final_ads);
  } 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;
  }

  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");
      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");
    }
  }

  if (!self_zones.empty()) {
    try {
      //台湾分尾号流量切分
      if((_login_uid%10 < 2 || _login_uid == 287341024) && tw_flag) {
        try {
          AdResultMap e_ads;
          MCE_DEBUG("[TW_DEBUG] AdGetRequest::response --> enter to request Tw");
          e_ads = AdTwAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot);
          if (e_ads.empty()) {
            MCE_INFO("AdGetRequest::response --> from AdTwS empty ");
          } else {
            for(AdResultMap::iterator xxit =  e_ads.begin(); xxit != e_ads.end(); xxit++) {
              MCE_DEBUG("AdGetRequest::response --> from AdTwS " << xxit->second.size());
            }
          }
          for (map<long, EngineTypes>::iterator zit = self_zones.begin(); zit != self_zones.end(); zit++) {
            AdResultMap::iterator eit = e_ads.find(zit->first);
            if (eit != e_ads.end()) {
              ads[zit->first] = eit->second;
            } else {
              ads[zit->first] = AdInfoSeq();
            }
          }
          AdGateI::instance().translate(ads,final_ads);
        } catch (Ice::Exception& e) {
          MCE_WARN("AdTwAdapter::GetAds error : " << e << " uid=" << _login_uid);
          err_flag = true;
        } catch (std::exception& e) {
          MCE_WARN("AdTwAdapter::GetAds error : " << e.what() << " uid=" << _login_uid);
          err_flag = true;
        }
      } else {
        try {
          MCE_DEBUG("AdGetRequest::response --> from AdEngine rotate_slot = "
              << rotate_slot);
          //e_ads = AdEngineUAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot, _login_uid, tag, photo);
          AdZone2Creatives e_ads;
          e_ads = AdEngineUAdapter::instance().GetAdsByZone(serialized, log_url.str(), rotate_slot, _login_uid, tag, photo);
          if (e_ads.empty()) {
            MCE_INFO("AdGetRequest::response --> from AdEngineU empty: uid = "
                     << _login_uid << ", referer = " << log_url.str()
                     << ", tag = " << tag << ", photo = " << photo);
          } else {
            for(AdZone2Creatives::iterator xxit =  e_ads.begin(); xxit != e_ads.end(); xxit++) {
              MCE_DEBUG("AdGetRequest::response --> from AdEngineU " << xxit->second.size());
            }
          }
          AdGateI::instance().translate(ads,final_ads);
          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()) {
              final_ads[zit->first] = eit->second;
            } else {
              final_ads[zit->first] = AdCreativeSeq();
            }
          }
        } catch (Ice::Exception& e) {
          MCE_WARN("AdEngineUAdapter::GetAds error : " << e << " uid=" << _login_uid);
          err_flag = true;
        } catch (std::exception& e) {
          MCE_WARN("AdEngineUAdapter::GetAds error : " << e.what() << " uid=" << _login_uid);
          err_flag = true;
        }
      }

    } 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;
    }
  } else {
    AdGateI::instance().translate(ads,final_ads);
  }
  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(ads, &ad_body);
    AdCreativeCache::instance().Get(final_ads, &ad_body);
  } 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);
  }

  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;
}
Пример #5
0
bool AdGetRequest::response() {
  if (!_fcgi_out) {
    MCE_WARN("remove notify fcgi_out null");
    return false;
  }

  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 = AdUserCacheLoaderReplicaAdapter::instance().GetById(_login_uid);
      } catch (Ice::Exception& e) {
        MCE_WARN("AdUserCacheLoaderReplicaAdapter GetById error : " << e << " uid="
            << _login_uid);
      } catch (std::exception& e) {
        MCE_WARN("AdUserCacheLoaderReplicaAdapter 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;
  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";

  try {
    ads = AdEngineBReplicaAdapter::instance().GetAds(serialized, log_url.str(),
        rotate_slot, hide);
//    emtag = "M";
  } catch (Ice::Exception& e) {
    MCE_WARN("AdEngineBReplicaAdapter::GetAds error : " << e << " uid=" << _login_uid);
    err_flag = true;
  } catch (std::exception& e) {
    MCE_WARN("AdEngineBReplicaAdapter::GetAds error : " << e.what() << " uid="
        << _login_uid);
    err_flag = true;
  }

  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");
      if(_login_uid%10>4) {
        self_zones[it->first] = ENGINE;
      } else {
        self_zones[it->first] = TW;
      }
    }
  }

  if (!self_zones.empty()) {
    try {
      AdResultMap e_ads;
      //台湾分尾号流量切分
      if(_login_uid%10>4) {
        MCE_DEBUG("AdGetRequest::response --> from AdEngine rotate_slot = "
            << rotate_slot);
        if (_login_uid % 10 == 8) {
          e_ads = AdEngineUAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot);
        } else {
          e_ads = AdEngineAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot);
        }
      } else {
        MCE_DEBUG("[TW_DEBUG] AdGetRequest::response --> enter to request Tw");
        e_ads = AdTwAdapter::instance().GetAds(serialized, log_url.str(), rotate_slot);
      }
      if (e_ads.empty()) {
        MCE_DEBUG("AdGetRequest::response --> from AdEngine/Tw empty ");
      } else {
        for(AdResultMap::iterator xxit =  e_ads.begin(); xxit != e_ads.end(); xxit++) {
          MCE_DEBUG("AdGetRequest::response --> from AdEngine/Tw " << xxit->second.size());
        }
      }
      for (map<long, EngineTypes>::iterator zit = self_zones.begin(); zit
          != self_zones.end(); zit++) {
        AdResultMap::iterator eit = e_ads.find(zit->first);
        if (eit != e_ads.end()) {
          ads[zit->first] = eit->second;
        } else {
          ads[zit->first] = AdInfoSeq();
        }
      }
    } catch (Ice::Exception& e) {
      MCE_WARN("AdEngineAdapter::GetAds error : " << e << " uid=" << _login_uid);
      err_flag = true;
    } catch (std::exception& e) {
      MCE_WARN("AdEngineAdapter::GetAds error : " << e.what() << " uid="
          << _login_uid);
      err_flag = true;
    }
  }


//  AdResultMap eads;
//  AdResultMap::iterator tagit = ads.find(9999963);
//  if (tagit != ads.end() && ads.find(100000000063) != ads.end()) {
//    ads.earse(tagit);
//    try {
//      MCE_INFO("AdGetRequest::response --> from AdEngine rotate_slot = "
//          << rotate_slot);
//      eads = AdEngineAdapter::instance().GetAds(serialized, log_url.str(),
//          rotate_slot);
//      AdResultMap::iterator it = eads.find(100000000063);
//      if (it != eads.end()) {
//        ads[100000000063] = it->second;
//      }
//      emtag = "E";
//    } catch (Ice::Exception& e) {
//      MCE_WARN("AdEngineAdapter::GetAds error : " << e << " uid=" << _login_uid);
//      err_flag = true;
//    } catch (std::exception& e) {
//      MCE_WARN("AdEngineAdapter::GetAds error : " << e.what() << " uid="
//          << _login_uid);
//      err_flag = true;
//    }
//  }

  //MCE_INFO("GetAds size=" << ads.size() << " uid=" << _login_uid << " stage="
  //    << profile.stage() << " ip_area=" << profile.ip_area());
  
  if (err_flag) {
    stringstream stat_desc;
    stat_desc << _login_uid << " PushDefault";
    StatFunc stat(stat_desc.str());
    AdCreativeCache::instance().PushDefault(_login_uid, GetRemoteAddr(),
        referer, &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(ads, &ad_body);
  } 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, ads,
        &ad_body);
  }

  FCGX_PutS(ad_header.str().c_str(), _fcgi_out);
  FCGX_PutS(ad_body.c_str(), _fcgi_out);
  return true;
}