From 34edf1058acecc800e2fdeda802a6f8bbf7e4f70 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Sat, 10 Nov 2007 01:08:43 +0000 Subject: [PATCH] new benchmark --- .../Benchmarks/Conglomerator/Tag/Google.java | 10 ++ .../Conglomerator/Tag/Inventory.java | 91 +++++++++++ .../Conglomerator/Tag/ItemInfo.java | 8 + .../Benchmarks/Conglomerator/Tag/Logger.java | 29 ++++ .../Benchmarks/Conglomerator/Tag/Lookup.java | 40 +++++ .../Conglomerator/Tag/MySocket.java | 6 + .../Tag/Nrm/WebServerExample.java | 135 +++++++++++++++++ .../Tag/Opt/WebServerExampleOpt.java | 139 +++++++++++++++++ .../Benchmarks/Conglomerator/Tag/Stock.java | 10 ++ .../Benchmarks/Conglomerator/Tag/Weather.java | 9 ++ .../Conglomerator/Tag/WebServerSocket.java | 141 ++++++++++++++++++ 11 files changed, 618 insertions(+) create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Google.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Inventory.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/ItemInfo.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Logger.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Lookup.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/MySocket.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Nrm/WebServerExample.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Opt/WebServerExampleOpt.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Stock.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/Weather.java create mode 100644 Robust/src/Benchmarks/Conglomerator/Tag/WebServerSocket.java diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Google.java b/Robust/src/Benchmarks/Conglomerator/Tag/Google.java new file mode 100644 index 00000000..496017ad --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Google.java @@ -0,0 +1,10 @@ +public class Google extends Lookup{ + public Google() { + url=""; + hostname="www.google.com"; + start=""; + end=""; + exclusive=true; + } + +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Inventory.java b/Robust/src/Benchmarks/Conglomerator/Tag/Inventory.java new file mode 100644 index 00000000..74756956 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Inventory.java @@ -0,0 +1,91 @@ +public class Inventory { + // Inventory flags + flag TransInitialize; + + // Transaction variables + int numitems; + HashMap map; + int balance; + + // Constructor + public Inventory(){ + map = new HashMap(); + balance=100000; + } + + public Inventory(int howmany) { + numitems = howmany;// howmany keeps track of the number of items + // in the inventory + map = new HashMap(); + } + + // Add item to a list of inventory + public int additem(String name, int quantity, int price){ + ItemInfo newitem = new ItemInfo(quantity, price); + balance-=quantity*price; + + // Get the item from hash + if (map.containsKey(name) == false) { + map.put(name, newitem); + } else { + ItemInfo i = (ItemInfo) map.get(name); + i.quantity += quantity; + i.price = price; + map.put(name, i); + } + return 0; + } + + // Buy item from a given list of inventory + public int buyitem(String name, int quantity){ + if (map.containsKey(name) == false) { + // System.printString("Error - Item does not exist"); + return -1; + } else { + ItemInfo i = (ItemInfo) map.get(name); + if (i.quantity == 0) { + // System.printString("Error - Item unavailable"); + return -1; + } + if ((i.quantity-quantity) < 0 ) { + // System.printString("Error - Available qty is less: Cannot Buy\n"); + return -1; + } else { + i.quantity -= quantity; + map.put(name, i); + balance+=quantity*i.price; + return i.price; + } + } + return 0; + } + + //Display the inventory list + //Display the inventory list + public synchronized void inventory(Socket s){ + HashMapIterator i = new HashMapIterator(map, 0);// Gets key from the hashmap= name of item + HashMapIterator j = new HashMapIterator(map, 1);//Gets the value from hashmap + int totalvalue=balance; + while (i.hasNext() == true) { + StringBuffer sb = new StringBuffer(""); + Object o = i.next(); + String name = o.toString(); + ItemInfo oo = (ItemInfo) j.next(); + sb.append(name); + sb.append(" "); + Integer q = new Integer(oo.quantity); + sb.append(q.toString()); + sb.append(" "); + Integer p = new Integer(oo.price); + sb.append(p.toString()); + sb.append("\n"); + totalvalue+=oo.quantity*oo.price; + s.write(sb.toString().getBytes()); + } + StringBuffer sb=new StringBuffer(""); + sb.append("Total value: "); + sb.append((new Integer(totalvalue)).toString()); + sb.append("\n"); + s.write(sb.toString().getBytes()); + } +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/ItemInfo.java b/Robust/src/Benchmarks/Conglomerator/Tag/ItemInfo.java new file mode 100644 index 00000000..18a61a59 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/ItemInfo.java @@ -0,0 +1,8 @@ +class ItemInfo { + int quantity; + int price; + ItemInfo(int x, int y) { + quantity = x; + price = y; + } +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Logger.java b/Robust/src/Benchmarks/Conglomerator/Tag/Logger.java new file mode 100644 index 00000000..a23cc4fa --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Logger.java @@ -0,0 +1,29 @@ +public class Logger { + //Logger flag + flag Initialize; + FileOutputStream fos; + + + //Constructor + public Logger(){ + fos=new FileOutputStream("request.log");//Open request.log file + } + + //Logs filename as per client requests + public void logrequest(String filename){ + String request = new String("\nNew Request received: "); + fos.write(request.getBytes()); + fos.write(filename.getBytes()); + fos.flush(); + } + + public void logrequest(){ + String request = new String("\nNew Request received: "); + fos.write(request.getBytes()); + fos.flush(); + } + + public void closerequest() { + fos.close(); + } +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Lookup.java b/Robust/src/Benchmarks/Conglomerator/Tag/Lookup.java new file mode 100644 index 00000000..8e358253 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Lookup.java @@ -0,0 +1,40 @@ +public class Lookup extends Socket { + flag query; + flag initialstate; + flag done; + + boolean exclusive; + String url; + String hostname; + String data; + String start; + String end; + + public void fix() { + int istart=data.indexOf(start); + int iend=data.indexOf(end); + if (exclusive) + data=data.substring(istart+start.length(), iend); + else + data=data.substring(istart, iend+end.length()); + String m1="src=\"/"; + String m2="src=\'/"; + String m3="href=\"/"; + boolean cnt=true; + while(cnt) { + if (data.indexOf(m1)!=-1) { + int index=data.indexOf(m1)-1; + data=data.substring(0,index+m1.length())+"http://"+hostname+data.substring(index+m1.length(),data.length()); + } else if (data.indexOf(m2)!=-1) { + int index=data.indexOf(m2)-1; + data=data.substring(0,index+m2.length())+"http://"+hostname+data.substring(index+m2.length(),data.length()); + } else if (data.indexOf(m3)!=-1) { + int index=data.indexOf(m3)-1; + data=data.substring(0,index+m3.length())+"http://"+hostname+data.substring(index+m3.length(),data.length()); + } else cnt=false; + } + + } + + +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/MySocket.java b/Robust/src/Benchmarks/Conglomerator/Tag/MySocket.java new file mode 100644 index 00000000..0cd3befa --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/MySocket.java @@ -0,0 +1,6 @@ +public class MySocket extends Socket { + public MySocket() { + } + + +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Nrm/WebServerExample.java b/Robust/src/Benchmarks/Conglomerator/Tag/Nrm/WebServerExample.java new file mode 100644 index 00000000..c908bdf3 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Nrm/WebServerExample.java @@ -0,0 +1,135 @@ +/* Startup object is generated with the initialstate flag set by the + * system to start the computation up */ + +// Create New ServerSocket +task Startup(StartupObject s {initialstate}) { + ServerSocket ss = new ServerSocket(9000); + Logger log = new Logger() {Initialize}; + Inventory inventorylist = new Inventory(){TransInitialize}; + taskexit(s {!initialstate}); /* Turns initial state flag off, so this task won't refire */ +} + +task LookupS(Stock l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryS(Stock l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + +task LookupG(Google l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryG(Google l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + +task LookupW(Weather l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryW(Weather l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + + + +//Listen for a request and accept request +task AcceptConnection(ServerSocket ss{SocketPending}) { + // System.printString("W> Waiting for connection...\n"); + tag t=new tag(link); + WebServerSocket web = new WebServerSocket() {!WritePending, !TransPending, WebInitialize}{t}; + MySocket ms=new MySocket(){}{t}; + ss.accept(ms); +// System.printString("W> Connected... \n"); +} + +// Process the incoming http request +task ProcessRequest(WebServerSocket web{WebInitialize}{link l}, MySocket s{IOPending}{link l}) { + if (web.clientrequest(s)) { + if(web.checktrans()==false) + // Not special transaction , do normal filesending + taskexit(web {WritePending, LogPending,!WebInitialize}); //Sets the WritePending and LogPending flag true + else { + Weather w=new Weather(){initialstate}{l}; + Google g=new Google(){initialstate}{l}; + Stock st=new Stock(){initialstate}{l}; + taskexit(web {TransPending, LogPending,!WebInitialize}); + } + } +} + +//Do the WriteIO on server socket and send the requested file to Client +task SendFile(WebServerSocket web{WritePending}{link l}, MySocket s{}{link l}) { +// System.printString("W> Inside SendFile ... \n"); + web.sendfile(s); + s.close(); + taskexit(web {!WritePending}); +} + +// Log the Client request +task LogRequest(WebServerSocket web{LogPending}, Logger log{Initialize}) { +//Task fired when both +// LogPending and Initialize flags are true +// System.printString("L > Inside logrequest\n"); + log.logrequest(web.filename); + taskexit(web {!LogPending}); +} + +//Transaction on Inventory +task Transaction(WebServerSocket web{TransPending}{link l}, Weather weather{done}{link l}, Google g{done}{link l}, MySocket s{}{link l}, Stock st{done}{link l}){ //Task for WebServerTransactions + web.httpresponse(s); + s.write(("").getBytes()); + s.write(weather.data.getBytes()); + s.write(g.data.getBytes()); + s.write(st.data.getBytes()); + s.write(("").getBytes()); + s.close(); + taskexit(web {!TransPending}); +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Opt/WebServerExampleOpt.java b/Robust/src/Benchmarks/Conglomerator/Tag/Opt/WebServerExampleOpt.java new file mode 100644 index 00000000..3d66d20f --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Opt/WebServerExampleOpt.java @@ -0,0 +1,139 @@ +/* Startup object is generated with the initialstate flag set by the + * system to start the computation up */ + +// Create New ServerSocket +task Startup(StartupObject s {initialstate}) { + ServerSocket ss = new ServerSocket(9000); + Logger log = new Logger() {Initialize}; + Inventory inventorylist = new Inventory(){TransInitialize}; + taskexit(s {!initialstate}); /* Turns initial state flag off, so this task won't refire */ +} + +task LookupS(Stock l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryS(Stock l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + +task LookupG(Google l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryG(Google l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + +task LookupW(Weather l{initialstate}) { + String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n"; + l.connect(l.hostname, 80); + l.write(query.getBytes()); + taskexit(l{!initialstate, query}); +} + +task ReceiveQueryW(Weather l{query&&IOPending}) { + byte[] buffer=new byte[1024]; + int numchars=l.read(buffer); + if (numchars<=0) { + l.fix(); + l.close(); + taskexit(l{!query,done}{}); + } + String str=new String(buffer, 0, numchars); + if (l.data==null) { + l.data=str; + } else + l.data=l.data+str; + taskexit; +} + + + +//Listen for a request and accept request +task AcceptConnection(ServerSocket ss{SocketPending}) { + // System.printString("W> Waiting for connection...\n"); + tag t=new tag(link); + WebServerSocket web = new WebServerSocket() {!WritePending, !TransPending, WebInitialize}{t}; + MySocket ms=new MySocket(){}{t}; + ss.accept(ms); +// System.printString("W> Connected... \n"); +} + +// Process the incoming http request +task ProcessRequest(WebServerSocket web{WebInitialize}{link l}, MySocket s{IOPending}{link l}) { + if (web.clientrequest(s)) { + if(web.checktrans()==false) + // Not special transaction , do normal filesending + taskexit(web {WritePending, LogPending,!WebInitialize}); //Sets the WritePending and LogPending flag true + else { + Weather w=new Weather(){initialstate}{l}; + Google g=new Google(){initialstate}{l}; + Stock st=new Stock(){initialstate}{l}; + taskexit(web {TransPending, LogPending,!WebInitialize}); + } + } +} + +//Do the WriteIO on server socket and send the requested file to Client +task SendFile(WebServerSocket web{WritePending}{link l}, MySocket s{}{link l}) { +// System.printString("W> Inside SendFile ... \n"); + web.sendfile(s); + s.close(); + taskexit(web {!WritePending}); +} + +// Log the Client request +task LogRequest(WebServerSocket web{LogPending}, Logger log{Initialize}) { +//Task fired when both +// LogPending and Initialize flags are true +// System.printString("L > Inside logrequest\n"); + log.logrequest(web.filename); + taskexit(web {!LogPending}); +} + +//Transaction on Inventory +task Transaction(WebServerSocket web{TransPending}{link l}, optional Weather weather{done}{link l}, optional Google g{done}{link l}, MySocket s{}{link l}, optional Stock st{done}{link l}){ //Task for WebServerTransactions + web.httpresponse(s); + s.write(("").getBytes()); + if (isavailable(weather)) + s.write(weather.data.getBytes()); + if (isavailable(g)) + s.write(g.data.getBytes()); + if (isavailable(st)) { + s.write(st.data.getBytes()); + } + s.write(("").getBytes()); + s.close(); + taskexit(web {!TransPending}); +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Stock.java b/Robust/src/Benchmarks/Conglomerator/Tag/Stock.java new file mode 100644 index 00000000..f9f6ac8e --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Stock.java @@ -0,0 +1,10 @@ +public class Stock extends Lookup { + public Stock() { + url="q?s=%5EDJI"; + hostname="finance.yahoo.com"; + start=""; + end=""; + exclusive=true; + } + +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/Weather.java b/Robust/src/Benchmarks/Conglomerator/Tag/Weather.java new file mode 100644 index 00000000..ea4d7850 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/Weather.java @@ -0,0 +1,9 @@ +public class Weather extends Lookup{ + public Weather() { + url="warnings.php?wfo=sgx&zone=CAZ042&pil=XXXHWOSGX&productType=Hazardous+Weather+Outlook"; + hostname="www.wrh.noaa.gov"; + start="Hazardous Weather Outlook"; + end="$$"; + } + +} diff --git a/Robust/src/Benchmarks/Conglomerator/Tag/WebServerSocket.java b/Robust/src/Benchmarks/Conglomerator/Tag/WebServerSocket.java new file mode 100644 index 00000000..86394fd4 --- /dev/null +++ b/Robust/src/Benchmarks/Conglomerator/Tag/WebServerSocket.java @@ -0,0 +1,141 @@ +public class WebServerSocket { + // Websocket flag + flag LogPending; + flag WritePending; + flag TransPending; + flag WebInitialize; + + //Filename requested by the client + String filename; + String[] parsed; + String prefix; + + //Constructor + public WebServerSocket(){ + parsed = new String[4]; + } + + //Send the http header for web browser display + public void httpresponse(Socket s){ + StringBuffer header = new StringBuffer("HTTP/1.0 200 OK\n"); + header.append("Content-type: text/html\n"); + header.append("\n\n"); + String temp_str = new String(header); + s.write(temp_str.getBytes()); + return; + + } + + // Send the html file , read from file one byte at a time + public void sendfile(Socket s) { + StringBuffer req_file = new StringBuffer("./htmlfiles/"); + req_file.append(filename); + String filepath = new String(req_file); + FileInputStream def_file = new FileInputStream(filepath); + int status = def_file.getfd();//Checks if the file is present in + //current directory + httpresponse(s); + if (status == -1){ + StringBuffer response = new StringBuffer("404: not found: ");//Send 404 error if + // file not found + response.append(filename); + String buffer = new String(response); + s.write(buffer.getBytes()); + def_file.close(); + return; + } + byte buf[] = new byte[16]; + int ret; + + while ((ret = def_file.read(buf)) > 0) {// Read from file and write + // one byte at a time into the socket + byte tosend[] = new byte[ret]; + for (int i = 0; i < ret; i++) { + tosend[i] = buf[i]; + } + s.write(tosend); + //String str = new String(tosend); + } + def_file.close(); + } + + //Read the client request and extract the filename from it + public boolean clientrequest(Socket s){ + byte b1[] = new byte[1024]; + int numbytes=s.read(b1);//Read client request from web server socket + String curr=(new String(b1)).subString(0, numbytes); + if (prefix!=null) { + StringBuffer sb=new StringBuffer(prefix); + sb.append(curr); + curr=sb.toString(); + } + prefix=curr; + if(prefix.indexOf("\r\n\r\n")>=0) { + + int index = prefix.indexOf('/');//Parse the GET client request to find filename + int end = prefix.indexOf('H'); + filename = prefix.subString((index+1), (end-1)); + return true; + } + return false; + } + + // Parse for the prefix in the client request + // This is helpful to find if the prefix is a special transaction + public boolean checktrans(){ + if (filename.startsWith("portal") == true) { + return true; + } else { + return false; + } + } + + //Parse for the substrings in the filename and use it to obtain the + //kind of operation, name of item, quantity of item, price of item + //e.g. trans_add_car_2_10000 is the filename + //store in the parsed[] string , add,car,2,1000 + public int parseTransaction(){ + int start = filename.indexOf('_'); + String s = filename.subString(start+1); + + if (s.startsWith("add")==true){ + // System.printString("DEBUG > ADD\n"); + int i1 = s.indexOf('_'); + parsed[0] = new String(s.subString(0,i1)); + + int i2 = s.indexOf('_',i1+1); + parsed[1] = new String(s.subString(i1+1,i2)); + + int i3 = s.indexOf('_',i2+1); + parsed[2] = new String(s.subString(i2+1,i3)); + + String s3 = s.subString(i3+1); + parsed[3] = s3; + + return 0; + + } + if (s.startsWith("buy")==true){ + // System.printString("DEBUG > BUY\n"); + int i1 = s.indexOf('_'); + parsed[0] = s.subString(0,i1); + + int i2 = s.indexOf('_', i1+1); + parsed[1] = s.subString(i1+1,i2); + + String s2 = s.subString(i2+1); + parsed[2] = s2; + + parsed[3] = ""; + + return 1; + } + if (s.startsWith("inventory")==true){ + // System.printString("DEBUG > INVENTORY\n"); + return 2; + + } + // Error transaction + return -1; + } +} -- 2.34.1