epersonEndId *= 4;
// We got all our parameters now get the rest
Context context = new Context();
// Find our solr server
HttpSolrServer solr = new HttpSolrServer(
ConfigurationManager.getProperty("solr-statistics", "server"));
solr.deleteByQuery("*:*");
solr.commit();
String prevIp = null;
String dbfile = ConfigurationManager.getProperty("usage-statistics", "dbfile");
LookupService cl = new LookupService(dbfile,
LookupService.GEOIP_STANDARD);
int countryErrors = 0;
for (int i = 0; i < nrLogs; i++) {
String ip = "";
Date time;
String continent;
String countryCode;
float longitude;
float latitude;
String city;
// 1. Generate an ip for our user
StringBuilder ipBuilder = new StringBuilder();
for (int j = 0; j < 4; j++) {
ipBuilder.append(getRandomNumberInRange(0, 254));
if (j != 3)
{
ipBuilder.append(".");
}
}
ip = ipBuilder.toString();
// 2 Depending on our ip get all the location info
Location location;
try {
location = cl.getLocation(ip);
} catch (Exception e) {
location = null;
}
if (location == null) {
// If we haven't got a prev ip this is pretty useless so move on
// to the next one
if (prevIp == null)
{
continue;
}
ip = prevIp;
location = cl.getLocation(ip);
}
city = location.city;
countryCode = location.countryCode;
longitude = location.longitude;
latitude = location.latitude;
try {
continent = LocationUtils.getContinentCode(countryCode);
} catch (Exception e) {
// We could get an error if our country == Europa this doesn't
// matter for generating statistics so ignore it
System.out.println("COUNTRY ERROR: " + countryCode);
countryErrors++;
continue;
}
// 3. Generate a date that the object was visited
time = new Date(getRandomNumberInRange(startDate, endDate));
// 4. Get our dspaceobject we are supposed to be working on
// We got mostly item views so lets say we got 1/2 chance that we
// got an item view
// What type have we got (PS: I know we haven't got 5 as a dso type
// we can log but it is used so our item gets move traffic)
int type = (int) getRandomNumberInRange(0, 8);
if (type == Constants.BUNDLE || type >= 5)
{
type = Constants.ITEM;
}
int dsoId = -1;
// Now we need to find a valid id
switch (type) {
case Constants.COMMUNITY:
dsoId = (int) getRandomNumberInRange(commStartId, commEndId);
break;
case Constants.COLLECTION:
dsoId = (int) getRandomNumberInRange(collStartId, collEndId);
break;
case Constants.ITEM:
dsoId = (int) getRandomNumberInRange(itemStartId, itemEndId);
break;
case Constants.BITSTREAM:
dsoId = (int) getRandomNumberInRange(bitStartId, bitEndId);
break;
}
// Now find our dso
DSpaceObject dso = DSpaceObject.find(context, type, dsoId);
if (dso instanceof Bitstream) {
Bitstream bit = (Bitstream) dso;
if (bit.getFormat().isInternal()) {
dso = null;
}
}
// Make sure we got a dso
boolean substract = false;
while (dso == null) {
// If our dsoId gets higher then our maxIdtotal we need to lower
// to find a valid id
if (dsoId == maxIdTotal)
{
substract = true;
}
if (substract)
{
dsoId--;
}
else
{
dsoId++;
}
dso = DSpaceObject.find(context, type, dsoId);
if (dso instanceof Bitstream) {
Bitstream bit = (Bitstream) dso;
if (bit.getFormat().isInternal()) {
dso = null;
}
}
// System.out.println("REFIND");
}
// Find the person who is visting us
int epersonId = (int) getRandomNumberInRange(epersonStartId, epersonEndId);
EPerson eperson = EPerson.find(context, epersonId);
if (eperson == null)
{
epersonId = -1;
}
// System.out.println(ip);
// System.out.println(country + " " +
// LocationUtils.getCountryName(countryCode));
// Resolve the dns
String dns = null;
try {
dns = DnsLookup.reverseDns(ip);
} catch (Exception e) {
}
System.out.println(ip);
System.out.println(dns);
// Save it in our server
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("ip", ip);
doc1.addField("type", dso.getType());
doc1.addField("id", dso.getID());
doc1.addField("time", DateFormatUtils.format(time,
SolrLogger.DATE_FORMAT_8601));
doc1.addField("continent", continent);
// doc1.addField("country", country);
doc1.addField("countryCode", countryCode);
doc1.addField("city", city);
doc1.addField("latitude", latitude);
doc1.addField("longitude", longitude);
if (epersonId > 0)
{
doc1.addField("epersonid", epersonId);
}
if (dns != null)
{
doc1.addField("dns", dns.toLowerCase());
}
SolrLogger.storeParents(doc1, dso);
solr.add(doc1);
// Make sure we have a previous ip
prevIp = ip;
}
System.out.println("Nr of countryErrors: " + countryErrors);
// Commit at the end cause it takes a while
solr.commit();
}