changed handling of time-zones

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@801 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 20 years ago
parent 4c2c5ace01
commit 7fc822a59b

@ -3,7 +3,7 @@ javacSource=1.4
javacTarget=1.4
# Release Configuration
releaseVersion=0.404
releaseVersion=0.405
releaseFile=yacy_dev_v${releaseVersion}_${DSTAMP}_${releaseNr}.tar.gz
#releaseFile=yacy_v${releaseVersion}_${DSTAMP}_${releaseNr}.tar.gz
releaseDir=yacy_dev_v${releaseVersion}_${DSTAMP}_${releaseNr}

@ -48,6 +48,7 @@
<td class="small"><b>Release/<br>SVN</b><br>&nbsp;</td>
<td class="small"><b>Contact</b><br>&nbsp;</td>
<td class="small"><b>Last<br>Seen</b><br>&nbsp;&nbsp;<a href="/Network.html?page=#[page]#&sort=LastSeen&order=up">&lt;</a>&nbsp;<a href="/Network.html?page=#[page]#&sort=LastSeen&order=down">&gt;</a></td>
<td class="small"><b>UTC</b><br>Offset<br>&nbsp;</td>
<td class="small"><b>Uptime</b><br>&nbsp;&nbsp;<a href="/Network.html?page=#[page]#&sort=Uptime&order=up">&lt;</a>&nbsp;<a href="/Network.html?page=#[page]#&sort=Uptime&order=down">&gt;</a></td>
<td class="small"><b>#Links</b><br>&nbsp;&nbsp;<a href="/Network.html?page=#[page]#&sort=LCount&order=up">&lt;</a>&nbsp;<a href="/Network.html?page=#[page]#&sort=LCount&order=down">&gt;</a></td>
<td class="small"><b>#RWIs</b><br>&nbsp;&nbsp;<a href="/Network.html?page=#[page]#&sort=ICount&order=up">&lt;</a>&nbsp;<a href="/Network.html?page=#[page]#&sort=ICount&order=down">&gt;</a></td>
@ -75,6 +76,7 @@
<td class="small" align="right">#[version]#</td>
<td class="small" align="right">#(contact)#passive::direct#(/contact)#</td>
<td class="small" align="right">#[lastSeen]#</td>
<td class="small" align="right">#[utc]#</td>
<td class="small" align="right"><NOBR>#[uptime]#</NOBR></td>
<td class="small" align="right">#[links]#</td>
<td class="small" align="right">#[words]#</td>
@ -135,6 +137,7 @@ YaCy Cluster Indexing Speed: #[gppm]# Pages Per Minute (Accumulated PPM over Act
<td class="small">Name</td>
<td class="small">Type</td>
<td class="small">Version</td>
<td class="small">UTC</td>
<td class="small">Uptime</td>
<td class="small">#Links</td>
<td class="small">#RWIs</td>
@ -152,6 +155,7 @@ YaCy Cluster Indexing Speed: #[gppm]# Pages Per Minute (Accumulated PPM over Act
<td class="small">#[my-name]#</td>
<td class="small">#(my-type)#virgin::junior::senior::principal#(/my-type)#</td>
<td class="small" align="right">#[my-version]#</td>
<td class="small" align="right">#[my-utc]#</td>
<td class="small" align="right">#[my-uptime]#</td>
<td class="small" align="right">#[my-links]#</td>
<td class="small" align="right">#[my-words]#</td>

