more files
authoradash <adash>
Fri, 30 Oct 2009 17:55:44 +0000 (17:55 +0000)
committeradash <adash>
Fri, 30 Oct 2009 17:55:44 +0000 (17:55 +0000)
Robust/src/Benchmarks/Distributed/SpamFilter/FilterResult.java [new file with mode: 0644]
Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java [new file with mode: 0644]
Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter.java [new file with mode: 0644]

diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/FilterResult.java b/Robust/src/Benchmarks/Distributed/SpamFilter/FilterResult.java
new file mode 100644 (file)
index 0000000..25a98ac
--- /dev/null
@@ -0,0 +1,54 @@
+/**
+ * A FilterResult encapsulates the result of a filter made by checking a mail.
+ **/
+public class FilterResult {
+       /**
+        * This value is used if type is ERROR or UNKNOWN.
+        */
+       public double NO_RESULT;
+
+       /**
+        * A result value greater or equal this value indicates that the filter has
+        * decided on spam.
+        */
+       public double SPAM_THRESHOLD;
+       public double ABSOLUTE_SPAM;
+       public double ABSOLUTE_HAM;
+
+    //TODO decide a good way of deciding
+       public double result; // the result, a value between 0 (ham) and 1 (spam), negative values for "error", "unknown" etc.
+
+       //public HashMap<String,String> properties = new HashMap<String,String>(); // additional properties of the filter (mainly for statistics)
+
+       // -----------------------------------------------------------------------------
+
+       public FilterResult(double result) {
+      SPAM_THRESHOLD=0.5;
+      ABSOLUTE_SPAM=1.0;
+      ABSOLUTE_HAM=0.0;
+      NO_RESULT=-1;
+      this.result = result;
+    }
+
+       public double getResult() {
+               return result;
+       }
+
+       public boolean isSpam() {
+               return result >= SPAM_THRESHOLD;
+       }
+
+    /*
+       public void addProperty(String key, String value) {
+               properties.put(key,value);
+       }
+
+       public String getProperty(String key) {
+               return properties.get(key);
+       }
+
+       public HashMap<String,String> getProperties() {
+               return properties;
+       }
+    */
+}
diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java b/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java
new file mode 100644 (file)
index 0000000..44be482
--- /dev/null
@@ -0,0 +1,194 @@
+/**
+ * This class is a container for all data contained in an Email Message.
+ **/
+public class Mail {
+
+       String header; // the full header
+       //String sentOn; // time the message was sent
+       //String receivedOn; // time when the message arrived
+       String from; // the "from" field
+       String to; // the "to" field
+       String cc;  
+       String subject;
+       String body;
+       String sourceCode;
+       boolean hasAttachement;
+       //String encoding; //rich text, plain, html
+
+       String messageID; // cached message ID for reuse (takes a lot of memory and is used all over the place)
+                      //same as hashcode of a class
+
+    public Mail() {
+      messageID=null;
+    }
+
+       // -------------------------------------------------------
+
+       public void setHeader(String header) {
+               this.header = header;
+       }
+
+       public String getHeader() {
+               return header;
+       }
+
+       public void setSentOn(String sentOn) {
+               this.sentOn = sentOn;
+       }
+
+       public String getSentOn() {
+               return sentOn;
+       }
+
+    /*
+       public Date getSentOnAsDate() {
+               String sentOn = getSentOn();
+               return parseDate(sentOn);
+       }
+
+       public void setReceivedOn(String receivedOn) {
+               this.receivedOn = receivedOn;
+       }
+
+       public String getReceivedOn() {
+               return receivedOn;
+       }
+
+       public Date getReceivedOnAsDate() {
+               String receivedOn = getReceivedOn();
+               return parseDate(receivedOn);
+       }
+    */
+
+       /**
+        * Parses a given Date-String in into a real Date-Object
+        * 
+        * @param stringDate the string in format dd.mm.yyyy hh:mm
+        * @return a Date containing the info of the string or the actual date and time if something fails.
+        */
+    /*
+       public Date parseDate(String stringDate) {
+               // date is in this format: dd.mm.yyyy hh:mm
+               if (stringDate == null || "N/A".equals(stringDate)) {
+                       return new Date();
+               }
+               try {
+                       synchronized (MAIL_TIME_FORMAT) {
+                               return MAIL_TIME_FORMAT.parse(stringDate);
+                       }
+               } catch (Throwable e) {
+                       return new Date();
+               }
+       }
+    */
+
+       public void setFrom(String from) {
+               this.from = from;
+       }
+
+       public String getFrom() {
+               return from;
+       }
+
+       public void setTo(String to) {
+               this.to = to;
+       }
+
+       public String getTo() {
+               return to;
+       }
+
+       public void setCc(String cc) {
+               this.cc = cc;
+       }
+
+       public String getCc() {
+               return cc;
+       }
+
+       public void setSubject(String subject) {
+               this.subject = subject;
+       }
+
+       public String getSubject() {
+               return subject;
+       }
+
+       public void setBody(String body) {
+               this.body = body;
+       }
+
+       public String getBody() {
+               return body;
+       }
+
+       public void setSourceCode(String sourceCode) {
+               this.sourceCode = sourceCode;
+       }
+
+       public String getSourceCode() {
+               return sourceCode;
+       }
+
+       // TODO: String? Is this a boolean, a number, or can be both?
+       public void setHasAttachement(boolean hasAttachement) {
+               this.hasAttachement = hasAttachement;
+       }
+
+       public boolean getHasAttachement() {
+               return hasAttachement;
+       }
+
+       public void setEncoding(String encoding) {
+               this.encoding = encoding;
+       }
+
+       public String getEncoding() {
+               return encoding;
+       }
+
+       public boolean isTextEncoding() {
+               return getEncoding().toLowerCase().indexOf("plain") >= 0;
+       }
+
+       public boolean isHTMLEncoding() {
+               return getEncoding().toLowerCase().indexOf("html") >= 0;
+       }
+
+       public String toString() {
+               return getBody() + "," + getCc() + "," + getEncoding() + "," + getFrom() + "," + getHasAttachement() + "," + getHeader() + "," + getReceivedOn() + "," + getSentOn() + "," + getSourceCode() + "," + getSubject() + "," + getTo();
+       }
+
+    /*
+       public String getID() {
+               if (messageID == null) { // no cached version
+                       // Take the message-ID header as ID (if present)
+                       String[] messageIDs = getHeaderField("Message-ID");
+                       if ((messageIDs != null) && (messageIDs.length > 0)) {
+                               messageID = messageIDs[0];
+                       } else { // otherwise, hash header and body as ID
+                               return String.valueOf(getHeader().hashCode() + getBody().hashCode());
+                       }
+               }
+
+               return messageID;
+       }
+    */
+
+       public String[] getHeaderField(String fieldName) {
+
+       }
+
+    public String extractEMailAddress() {
+
+       }
+
+       public boolean equals(Object o) {
+               if (o instanceof Mail) {
+                       Mail mail = (Mail)o;
+                       return this.getID().equals(mail.getID());
+               }
+
+               return false;
+       }
+}
diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter.java b/Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter.java
new file mode 100644 (file)
index 0000000..f65ba8b
--- /dev/null
@@ -0,0 +1,124 @@
+public class SpamFilter extends Thread {
+  DistributedHashMap mydhmap;
+  int id; //thread id
+  int numiter;
+  int numemail;
+  /**
+   * Total number of threads
+   **/
+  int nthreads;
+
+  public SpamFilter() {
+
+  }
+
+  public SpamFilter(int numiter, int numemail,int threadid) {
+    this.numiter=numiter;
+    this.numemail=numemail;
+    this.id = id;
+  }
+
+  public void run() {
+    int niter;
+    int nemails
+    atomic {
+      niter=numiter;
+      nemails=numemails;
+    }
+
+    Random rand = new Random(0);
+
+    for(int i=0; i<niter; i++) {
+      for(int j=0; j<nemails; j++) {
+        int pickemail = rand.nextInt(100);
+        //String email = getEmail(pickemail);
+        //checkMails(email);
+      }
+    }
+  }
+
+  public static void main(String[] args) {
+    int nthreads;
+    int[] mid = new int[8];
+    mid[0] = (128<<24)|(195<<16)|(136<<8)|162; //dc-1.calit2
+    mid[1] = (128<<24)|(195<<16)|(136<<8)|163; //dc-2.calit2
+    mid[2] = (128<<24)|(195<<16)|(136<<8)|164; //dc-3.calit2
+    mid[3] = (128<<24)|(195<<16)|(136<<8)|165; //dc-4.calit2
+    mid[4] = (128<<24)|(195<<16)|(136<<8)|166; //dc-5.calit2
+    mid[5] = (128<<24)|(195<<16)|(136<<8)|167; //dc-6.calit2
+    mid[6] = (128<<24)|(195<<16)|(136<<8)|168; //dc-7.calit2
+    mid[7] = (128<<24)|(195<<16)|(136<<8)|169; //dc-8.calit2
+
+
+    /**
+     * Read options from command prompt
+     **/
+    SpamFilter sf = new SpamFilter();
+    SpamFilter.parseCmdLine(args, sf);
+
+    /**
+     * Create Global data structure 
+     **/
+    DistributedHashMap dhmap;
+    atomic {
+      dhmap = global new DistributedHashMap(500, 0.75f);
+    }
+    //3. N times iteration of work that needs to be done
+    //     by each client
+
+  }
+
+  public static void parseCmdLine(String args[], SpamFilter sf) {
+    int i = 0;
+    String arg;
+    while (i < args.length && args[i].startsWith("-")) {
+      arg = args[i++];
+      //check options
+      if(arg.equals("-n")) { //num of iterations
+        if(i < args.length) {
+          sf.numiter = new Integer(args[i++]).intValue();
+        }
+      } else if(arg.equals("-e")) { //num of emails
+        if(i < args.length) {
+          sf.numemail = new Integer(args[i++]).intValue();
+        }
+      } else if(arg.equals("-t")) { //num of threads
+        if(i < args.length) {
+          sf.threshold = new Integer(args[i++]).intValue();
+        }
+      } else if(arg.equals("-h")) {
+        sf.usage();
+      }
+    }
+    if(sf.nthreads == 0) {
+      sf.usage();
+    }
+  }
+
+  /**
+   * The usage routine describing the program
+   **/
+  public void usage() {
+    System.out.println("usage: ./spamfilter -n <num iterations> -e <num emails> -t <num threads>\n");
+    System.out.println(                   "  -n : num iterations");
+    System.out.println(                   "  -e : number of emails");
+    System.out.println(                   "  -t : number of threads");
+  }
+
+  /**
+   *  Returns signatures to the Spam filter
+   **/
+  public FilterResult[] checkMail(Mail mail) {
+    //Preprocess emails
+      //StringBuffer[] mailStrings = createMailStrings();
+    //Compute signatures
+      //CommunicationEngine checkEngine = getCheckEngine();
+      //SignatureComputer sigComp = new SignatureComputer();
+    //check with global data structure
+
+    //return results
+    FilterResult[] filterResults = new FilterResult[mailStrings.length];
+
+    return filterResults;
+  } 
+}