package storm.applications.bolt; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import static storm.applications.constants.ClickAnalyticsConstants.*; import storm.applications.util.geoip.IPLocation; import storm.applications.util.geoip.IPLocationFactory; import storm.applications.util.geoip.Location; /** * User: domenicosolazzo */ public class GeographyBolt extends AbstractBolt { private IPLocation resolver; @Override public void initialize() { String ipResolver = config.getString(BaseConf.GEOIP_INSTANCE); resolver = IPLocationFactory.create(ipResolver, config); } @Override public void execute(Tuple input) { String ip = input.getStringByField(Field.IP); Location location = resolver.resolve(ip); if (location != null) { String city = location.getCity(); String country = location.getCountryName(); collector.emit(input, new Values(country, city)); } collector.ack(input); } @Override public Fields getDefaultFields() { return new Fields(Field.COUNTRY, Field.CITY); } }