From 2f1afd97806e78f1801bf007f60b5798661641bb Mon Sep 17 00:00:00 2001 From: Erlend Klakegg Bergheim Date: Fri, 8 Jun 2012 10:09:42 +0200 Subject: [PATCH] Save amount of pages and posts when setting timestamp in cache. --- .../difi/datahotel/slave/logic/ChunkEJB.java | 12 ++- .../difi/datahotel/slave/logic/IndexEJB.java | 7 +- .../difi/datahotel/util/shared/Timestamp.java | 81 +++++++++++++++++-- 3 files changed, 87 insertions(+), 13 deletions(-) diff --git a/slave/src/main/java/no/difi/datahotel/slave/logic/ChunkEJB.java b/slave/src/main/java/no/difi/datahotel/slave/logic/ChunkEJB.java index e89e515..98bd23c 100644 --- a/slave/src/main/java/no/difi/datahotel/slave/logic/ChunkEJB.java +++ b/slave/src/main/java/no/difi/datahotel/slave/logic/ChunkEJB.java @@ -33,9 +33,12 @@ public File getFullDataset(Metadata metadata) { public void update(Metadata metadata) { Logger logger = metadata.getLogger(); + Timestamp ts = new Timestamp(FOLDER_CACHE_CHUNK, metadata.getLocation(), "timestamp"); - File tsfile = Filesystem.getFile(FOLDER_CACHE_CHUNK, metadata.getLocation(), "timestamp"); - if (metadata.getUpdated() == Timestamp.getTimestamp(tsfile)) { + if (metadata.getUpdated() == ts.getTimestamp()) { + posts.put(metadata.getLocation(), ts.getLong("posts")); + pages.put(metadata.getLocation(), ts.getLong("pages")); + logger.info("Chunk up to date."); return; } @@ -78,7 +81,10 @@ public void update(Metadata metadata) { posts.put(metadata.getLocation(), counter); pages.put(metadata.getLocation(), number); - Timestamp.setTimestamp(tsfile, metadata.getUpdated()); + ts.setTimestamp(metadata.getUpdated()); + ts.set("posts", counter); + ts.set("pages", number); + ts.save(); } catch (Exception e) { // TODO Start sending exceptions. logger.log(Level.WARNING, e.getMessage(), e); diff --git a/slave/src/main/java/no/difi/datahotel/slave/logic/IndexEJB.java b/slave/src/main/java/no/difi/datahotel/slave/logic/IndexEJB.java index 20fdad5..55342b6 100644 --- a/slave/src/main/java/no/difi/datahotel/slave/logic/IndexEJB.java +++ b/slave/src/main/java/no/difi/datahotel/slave/logic/IndexEJB.java @@ -44,9 +44,9 @@ public void delete(String location) { public void update(Metadata metadata) { Logger logger = metadata.getLogger(); + Timestamp ts = new Timestamp(FOLDER_CACHE_INDEX, metadata.getLocation(), "timestamp"); - File tsfile = Filesystem.getFile(FOLDER_CACHE_INDEX, metadata.getLocation(), "timestamp"); - if (metadata.getUpdated() == Timestamp.getTimestamp(tsfile)) { + if (metadata.getUpdated() == ts.getTimestamp()) { logger.info("Index up to date."); return; } @@ -101,7 +101,8 @@ public void update(Metadata metadata) { writer.close(); dir.close(); - Timestamp.setTimestamp(tsfile, metadata.getUpdated()); + ts.setTimestamp(metadata.getUpdated()); + ts.save(); } catch (Exception e) { logger.log(Level.WARNING, e.getMessage(), e); } diff --git a/util/src/main/java/no/difi/datahotel/util/shared/Timestamp.java b/util/src/main/java/no/difi/datahotel/util/shared/Timestamp.java index 30e396e..09a5ded 100644 --- a/util/src/main/java/no/difi/datahotel/util/shared/Timestamp.java +++ b/util/src/main/java/no/difi/datahotel/util/shared/Timestamp.java @@ -5,17 +5,82 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; +import com.google.gson.Gson; + public class Timestamp { + private static Logger logger = Logger.getLogger(Timestamp.class.getSimpleName()); + private static Gson gson = new Gson(); + + private File tsfile; + private Map data = new HashMap(); + + public Timestamp(String... path) { + this(Filesystem.getFile(path)); + } + + @SuppressWarnings("unchecked") + public Timestamp(File tsfile) { + this.tsfile = tsfile; + + if (tsfile.exists()) { + try { + FileReader reader = new FileReader(tsfile); + data = (Map) gson.fromJson(reader, Map.class); + reader.close(); + } catch (Exception e) { + logger.log(Level.WARNING, e.getMessage()); + } + } + } + + public void setTimestamp(long timestamp) { + data.put("timestamp", String.valueOf(timestamp)); + } + + public long getTimestamp() { + return data.containsKey("timestamp") ? Long.parseLong(data.get("timestamp")) : -1; + } + + public void set(String key, String value) { + data.put(key, value); + } + + public void set(String key, long value) { + set(key, String.valueOf(value)); + } + + public String get(String key) { + return data.get(key); + } + + public long getLong(String key) { + return data.containsKey(key) ? Long.parseLong(data.get(key)) : 0; + } + + public void save() { + try { + FileWriter writer = new FileWriter(tsfile); + gson.toJson(data, writer); + writer.close(); + } catch (Exception e) { + logger.log(Level.WARNING, e.getMessage()); + } + } + + @Deprecated public static long getTimestamp(File tsfile) { try { FileReader fReader = new FileReader(tsfile); BufferedReader bReader = new BufferedReader(fReader); - + long timestamp = Long.parseLong(bReader.readLine()); - + bReader.close(); fReader.close(); @@ -24,19 +89,21 @@ public static long getTimestamp(File tsfile) { return -1; } } - + + @Deprecated public static void setTimestamp(File tsfile, long timestamp) { try { FileWriter fWriter = new FileWriter(tsfile); BufferedWriter bWriter = new BufferedWriter(fWriter); - + bWriter.write(String.valueOf(timestamp)); - + bWriter.close(); fWriter.close(); } catch (Exception e) { - Logger.getLogger(Timestamp.class.getSimpleName()).warning("Failed to write timestamp file: " + tsfile.getAbsolutePath()); + Logger.getLogger(Timestamp.class.getSimpleName()).warning( + "Failed to write timestamp file: " + tsfile.getAbsolutePath()); } } - + }