@ -117,6 +117,7 @@ public class Network {
}
myppm = seed.getPPM();
prop.put("table_my-version", seed.get("Version", "-"));
prop.put("table_my-utc", seed.get("UTC", "-"));
prop.put("table_my-uptime", serverDate.intervalToString(60000 * Long.parseLong(seed.get("Uptime", ""))));
prop.put("table_my-links", groupDigits(links));
prop.put("table_my-words", groupDigits(words));
@ -317,8 +318,9 @@ public class Network {
prop.put(STR_TABLE_LIST+conCount+"_type_url", seed.get("seedURL", "http://nowhere/") );
}
prop.put(STR_TABLE_LIST+conCount+"_version", yacy.combinedVersionString2PrettyString(seed.get("Version", "0.1")));
prop.put(STR_TABLE_LIST+conCount+"_contact", (seed.getFlagDirectConnect() ? 1 : 0) );
prop.put(STR_TABLE_LIST+conCount+"_lastSeen", lastSeen(seed.get("LastSeen", "-")) );
prop.put(STR_TABLE_LIST+conCount+"_contact", (seed.getFlagDirectConnect() ? 1 : 0));
prop.put(STR_TABLE_LIST+conCount+"_lastSeen", (System.currentTimeMillis() - seed.getLastSeenTime()) / 1000 / 60);
prop.put(STR_TABLE_LIST+conCount+"_utc", seed.get("UTC", "-"));
prop.put(STR_TABLE_LIST+conCount+"_uptime", serverDate.intervalToString(60000 * Long.parseLong(seed.get("Uptime", "0"))));
prop.put(STR_TABLE_LIST+conCount+"_links", groupDigits(links));
prop.put(STR_TABLE_LIST+conCount+"_words", groupDigits(words));
@ -354,20 +356,7 @@ public class Network {
// return rewrite properties
return prop;
}
private static String lastSeen(String date) {
long l = 0;
if (date.length() == 0) {
l = 999;
} else {
try {
l = (yacyCore.universalTime() - yacyCore.shortFormatter.parse(date).getTime()) / 1000 / 60;
} catch (java.text.ParseException e) {
l = 999;
}
}
if (l == 999) return "-"; else return Long.toString(l);
}
private static String groupDigits(long Number) {
final String s = Long.toString(Number);

@ -48,8 +48,10 @@
import java.net.InetAddress;
import java.util.Date;
import de.anomic.http.httpHeader;
import de.anomic.server.serverCore;
import de.anomic.server.serverDate;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;
import de.anomic.yacy.yacyClient;
@ -59,15 +61,6 @@ import de.anomic.yacy.yacyVersion;
public class hello {
private static final String STR_YOURTYPE = "yourtype";
private static final String STR_LASTSEEN = "LastSeen";
private static final String STR_IP = "IP";
private static final String STR_YOURIP = "yourip";
private static final String STR_MYTIME = "mytime";
private static final String STR_SEED = "seed";
private static final String STR_EQUAL = "=";
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) {
final serverObjects prop = new serverObjects(); // return variable that accumulates replacements
if ((post == null) ||
@ -79,20 +72,20 @@ public class hello {
// final String pattern = (String) post.get("pattern", ""); //
// final String mytime = (String) post.get(STR_MYTIME, ""); //
final String key = (String) post.get("key", ""); // transmission key for response
final String seed = (String) post.get(STR_SEED, ""); //
final String seed = (String) post.get(yacySeed.STR_SEED, ""); //
final String countStr = (String) post.get("count", "0"); //
int i;
int count = 0;
try {count = (countStr == null) ? 0 : Integer.parseInt(countStr);} catch (NumberFormatException e) {count = 0;}
final Date remoteTime = yacyCore.parseUniversalDate((String) post.get(STR_MYTIME)); // read remote time
final yacySeed remoteSeed = yacySeed.genRemoteSeed(seed, key, remoteTime);
//final Date remoteTime = yacyCore.parseUniversalDate((String) post.get(STR_MYTIME)); // read remote time
final yacySeed remoteSeed = yacySeed.genRemoteSeed(seed, key);
//System.out.println("YACYHELLO: REMOTESEED=" + ((remoteSeed == null) ? "NULL" : remoteSeed.toString()));
if (remoteSeed == null) { return new serverObjects(); }
// we easily know the caller's IP:
final String clientip = (String) header.get("CLIENTIP", "<unknown>"); // read an artificial header addendum
final String reportedip = remoteSeed.get(STR_IP, "");
final String reportedip = remoteSeed.get(yacySeed.STR_IP, "");
final String reportedPeerType = remoteSeed.get(yacySeed.PEERTYPE, yacySeed.PEERTYPE_JUNIOR);
final float clientversion = remoteSeed.getVersion();
@ -102,8 +95,8 @@ public class hello {
// connect to the reported IP address first
if (reportedip.length() > 0 && !clientip.equals(reportedip) && clientversion >= yacyVersion.YACY_SUPPORTS_PORT_FORWARDING) {
// try first the reportedip, since this may be a connect from a port-forwarding host
prop.put(STR_YOURIP, reportedip);
remoteSeed.put(STR_IP, reportedip);
prop.put(yacySeed.STR_YOURIP, reportedip);
remoteSeed.put(yacySeed.STR_IP, reportedip);
urls = yacyClient.queryUrlCount(remoteSeed);
}
@ -130,8 +123,8 @@ public class hello {
// we are only allowed to connect to the client IP address if it's not our own address
if (!isLocalIP) {
prop.put(STR_YOURIP, clientip);
remoteSeed.put(STR_IP, clientip);
prop.put(yacySeed.STR_YOURIP, clientip);
remoteSeed.put(yacySeed.STR_IP, clientip);
urls = yacyClient.queryUrlCount(remoteSeed);
}
}
@ -141,19 +134,19 @@ public class hello {
// assign status
if (urls >= 0) {
if (remoteSeed.get(yacySeed.PEERTYPE, yacySeed.PEERTYPE_SENIOR) == null) {
prop.put(STR_YOURTYPE, yacySeed.PEERTYPE_SENIOR);
prop.put(yacySeed.STR_YOURTYPE, yacySeed.PEERTYPE_SENIOR);
remoteSeed.put(yacySeed.PEERTYPE, yacySeed.PEERTYPE_SENIOR);
} else if (remoteSeed.get(yacySeed.PEERTYPE, yacySeed.PEERTYPE_PRINCIPAL).equals(yacySeed.PEERTYPE_PRINCIPAL)) {
prop.put(STR_YOURTYPE, yacySeed.PEERTYPE_PRINCIPAL);
prop.put(yacySeed.STR_YOURTYPE, yacySeed.PEERTYPE_PRINCIPAL);
} else {
prop.put(STR_YOURTYPE, yacySeed.PEERTYPE_SENIOR);
prop.put(yacySeed.STR_YOURTYPE, yacySeed.PEERTYPE_SENIOR);
remoteSeed.put(yacySeed.PEERTYPE, yacySeed.PEERTYPE_SENIOR);
}
// connect the seed
yacyCore.peerActions.peerArrival(remoteSeed, true);
} else {
prop.put(STR_YOURTYPE, yacySeed.PEERTYPE_JUNIOR);
remoteSeed.put(STR_LASTSEEN, yacyCore.universalDateShortString());
prop.put(yacySeed.STR_YOURTYPE, yacySeed.PEERTYPE_JUNIOR);
remoteSeed.put(yacySeed.STR_LASTSEEN, yacyCore.shortFormatter.format(new Date(System.currentTimeMillis() + serverDate.UTCDiff() - remoteSeed.getUTCDiff())) );
yacyCore.peerActions.juniorConnects++; // update statistics
remoteSeed.put(yacySeed.PEERTYPE, yacySeed.PEERTYPE_JUNIOR);
yacyCore.log.logInfo("hello: responded remote junior peer '" + remoteSeed.getName() + "' from " + reportedip);
@ -162,11 +155,11 @@ public class hello {
yacyCore.peerActions.peerPing(remoteSeed);
}
}
if (!((String)prop.get(STR_YOURTYPE)).equals(reportedPeerType)) {
if (!((String)prop.get(yacySeed.STR_YOURTYPE)).equals(reportedPeerType)) {
yacyCore.log.logInfo("hello: changing remote peer '" + remoteSeed.getName() +
"' [" + reportedip +
"] peerType from '" + reportedPeerType +
"' to '" + prop.get(STR_YOURTYPE) + "'.");
"' to '" + prop.get(yacySeed.STR_YOURTYPE) + "'.");
}
final StringBuffer seeds = new StringBuffer(768);
@ -181,7 +174,7 @@ public class hello {
count = 1;
for (i = 1; i < ySeeds.length; i++) {
if ((ySeeds[i] != null) && (ySeeds[i].isProper() == null)) {
seeds.append(STR_SEED).append(count).append(STR_EQUAL).append(ySeeds[i].genSeedStr(key)).append(serverCore.crlfString);
seeds.append(yacySeed.STR_SEED).append(count).append(yacySeed.STR_EQUAL).append(ySeeds[i].genSeedStr(key)).append(serverCore.crlfString);
count++;
}
}
@ -190,7 +183,7 @@ public class hello {
seeds.append("seed0=").append(yacyCore.seedDB.mySeed.genSeedStr(key)).append(serverCore.crlfString);
}
prop.put(STR_MYTIME, yacyCore.universalDateShortString());
prop.put(yacySeed.STR_MYTIME, yacyCore.universalDateShortString(new Date()));
prop.put("seedlist", seeds.toString());
// return rewrite properties
return prop;

@ -115,8 +115,8 @@ public class message {
prop.put("response", "-1"); // request rejected
return prop;
}
Date remoteTime = yacyCore.parseUniversalDate((String) post.get("mytime")); // read remote time
yacySeed otherSeed = yacySeed.genRemoteSeed(otherSeedString, key, remoteTime);
//Date remoteTime = yacyCore.parseUniversalDate((String) post.get("mytime")); // read remote time
yacySeed otherSeed = yacySeed.genRemoteSeed(otherSeedString, key);
String subject = crypt.simpleDecode((String) post.get("subject", ""), key); // message's subject
String message = crypt.simpleDecode((String) post.get("message", ""), key); // message body

@ -44,6 +44,7 @@
// if the shell's current path is HTROOT
import java.util.Hashtable;
import java.util.Date;
import java.io.IOException;
import de.anomic.http.httpHeader;
@ -69,7 +70,7 @@ public class query {
String obj = (String) post.get("object", ""); // keyword for query subject
String env = (String) post.get("env", ""); // argument to query
prop.put("mytime", yacyCore.universalDateShortString());
prop.put("mytime", yacyCore.universalDateShortString(new Date()));
// check if we are the right target and requester has correct information about this peer
if ((yacyCore.seedDB.mySeed == null) || (!(yacyCore.seedDB.mySeed.hash.equals(youare)))) {

@ -75,11 +75,11 @@ public class search {
long duetime= Long.parseLong((String) post.get("duetime", "3000"));
int count = Integer.parseInt((String) post.get("count", "10")); // maximum number of wanted results
boolean global = ((String) post.get("resource", "global")).equals("global"); // if true, then result may consist of answers from other peers
Date remoteTime = yacyCore.parseUniversalDate((String) post.get("mytime")); // read remote time
//Date remoteTime = yacyCore.parseUniversalDate((String) post.get("mytime")); // read remote time
if (yacyCore.seedDB == null) {
yacyCore.log.logSevere("yacy.search: seed cache not initialized");
} else {
yacyCore.peerActions.peerArrival(yacySeed.genRemoteSeed(oseed, key, remoteTime), true);
yacyCore.peerActions.peerArrival(yacySeed.genRemoteSeed(oseed, key), true);
}
HashSet keyhashes = new HashSet();

@ -340,7 +340,6 @@ public final class httpHeader extends TreeMap implements Map {
Server=Apache/1.3.26
*/
private static TimeZone GMTTimeZone = TimeZone.getTimeZone("PST");
private static SimpleDateFormat HTTPGMTFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'");
private static SimpleDateFormat EMLFormatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss", Locale.US);

@ -562,10 +562,10 @@ public final class plasmaHTCache {
System.exit(0);
}
lastModified = serverDate.correctedGMTDate();
lastModified = new Date(serverDate.correctedUTCTime());
} else {
lastModified = responseHeader.lastModified();
if (lastModified == null) lastModified = serverDate.correctedGMTDate(); // does not exist in header
if (lastModified == null) lastModified = new Date(serverDate.correctedUTCTime()); // does not exist in header
}
this.doctype = plasmaWordIndexEntry.docType(responseHeader.mime());
if (this.doctype == plasmaWordIndexEntry.DT_UNKNOWN) this.doctype = plasmaWordIndexEntry.docType(url);
@ -675,7 +675,7 @@ public final class plasmaHTCache {
if (date == null) return "stale_no_date_given_in_response";
try {
long ttl = 1000 * Long.parseLong(cacheControl.substring(8)); // milliseconds to live
if (serverDate.correctedGMTDate().getTime() - date.getTime() > ttl) {
if (serverDate.correctedUTCTime() - date.getTime() > ttl) {
//System.out.println("***not indexed because cache-control");
return "stale_expired";
}
@ -717,8 +717,8 @@ public final class plasmaHTCache {
if (!(responseHeader.containsKey(httpHeader.LAST_MODIFIED))) return false;
// parse date
Date d1, d2;
d2 = responseHeader.lastModified(); if (d2 == null) d2 = serverDate.correctedGMTDate();
d1 = requestHeader.ifModifiedSince(); if (d1 == null) d1 = serverDate.correctedGMTDate();
d2 = responseHeader.lastModified(); if (d2 == null) d2 = new Date(serverDate.correctedUTCTime());
d1 = requestHeader.ifModifiedSince(); if (d1 == null) d1 = new Date(serverDate.correctedUTCTime());
// finally, we shall treat the cache as stale if the modification time is after the if-.. time
if (d2.after(d1)) return false;
}
@ -762,7 +762,7 @@ public final class plasmaHTCache {
// the expires value gives us a very easy hint when the cache is stale
if (expires != null) {
//System.out.println("EXPIRES-TEST: expires=" + expires + ", NOW=" + serverDate.correctedGMTDate() + ", url=" + url);
if (expires.before(serverDate.correctedGMTDate())) return false;
if (expires.before(new Date(serverDate.correctedUTCTime()))) return false;
}
// -lastModified in cached response
@ -772,13 +772,13 @@ public final class plasmaHTCache {
// This would be a TTL factor of 100% we want no more than 10% TTL, so that a 10 month old cache
// file may only be treated as fresh for one more month, not more.
if (lastModified != null) {
if (date == null) date = serverDate.correctedGMTDate();
if (date == null) date = new Date(serverDate.correctedUTCTime());
long age = date.getTime() - lastModified.getTime();
if (age < 0) return false;
// TTL (Time-To-Live) is age/10 = (d2.getTime() - d1.getTime()) / 10
// the actual living-time is serverDate.correctedGMTDate().getTime() - d2.getTime()
// therefore the cache is stale, if serverDate.correctedGMTDate().getTime() - d2.getTime() > age/10
if (serverDate.correctedGMTDate().getTime() - date.getTime() > age / 10) return false;
if (serverDate.correctedUTCTime() - date.getTime() > age / 10) return false;
}
// -cache-control in cached response
@ -797,7 +797,7 @@ public final class plasmaHTCache {
if (date == null) return false;
try {
long ttl = 1000 * Long.parseLong(cacheControl.substring(8)); // milliseconds to live
if (serverDate.correctedGMTDate().getTime() - date.getTime() > ttl) {
if (serverDate.correctedUTCTime() - date.getTime() > ttl) {
return false;
}
} catch (Exception e) {

@ -314,7 +314,7 @@ public class plasmaSwitchboardQueue {
if ((ifModifiedSince != null) && (responseHeader().containsKey(httpHeader.LAST_MODIFIED))) {
// parse date
Date d = responseHeader().lastModified();
if (d == null) d = serverDate.correctedGMTDate();
if (d == null) d = new Date(serverDate.correctedUTCTime());
// finally, we shall treat the cache as stale if the modification time is after the if-.. time
if (d.after(ifModifiedSince)) {
//System.out.println("***not indexed because if-modified-since");
@ -343,7 +343,7 @@ public class plasmaSwitchboardQueue {
// sometimes, the expires date is set to the past to prevent that a page is cached
// we use that information to see if we should index it
if (expires != null) {
if (expires.before(serverDate.correctedGMTDate())) return "Stale_(Expired)";
if (expires.before(new Date(serverDate.correctedUTCTime()))) return "Stale_(Expired)";
}
// -lastModified in cached response
@ -371,7 +371,7 @@ public class plasmaSwitchboardQueue {
if (date == null) return "Stale_(no_date_given_in_response)";
try {
long ttl = 1000 * Long.parseLong(cacheControl.substring(8)); // milliseconds to live
if (serverDate.correctedGMTDate().getTime() - date.getTime() > ttl) {
if (serverDate.correctedUTCTime() - date.getTime() > ttl) {
//System.out.println("***not indexed because cache-control");
return "Stale_(expired_by_cache-control)";
}

@ -70,9 +70,9 @@ public final class serverDate {
// find out time zone and DST offset
private static Calendar thisCalendar = GregorianCalendar.getInstance();
private static long zoneOffsetHours = thisCalendar.get(Calendar.ZONE_OFFSET);
private static long DSTOffsetHours = thisCalendar.get(Calendar.DST_OFFSET);
private static long offsetHours = zoneOffsetHours + DSTOffsetHours; // this must be subtracted from current Date().getTime() to produce a GMT Time
//private static long zoneOffsetHours = thisCalendar.get(Calendar.ZONE_OFFSET);
//private static long DSTOffsetHours = thisCalendar.get(Calendar.DST_OFFSET);
//private static long offsetHours = zoneOffsetHours + DSTOffsetHours; // this must be subtracted from current Date().getTime() to produce a GMT Time
// pre-calculation of time tables
private final static long[] dimnormalacc, dimleapacc;
@ -103,8 +103,54 @@ public final class serverDate {
private int dow; // day-of-week
private long utime;
public static Date correctedGMTDate() {
return new Date(System.currentTimeMillis() - offsetHours);
public static String UTCDiffString() {
// we express the UTC Difference in 5 digits:
// SHHMM
// S ::= '+'|'-'
// HH ::= '00'|'01'|'02'|'03'|'04'|'05'|'06'|'07'|'08'|'09'|'10'|'11'|'12'
// MM ::= '00'|'15'|'30'|'45'
// since there are some places on earth where there is a time shift of half an hour
// we need too show also the minutes of the time shift
// Examples: http://www.timeanddate.com/library/abbreviations/timezones/
long offsetHours = UTCDiff();
int om = Math.abs((int) (offsetHours / minuteMillis)) % 60;
int oh = Math.abs((int) (offsetHours / hourMillis));
String diff = Integer.toString(om);
if (diff.length() < 2) diff = "0" + diff;
diff = Integer.toString(oh) + diff;
if (diff.length() < 4) diff = "0" + diff;
if (offsetHours >= 0) {
return "+" + diff;
} else {
return "-" + diff;
}
}
public static long UTCDiff() {
long zoneOffsetHours = thisCalendar.get(Calendar.ZONE_OFFSET);
long DSTOffsetHours = thisCalendar.get(Calendar.DST_OFFSET);
return zoneOffsetHours + DSTOffsetHours;
}
public static long UTCDiff(String diffString) {
if (diffString.length() != 5) throw new RuntimeException("UTC String malformed (wrong size):" + diffString);
boolean ahead = true;
if (diffString.charAt(0) == '+') ahead = true;
else if (diffString.charAt(0) == '-') ahead = false;
else throw new RuntimeException("UTC String malformed (wrong sign):" + diffString);
long oh = Long.parseLong(diffString.substring(1, 3));
long om = Long.parseLong(diffString.substring(3));
return ((ahead) ? (long) 1 : (long) -1) * (oh * hourMillis + om * minuteMillis);
}
/*
public static Date UTC0Date() {
return new Date(UTC0Time());
}
*/
public static long correctedUTCTime() {
return System.currentTimeMillis() - UTCDiff();
}
public serverDate() {
@ -255,7 +301,7 @@ public final class serverDate {
public static void main(String[] args) {
//System.out.println("kelondroDate is (" + new kelondroDate().toString() + ")");
System.out.println("offset is " + (offsetHours/1000/60/60/24) + " hours, javaDate is " + new Date() + ", correctedDate is " + correctedGMTDate());
System.out.println("offset is " + (UTCDiff()/1000/60/60) + " hours, javaDate is " + new Date() + ", correctedDate is " + new Date(correctedUTCTime()));
System.out.println("serverDate : " + new serverDate().toShortString(false));
System.out.println(" javaDate : " + testSDateShortString());
System.out.println("serverDate : " + new serverDate().toString());

@ -105,7 +105,7 @@ public class yacyClient {
obj.put("pattern", "");
obj.put("count", "20");
obj.put("key", key);
obj.put("mytime", yacyCore.universalDateShortString());
obj.put("mytime", yacyCore.universalDateShortString(new Date()));
obj.put("seed", yacyCore.seedDB.mySeed.genSeedStr(key));
result = nxTools.table(httpc.wput(url,
105000, null, null,
@ -126,13 +126,11 @@ public class yacyClient {
return -1;
}
final Date remoteTime = yacyCore.parseUniversalDate((String) result.get("mytime")); // read remote time
// check consistency with expectation
yacySeed otherPeer = null;
float otherPeerVersion = 0;
if (otherHash != null && otherHash.length() > 0) {
otherPeer = yacySeed.genRemoteSeed((String) result.get("seed0"), key, remoteTime);
otherPeer = yacySeed.genRemoteSeed((String) result.get("seed0"), key);
if (otherPeer == null || !otherPeer.hash.equals(otherHash)) {
yacyCore.log.logFine("yacyClient.publishMySeed: consistency error: other peer '" + ((otherPeer==null)?"unknown":otherPeer.getName()) + "' wrong");
return -1; // no success
@ -199,6 +197,8 @@ public class yacyClient {
return -1;
}
//final Date remoteTime = yacyCore.parseUniversalDate((String) result.get("mytime")); // read remote time
// read the seeds that the peer returned and integrate them into own database
int i = 0;
int count = 0;
@ -206,7 +206,7 @@ public class yacyClient {
while ((seedStr = (String) result.get("seed" + i++)) != null) {
// integrate new seed into own database
// the first seed, "seed0" is the seed of the responding peer
if (yacyCore.peerActions.peerArrival(yacySeed.genRemoteSeed(seedStr, key, remoteTime), (i == 1))) count++;
if (yacyCore.peerActions.peerArrival(yacySeed.genRemoteSeed(seedStr, key), (i == 1))) count++;
}
return count;
}
@ -221,8 +221,8 @@ public class yacyClient {
"&object=seed&env=" + seedHash),
10000, null, null, yacyCore.seedDB.sb.remoteProxyHost, yacyCore.seedDB.sb.remoteProxyPort));
if (result == null || result.size() == 0) { return null; }
final Date remoteTime = yacyCore.parseUniversalDate((String) result.get("mytime")); // read remote time
return yacySeed.genRemoteSeed((String) result.get("response"), key, remoteTime);
//final Date remoteTime = yacyCore.parseUniversalDate((String) result.get("mytime")); // read remote time
return yacySeed.genRemoteSeed((String) result.get("response"), key);
} catch (Exception e) {
yacyCore.log.logSevere("yacyClient.querySeed error:" + e.getMessage());
return null;
@ -310,7 +310,7 @@ public class yacyClient {
obj.put("query", wordhashes);
obj.put("ttl", "0");
obj.put("duetime", Long.toString(duetime));
obj.put("mytime", yacyCore.universalDateShortString());
obj.put("mytime", yacyCore.universalDateShortString(new Date()));
//yacyCore.log.logDebug("yacyClient.search url=" + url);
final long timestamp = System.currentTimeMillis();
final HashMap result = nxTools.table(httpc.wput(new URL(url),
@ -401,7 +401,7 @@ public class yacyClient {
post.put("process", "permission");
post.put("iam", yacyCore.seedDB.mySeed.hash);
post.put("youare", targetHash);
post.put("mytime", yacyCore.universalDateShortString());
post.put("mytime", yacyCore.universalDateShortString(new Date()));
String address;
if (targetHash.equals(yacyCore.seedDB.mySeed.hash)) {
address = yacyCore.seedDB.mySeed.getAddress();
@ -433,7 +433,7 @@ public class yacyClient {
post.put("myseed", yacyCore.seedDB.mySeed.genSeedStr(key));
post.put("youare", targetHash);
post.put("subject", subject);
post.put("mytime", yacyCore.universalDateShortString());
post.put("mytime", yacyCore.universalDateShortString(new Date()));
post.put("message", new String(message));
String address;
if (targetHash.equals(yacyCore.seedDB.mySeed.hash)) {
@ -467,7 +467,7 @@ public class yacyClient {
post.put("process", "crawl");
post.put("iam", yacyCore.seedDB.mySeed.hash);
post.put("youare", targetSeed.hash);
post.put("mytime", yacyCore.universalDateShortString());
post.put("mytime", yacyCore.universalDateShortString(new Date()));
post.put("url", crypt.simpleEncode(url.toString()));
post.put("referrer", crypt.simpleEncode((referrer == null) ? "" : referrer.toString()));
post.put("depth", "0");

@ -74,6 +74,7 @@ import de.anomic.net.natLib;
import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.serverSemaphore;
import de.anomic.server.serverSwitch;
import de.anomic.server.serverDate;
import de.anomic.server.logging.serverLog;
public class yacyCore {
@ -109,6 +110,7 @@ public class yacyCore {
public static String universalDateShortPattern = "yyyyMMddHHmmss";
public static SimpleDateFormat shortFormatter = new SimpleDateFormat(universalDateShortPattern);
/*
public static long universalTime() {
return universalDate().getTime();
}
@ -120,17 +122,21 @@ public class yacyCore {
public static String universalDateShortString() {
return universalDateShortString(universalDate());
}
*/
public static String universalDateShortString(Date date) {
return shortFormatter.format(date);
}
public static Date parseUniversalDate(String remoteTimeString) {
public static Date parseUniversalDate(String remoteTimeString, String remoteUTCOffset) {
if ((remoteTimeString == null) || (remoteTimeString.length() == 0)) return new Date();
if ((remoteUTCOffset == null) || (remoteUTCOffset.length() == 0)) return new Date();
try {
return yacyCore.shortFormatter.parse(remoteTimeString);
return new Date(yacyCore.shortFormatter.parse(remoteTimeString).getTime() - serverDate.UTCDiff() + serverDate.UTCDiff(remoteUTCOffset));
} catch (java.text.ParseException e) {
log.logFinest("parseUniversalDate remoteTimeString=[" + remoteTimeString + "]");
log.logFinest("parseUniversalDate " + e.getMessage() + ", remoteTimeString=[" + remoteTimeString + "]");
return new Date();
} catch (java.lang.NumberFormatException e) {
log.logFinest("parseUniversalDate " + e.getMessage() + ", remoteTimeString=[" + remoteTimeString + "]");
return new Date();
}
}
@ -207,12 +213,12 @@ public class yacyCore {
synchronized static public void triggerOnlineAction() {
lastOnlineTime = universalTime();
lastOnlineTime = System.currentTimeMillis();
}
public boolean online() {
this.onlineMode = Integer.parseInt(switchboard.getConfig("onlineMode", "1"));
return ((onlineMode == 2) || ((universalTime() - lastOnlineTime) < 10000));
return ((onlineMode == 2) || ((System.currentTimeMillis() - lastOnlineTime) < 10000));
}
public void loadSeeds() {
@ -294,7 +300,7 @@ public class yacyCore {
// if we cannot reach ourself, we call a forced publishMySeed and return false
int urlc = yacyClient.queryUrlCount(seedDB.mySeed);
if (urlc >= 0) {
seedDB.mySeed.put("LastSeen", universalDateShortString());
seedDB.mySeed.put("LastSeen", universalDateShortString(new Date()));
return true;
}
log.logInfo("re-connect own seed");

@ -50,6 +50,7 @@ import de.anomic.kelondro.kelondroTree;
import de.anomic.kelondro.kelondroException;
import de.anomic.kelondro.kelondroRecords;
import de.anomic.server.serverCodings;
import de.anomic.server.serverDate;
public class yacyNewsDB {
@ -167,7 +168,7 @@ public class yacyNewsDB {
return new yacyNewsRecord(
new String(b[0]),
new String(b[1]),
(b[2] == null) ? null : yacyCore.parseUniversalDate(new String(b[2])),
(b[2] == null) ? null : yacyCore.parseUniversalDate(new String(b[2]), serverDate.UTCDiffString()),
(int) serverCodings.enhancedCoder.decodeBase64Long(new String(b[3])),
serverCodings.string2map(new String(b[4]))
);

@ -171,16 +171,16 @@ public class yacyNewsPool {
private boolean automaticProcessP(yacyNewsRecord record) {
if (record == null) return false;
if (record.category() == null) return true;
if ((yacyCore.universalTime() - record.created().getTime()) > (1000 * 60 * 60 * 24 * 7) /* 1 Week */) {
if ((System.currentTimeMillis() - record.created().getTime()) > (1000 * 60 * 60 * 24 * 7) /* 1 Week */) {
// remove everything after 1 week
return true;
}
if ((record.category().equals("wiki_upd")) &&
((yacyCore.universalTime() - record.created().getTime()) > (1000 * 60 * 60 * 24) /* 1 Day */)) {
((System.currentTimeMillis() - record.created().getTime()) > (1000 * 60 * 60 * 24) /* 1 Day */)) {
return true;
}
if ((record.category().equals("crwlstrt")) &&
((yacyCore.universalTime() - record.created().getTime()) > (1000 * 60 * 60 * 24) /* 1 Day */)) {
((System.currentTimeMillis() - record.created().getTime()) > (1000 * 60 * 60 * 24) /* 1 Day */)) {
yacySeed seed = yacyCore.seedDB.get(record.originator());
if (seed == null) return false;
try {

@ -61,8 +61,8 @@ public class yacyNewsRecord {
public yacyNewsRecord(String newsString) {
this.attributes = serverCodings.string2map(newsString);
this.received = (attributes.containsKey("rec")) ? yacyCore.parseUniversalDate((String) attributes.get("rec")) : new Date();
this.created = (attributes.containsKey("cre")) ? yacyCore.parseUniversalDate((String) attributes.get("cre")) : new Date();
this.received = (attributes.containsKey("rec")) ? yacyCore.parseUniversalDate((String) attributes.get("rec"), serverDate.UTCDiffString()) : new Date();
this.created = (attributes.containsKey("cre")) ? yacyCore.parseUniversalDate((String) attributes.get("cre"), serverDate.UTCDiffString()) : new Date();
this.category = (attributes.containsKey("cat")) ? (String) attributes.get("cat") : null;
this.distributed = (attributes.containsKey("dis")) ? Integer.parseInt((String) attributes.get("dis")) : 0;
this.originator = (attributes.containsKey("ori")) ? (String) attributes.get("ori") : null;
@ -83,7 +83,7 @@ public class yacyNewsRecord {
protected yacyNewsRecord(String id, String category, Date received, int distributed, Map attributes) {
this.attributes = attributes;
this.received = received;
this.created = yacyCore.parseUniversalDate(id.substring(0, yacyCore.universalDateShortPattern.length()));
this.created = yacyCore.parseUniversalDate(id.substring(0, yacyCore.universalDateShortPattern.length()), serverDate.UTCDiffString());
this.category = category;
this.distributed = distributed;
this.originator = id.substring(yacyCore.universalDateShortPattern.length());

@ -105,7 +105,7 @@ public class yacyPeerActions {
} else {
seedDB.mySeed.put("Port", sb.getConfig("port", "8080"));
}
long uptime = ((yacyCore.universalTime() - Long.parseLong(sb.getConfig("startupTime", "0"))) / 1000) / 60;
long uptime = ((System.currentTimeMillis() - Long.parseLong(sb.getConfig("startupTime", "0"))) / 1000) / 60;
long indexedc = sb.getThread("80_indexing").getBusyCycles();
seedDB.mySeed.put("ISpeed", ((indexedc == 0) || (uptime == 0)) ? "unknown" : Long.toString(indexedc / uptime)); // the speed of indexing (pages/minute) of the peer
seedDB.mySeed.put("Uptime", Long.toString(uptime)); // the number of minutes that the peer is up in minutes/day (moving average MA30)
@ -120,7 +120,8 @@ public class yacyPeerActions {
seedDB.mySeed.put("seedURL", sb.getConfig("seedURL", ""));
}
seedDB.mySeed.setFlagDirectConnect(true);
seedDB.mySeed.put("LastSeen", yacyCore.universalDateShortString());
seedDB.mySeed.put("LastSeen", yacyCore.universalDateShortString(new Date()));
seedDB.mySeed.put("UTC", serverDate.UTCDiffString());
seedDB.mySeed.setFlagAcceptRemoteCrawl(sb.getConfig("crawlResponse", "").equals("true"));
seedDB.mySeed.setFlagAcceptRemoteIndex(sb.getConfig("allowReceiveIndex", "").equals("true"));
//mySeed.setFlagAcceptRemoteIndex(true);
@ -169,7 +170,7 @@ public class yacyPeerActions {
enu = seedList.elements();
lc = 0;
while (enu.hasMoreElements()) {
ys = yacySeed.genRemoteSeed((String) enu.nextElement(), null, new Date());
ys = yacySeed.genRemoteSeed((String) enu.nextElement(), null);
if ((ys != null) && (ys.isProper() == null) &&
((seedDB.mySeed == null) || (seedDB.mySeed.hash != ys.hash))) {
if (connectPeer(ys, false)) lc++;
@ -265,45 +266,44 @@ public class yacyPeerActions {
}
// connection time
long ctime;
try {
ctime = yacyCore.shortFormatter.parse(seed.get("LastSeen", "20040101000000")).getTime();
// maybe correct it slightly
long nowUTC0Time = System.currentTimeMillis(); // is better to have this value in a variable for debugging
long ctimeUTC0;
ctimeUTC0 = seed.getLastSeenTime();
// maybe correct it slightly
/*
if (ctime > yacyCore.universalTime()) {
ctime = ((2 * ctime) + yacyCore.universalTime()) / 3;
seed.put("LastSeen", yacyCore.shortFormatter.format(new Date(ctime)));
}
} catch (java.text.ParseException e) {
ctime = yacyCore.universalTime();
} catch (java.lang.NumberFormatException e) {
ctime = yacyCore.universalTime();
}
if (Math.abs(yacyCore.universalTime() - ctime) > 3600000) {
*/
if (Math.abs(nowUTC0Time - ctimeUTC0) > 3600000) {
// the new connection is out-of-age, we reject the connection
yacyCore.log.logFine("connect: rejecting out-dated peer '" + seed.getName() + "' from " + seed.getAddress());
yacyCore.log.logFine("connect: rejecting out-dated peer '" + seed.getName() + "' from " + seed.getAddress() +
"; nowUTC0=" + nowUTC0Time + ", seedUTC0=" + ctimeUTC0);
return false;
}
// disconnection time
long dtime;
long dtimeUTC0;
yacySeed disconnectedSeed = seedDB.getDisconnected(seed.hash);
if (disconnectedSeed == null) {
dtime = 0; // never disconnected: virtually disconnected maximum time ago
dtimeUTC0 = 0; // never disconnected: virtually disconnected maximum time ago
} else try {
dtime = yacyCore.shortFormatter.parse((String) disconnectedSeed.get("disconnected", "20040101000000")).getTime();
dtimeUTC0 = yacyCore.shortFormatter.parse((String) disconnectedSeed.get("disconnected", "20040101000000")).getTime() - seed.getUTCDiff();
} catch (java.text.ParseException e) {
dtime = 0;
dtimeUTC0 = 0;
}
if (direct) {
// remember the moment
ctime = yacyCore.universalTime();
seed.put("LastSeen", yacyCore.shortFormatter.format(new Date(ctime)));
// Date applies the local UTC offset, which is wrong
// we correct that by subtracting the local offset and adding the remote offset.
seed.setLastSeenTime();
seed.setFlagDirectConnect(true);
} else {
// set connection flag
if (Math.abs(yacyCore.universalTime() - ctime) > 120000) seed.setFlagDirectConnect(false); // 2 minutes
if (Math.abs(nowUTC0Time - ctimeUTC0) > 120000) seed.setFlagDirectConnect(false); // 2 minutes
}
// update latest version number
@ -316,7 +316,7 @@ public class yacyPeerActions {
// if the new peer has a LastSeen date, and that date is before the disconnection date,
// then we ignore the new peer
if (!(direct)) {
if (ctime < dtime) {
if (ctimeUTC0 < dtimeUTC0) {
// the disconnection was later, we reject the connection
yacyCore.log.logFine("connect: rejecting disconnected peer '" + seed.getName() + "' from " + seed.getAddress());
return false;
@ -333,7 +333,7 @@ public class yacyPeerActions {
// the seed is known: this is an update
try {
// if the old LastSeen date is later then the other info, then we reject the info
if ((ctime < yacyCore.shortFormatter.parse(connectedSeed.get("LastSeen", "20040101000000")).getTime()) && (!(direct))) {
if ((ctimeUTC0 < (yacyCore.shortFormatter.parse(connectedSeed.get("LastSeen", "20040101000000")).getTime() - connectedSeed.getUTCDiff() + serverDate.UTCDiff())) && (!(direct))) {
yacyCore.log.logFine("connect: rejecting old info about peer '" + seed.getName() + "'");
return false;
}
@ -364,7 +364,7 @@ public class yacyPeerActions {
// we do this if we did not get contact with the other peer
yacyCore.log.logFine("connect: no contact to a " + seed.get("PeerType", "virgin") + " peer '" + seed.getName() + "' at " + seed.getAddress());
if (!(seedDB.hasDisconnected(seed.hash))) disconnects++;
seed.put("disconnected", yacyCore.universalDateShortString());
seed.put("disconnected", yacyCore.universalDateShortString(new Date()));
seedDB.addDisconnected(seed); // update info
}

@ -69,9 +69,11 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import de.anomic.net.natLib;
import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.serverCodings;
import de.anomic.server.serverDate;
import de.anomic.server.serverCore;
import de.anomic.tools.bitfield;
import de.anomic.tools.crypt;
@ -89,6 +91,16 @@ public class yacySeed {
public static final String PEERTYPE_PRINCIPAL = "principal";
public static final String PEERTYPE = "PeerType";
public static final String STR_YOURTYPE = "yourtype";
public static final String STR_LASTSEEN = "LastSeen";
public static final String STR_IP = "IP";
public static final String STR_YOURIP = "yourip";
public static final String STR_MYTIME = "mytime";
public static final String STR_SEED = "seed";
public static final String STR_EQUAL = "=";
// class variables
public String hash;
private Map dna;
@ -110,6 +122,7 @@ public class yacySeed {
this.hash = hash; // the hash key of the peer - very important. should be static somehow, even after restart
dna.put("Name", "&empty;"); // the name that the peer has given itself
dna.put("BDate", "&empty;"); // birthdate - first startup
dna.put("UTC", "+0000");
// later during operation -
dna.put("ISpeed", "0"); // the speed of indexing (pages/minute) of the peer
dna.put("Uptime", "0"); // the number of minutes that the peer is up in minutes/day (moving average MA30)
@ -127,7 +140,7 @@ public class yacySeed {
dna.put("IPType", "&empty;"); // static/dynamic (if the ip changes often for any reason)
// settings that can only be computed by visiting peer
dna.put("LastSeen", yacyCore.universalDateShortString()); // for last-seen date
dna.put("LastSeen", yacyCore.universalDateShortString(new Date())); // for last-seen date
dna.put("USpeed", "0"); // the computated uplink speed of the peer
// settings that are needed to organize the seed round-trip
@ -209,7 +222,34 @@ public class yacySeed {
String port = (String) dna.get("Port");
if (ip != null && ip.length() >= 8 && port != null && port.length() >= 2) return ip + ":" + port; else return null;
}
public long getUTCDiff() {
String utc = (String) dna.get("UTC");
if (utc == null) utc = "+0200";
return serverDate.UTCDiff(utc);
}
public long getLastSeenTime() {
try {
long t = yacyCore.shortFormatter.parse(get("LastSeen", "20040101000000")).getTime();
// the problem here is: getTime applies a time shift according to local time zone:
// it substracts the local UTF offset, but it should substract the remote UTC offset
// so we correct it by first adding the local UTF offset and then subtractibg the remote
// but the time zone was originally the seeds time zone
// we correct this here
return t - getUTCDiff() + serverDate.UTCDiff();
} catch (java.text.ParseException e) {
return System.currentTimeMillis();
} catch (java.lang.NumberFormatException e) {
return System.currentTimeMillis();
}
}
public void setLastSeenTime() {
// if we set a last seen time, then we need to respect the seeds UTC offset
put("LastSeen", yacyCore.shortFormatter.format(new Date(System.currentTimeMillis() - serverDate.UTCDiff() + getUTCDiff())));
}
public int getPPM() {
try {
return Integer.parseInt(get("ISpeed", "0"));
@ -352,21 +392,22 @@ public class yacySeed {
} else {
newSeed.dna.put("Port", sb.getConfig("port", "8080"));
}
newSeed.dna.put("BDate", yacyCore.universalDateShortString());
newSeed.dna.put("BDate", yacyCore.universalDateShortString(new Date()));
newSeed.dna.put("LastSeen", newSeed.dna.get("BDate")); // just as initial setting
newSeed.dna.put("UTC", serverDate.UTCDiffString());
newSeed.dna.put(PEERTYPE, PEERTYPE_VIRGIN);
return newSeed;
}
public static yacySeed genRemoteSeed(String seedStr, String key, Date remoteTime) {
// this method is used to convert the external representation of a seed into a seed object
if (seedStr == null) return null;
String seed = crypt.simpleDecode(seedStr, key);
if (seed == null) return null;
HashMap dna = serverCodings.string2map(seed);
String hash = (String) dna.remove("Hash");
return new yacySeed(hash, dna);
public static yacySeed genRemoteSeed(String seedStr, String key) {
// this method is used to convert the external representation of a seed into a seed object
if (seedStr == null) return null;
String seed = crypt.simpleDecode(seedStr, key);
if (seed == null) return null;
HashMap dna = serverCodings.string2map(seed);
String hash = (String) dna.remove("Hash");
return new yacySeed(hash, dna);
}
public String toString() {
@ -416,7 +457,7 @@ public class yacySeed {
char[] b = new char[(int) f.length()];
fr.read(b, 0, b.length);
fr.close();
return genRemoteSeed(new String(b), null, new Date());
return genRemoteSeed(new String(b), null);
}
public Object clone() {

@ -298,7 +298,6 @@ public final class yacySeedDB {
// fill a score object
kelondroMScoreCluster seedScore = new kelondroMScoreCluster();
yacySeed ys;
String t;
long absage;
Enumeration s = seedsConnected(true, false, null);
int searchcount = 1000;
@ -306,8 +305,8 @@ public final class yacySeedDB {
try {
while ((s.hasMoreElements()) && (searchcount-- > 0)) {
ys = (yacySeed) s.nextElement();
if ((ys != null) && ((t = ys.get("LastSeen", "")).length() > 10)) try {
absage = Math.abs(yacyCore.universalTime() - yacyCore.shortFormatter.parse(t).getTime());
if ((ys != null) && (ys.get("LastSeen", "").length() > 10)) try {
absage = Math.abs(System.currentTimeMillis() - ys.getLastSeenTime());
seedScore.addScore(ys.hash, (int) absage);
} catch (Exception e) {}
}

@ -59,6 +59,7 @@ import java.util.Properties;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.anomic.data.translator;
import de.anomic.http.httpHeader;
import de.anomic.http.httpc;
@ -72,8 +73,9 @@ import de.anomic.plasma.plasmaWordIndexEntity;
import de.anomic.plasma.plasmaWordIndexEntry;
import de.anomic.plasma.plasmaWordIndexClassicDB;
import de.anomic.plasma.plasmaWordIndexCache;
import de.anomic.server.serverCodings;
import de.anomic.server.serverCore;
import de.anomic.server.serverDate;
import de.anomic.server.serverCodings;
import de.anomic.server.serverFileUtils;
import de.anomic.server.serverSystem;
import de.anomic.server.logging.serverLog;
@ -166,7 +168,7 @@ public final class yacy {
* @param startupFree free memory at startup time, to be used later for statistics
*/
private static void startup(String homePath, long startupMemFree, long startupMemTotal) {
long startup = yacyCore.universalTime();
long startup = System.currentTimeMillis();
try {
// start up
@ -181,14 +183,19 @@ public final class yacy {
Thread.currentThread().sleep(3000);
System.exit(-1);
}
// ensure that there is a DATA directory
File f = new File(homePath); if (!(f.exists())) f.mkdirs();
f = new File(homePath, "DATA/"); if (!(f.exists())) f.mkdirs();
// setting up logging
if (!((new File(homePath, "DATA/LOG/yacy.logging")).exists())) try {
serverFileUtils.copy(new File(homePath, "yacy.logging"), new File(homePath, "DATA/LOG/yacy.logging"));
}catch (IOException e){
System.out.println("could not copy yacy.logging");
}
try{
f = new File(homePath, "DATA/LOG/"); if (!(f.exists())) f.mkdirs();
if (!((new File(homePath, "DATA/LOG/yacy.logging")).exists())) try {
serverFileUtils.copy(new File(homePath, "yacy.logging"), new File(homePath, "DATA/LOG/yacy.logging"));
}catch (IOException e){
System.out.println("could not copy yacy.logging");
}
try{
serverLog.configureLogging(new File(homePath, "DATA/LOG/yacy.logging"));
} catch (IOException e) {
System.out.println("could not find logging properties in homePath=" + homePath);
@ -198,6 +205,7 @@ public final class yacy {
serverLog.logConfig("STARTUP", hline);
serverLog.logConfig("STARTUP", "java version " + System.getProperty("java.version", "no-java-version"));
serverLog.logConfig("STARTUP", "Application Root Path: " + homePath);
serverLog.logConfig("STARTUP", "Time Zone: UTC" + serverDate.UTCDiffString() + "; UTC+0000 is " + System.currentTimeMillis());
// create data folder
final File dataFolder = new File(homePath, "DATA");

Loading…
Cancel
Save