Search in sources :

Example 26 with Country

use of com.maxmind.geoip2.record.Country in project graylog2-server by Graylog2.

the class MaxmindDataAdapter method doGet.

@Override
protected LookupResult doGet(Object key) {
    final InetAddress addr;
    if (key instanceof InetAddress) {
        addr = (InetAddress) key;
    } else {
        // try to convert it somehow
        try {
            addr = InetAddresses.forString(key.toString());
        } catch (IllegalArgumentException e) {
            LOG.warn("Unable to parse IP address, returning empty result.");
            return LookupResult.empty();
        }
    }
    final IPLocationDatabaseAdapter reader = this.databaseAdapter.get();
    switch(config.dbType()) {
        case MAXMIND_CITY:
            try {
                final CityResponse city = reader.maxMindCity(addr);
                if (city == null) {
                    LOG.debug("No city data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final Location location = city.getLocation();
                final Map<Object, Object> map = new HashMap<>();
                map.put("city", city.getCity());
                map.put("continent", city.getContinent());
                map.put("country", city.getCountry());
                map.put("location", location);
                map.put("postal", city.getPostal());
                map.put("registered_country", city.getRegisteredCountry());
                map.put("represented_country", city.getRepresentedCountry());
                map.put("subdivisions", city.getSubdivisions());
                map.put("traits", city.getTraits());
                final String singleValue;
                if (location == null || location.getLatitude() == null || location.getLongitude() == null) {
                    singleValue = null;
                } else {
                    singleValue = location.getLatitude() + "," + location.getLongitude();
                    map.put("coordinates", singleValue);
                }
                return LookupResult.multi(singleValue, map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up city data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up city data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case MAXMIND_COUNTRY:
            try {
                final CountryResponse countryResponse = reader.maxMindCountry(addr);
                if (countryResponse == null) {
                    LOG.debug("No country data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final Country country = countryResponse.getCountry();
                final Map<Object, Object> map = new HashMap<>();
                map.put("continent", countryResponse.getContinent());
                map.put("country", country);
                map.put("registered_country", countryResponse.getRegisteredCountry());
                map.put("represented_country", countryResponse.getRepresentedCountry());
                map.put("traits", countryResponse.getTraits());
                final String singleValue = country == null ? null : country.getIsoCode();
                return LookupResult.multi(singleValue, map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up country data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up country data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case MAXMIND_ASN:
            try {
                final AsnResponse asn = reader.maxMindASN(addr);
                if (asn == null) {
                    LOG.debug("No ASN data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final ImmutableMap<Object, Object> map = ImmutableMap.of("as_number", asn.getAutonomousSystemNumber(), "as_organization", asn.getAutonomousSystemOrganization());
                return LookupResult.multi(asn.getAutonomousSystemNumber(), map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up ASN data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case IPINFO_ASN:
            try {
                final IPinfoASN ipInfo = reader.ipInfoASN(addr);
                if (ipInfo == null) {
                    LOG.debug("No IPinfo location data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                // Values can be null so we cannot use an ImmutableMap here
                final Map<Object, Object> multiValue = new HashMap<>();
                multiValue.put("asn", ipInfo.asn());
                multiValue.put("asn_numeric", ipInfo.asnNumeric());
                multiValue.put("name", ipInfo.name());
                multiValue.put("domain", ipInfo.domain());
                multiValue.put("type", ipInfo.type());
                multiValue.put("route", ipInfo.route());
                return LookupResult.multi(ipInfo.asnNumeric(), Collections.unmodifiableMap(multiValue));
            } catch (AddressNotFoundException e) {
                LOG.debug("Unable to look up IPinfo ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up IPinfo ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case IPINFO_STANDARD_LOCATION:
            try {
                final IPinfoStandardLocation ipInfo = reader.ipInfoStandardLocation(addr);
                if (ipInfo == null) {
                    LOG.debug("No IPinfo location data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                // Values can be null so we cannot use an ImmutableMap here
                final Map<Object, Object> multiValue = new HashMap<>();
                multiValue.put("coordinates", ipInfo.coordinates());
                multiValue.put("latitude", ipInfo.latitude());
                multiValue.put("longitude", ipInfo.longitude());
                multiValue.put("city", ipInfo.city());
                multiValue.put("country", ipInfo.country());
                multiValue.put("region", ipInfo.region());
                multiValue.put("timezone", ipInfo.timezone());
                multiValue.put("geoname_id", ipInfo.geoNameId());
                return LookupResult.multi(ipInfo.coordinates(), Collections.unmodifiableMap(multiValue));
            } catch (AddressNotFoundException e) {
                LOG.debug("Unable to look up IPinfo location data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up IPinfo location data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
    }
    return LookupResult.empty();
}
Also used : HashMap(java.util.HashMap) IOException(java.io.IOException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) CityResponse(com.maxmind.geoip2.model.CityResponse) AsnResponse(com.maxmind.geoip2.model.AsnResponse) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) Country(com.maxmind.geoip2.record.Country) CountryResponse(com.maxmind.geoip2.model.CountryResponse) InetAddress(java.net.InetAddress) Location(com.maxmind.geoip2.record.Location)

Aggregations

AddressNotFoundException (com.maxmind.geoip2.exception.AddressNotFoundException)14 CityResponse (com.maxmind.geoip2.model.CityResponse)13 Country (com.maxmind.geoip2.record.Country)11 UnknownHostException (java.net.UnknownHostException)11 Location (com.maxmind.geoip2.record.Location)9 IOException (java.io.IOException)9 InetAddress (java.net.InetAddress)9 CountryResponse (com.maxmind.geoip2.model.CountryResponse)7 City (com.maxmind.geoip2.record.City)7 Continent (com.maxmind.geoip2.record.Continent)7 JsonObject (com.google.gson.JsonObject)6 HashMap (java.util.HashMap)6 GeoIp2Exception (com.maxmind.geoip2.exception.GeoIp2Exception)5 Postal (com.maxmind.geoip2.record.Postal)5 RepresentedCountry (com.maxmind.geoip2.record.RepresentedCountry)4 Subdivision (com.maxmind.geoip2.record.Subdivision)4 GeoDef (com.quickutil.platform.def.GeoDef)4 GeoDef (com.quickutil.platform.entity.GeoDef)4 Traits (com.maxmind.geoip2.record.Traits)3 ArrayList (java.util.ArrayList)3