package cloud_project;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import org.json.JSONObject;
/*
import org.siddhi.api.exception.SiddhiPraserException;
import org.siddhi.core.SiddhiManager;
import org.siddhi.core.exception.SiddhiException;
import org.siddhi.core.node.InputHandler;
*/
import org.wso2.siddhi.core.SiddhiManager;
import org.wso2.siddhi.core.event.Event;
import org.wso2.siddhi.core.stream.input.InputHandler;
import org.wso2.siddhi.core.stream.output.StreamCallback;
import org.wso2.siddhi.core.util.EventPrinter;
@Path("server")
public class DataServer
{
@GET
@Produces(MediaType.TEXT_HTML)
public String getData(
@DefaultValue("") @QueryParam("sensors") String in
) throws InterruptedException
{
WebTarget target;
Client c;
String responseMsg;
JSONObject obj;
// sensor's id.
String sensor1_id = "ci4zftqww0002032zeskt2yuc"; // IISc sensor.
String sensor2_id = "ci4yfbbdb000d03zzoq8kjdl0"; // Urban Launchpad, San Francisco
String sensor3_id = "ci4usvryz000202s7llxjafaf"; // mapsense, San Francisco
String sensor4_id = "ci4ooqbyw0001021o7p4qiedw"; // Pineapple, Boston
String sensor5_id = "ci4ue1845000102w7ni64j7pl"; // monalisa, Boston
String sensor6_id = "ci4lr75v6000a02ypa256zigk"; // LEClife, Geneva
String sensor7_id = "ci4oethyi000302ymejc2wc2j"; // swissnexbrazil, Rio de Janeiro
String sensor8_id = "ci4vk908n000h02s7pqy6aud3"; // penguin, Shanghai
String sensor9_id = "ci4vejnju000b02s70yzzonp9"; // NorthStarOne, Singapore
String sensor10_id = "ci4w8gd6f000102tcnp415mz5"; // HPSG730864, Singapore
String data_base_url = "http://sensor-api.localdata.com/api/v1/sources/";
// url for latest entry.
String[] data_url = new String[10];
data_url[0] = data_base_url+sensor1_id+"/entries?count=1&sort=desc";
data_url[1] = data_base_url+sensor2_id+"/entries?count=1&sort=desc";
data_url[2] = data_base_url+sensor3_id+"/entries?count=1&sort=desc";
data_url[3] = data_base_url+sensor4_id+"/entries?count=1&sort=desc";
data_url[4] = data_base_url+sensor5_id+"/entries?count=1&sort=desc";
data_url[5] = data_base_url+sensor6_id+"/entries?count=1&sort=desc";
data_url[6] = data_base_url+sensor7_id+"/entries?count=1&sort=desc";
data_url[7] = data_base_url+sensor8_id+"/entries?count=1&sort=desc";
data_url[8] = data_base_url+sensor9_id+"/entries?count=1&sort=desc";
data_url[9] = data_base_url+sensor10_id+"/entries?count=1&sort=desc";
// siddhi manager
SiddhiManager siddhiManager = new SiddhiManager();
String ip_stream = "IPEventStream";
String ip_stream1 = "IPEventStream1";
siddhiManager.defineStream("define stream "+ip_stream+" ( sound long, light long, airquality_raw long, airquality string, uv double, dust double, humidity double )");
InputHandler inputHandler = siddhiManager.getInputHandler("IPEventStream");
siddhiManager.defineStream("define stream "+ip_stream1+" ( sound long, light long, airquality_raw long, airquality string, uv double, dust double, humidity double )");
InputHandler inputHandler1 = siddhiManager.getInputHandler("IPEventStream1");
// siddhi query
//siddhiManager.addQuery("from IPEventStream [sound >= 1000 and light >= 200] insert into OutStream1 ;");
siddhiManager.addQuery("from IPEventStream[sound >= 1000]#window.length(2000) insert into OutStream1 ");
//siddhiManager.addQuery("from IPEventStream[sound >= 1000]#window.length(2000) join IPEventStream1[light >= 200]#window.length(2000) insert into JoinStream");
//siddhiManager.addQuery("from a1 = IPEventStream[dust >= 100.00]+, b1 = IPEventStream1[light >= 200] ?, b2 = IPEventStream1[airquality_raw >= 20] insert into JoinStream");
// callback at OutStream1
siddhiManager.addCallback("OutStream1", new StreamCallback() {
@Override
public void receive(Event[] arg0) {
EventPrinter.print(arg0);
}
});
// callback at OutStream2
/* siddhiManager.addCallback("OutStream2", new StreamCallback() {
@Override
public void receive(Event[] arg0) {
EventPrinter.print(arg0);
}
});
*/
// callback at JoinStream
siddhiManager.addCallback("JoinStream", new StreamCallback() {
@Override
public void receive(Event[] arg0) {
EventPrinter.print(arg0);
}
});
long start_time=0, end_time=0, final_time=0;
int n = Integer.parseInt(in);
// while(i!=0)
// {
for(int i=0;i<10;i++)
{
for(int j=0;j<n;j++)
{
start_time = System.currentTimeMillis();
c = ClientBuilder.newClient();
target = c.target(ServerLauncher.restBaseUri);
responseMsg = target.path("service").queryParam("url",data_url[j]).request().get(String.class);
obj = new JSONObject(responseMsg);
IIScSensorData data = new IIScSensorData(obj);
inputHandler.send(new Object[]{data.getSound(), data.getLight(), data.getAirquality_raw(), data.getAirquality(), data.getUv(), data.getDust(), data.getHumidity()});
inputHandler1.send(new Object[]{data.getSound(), data.getLight(), data.getAirquality_raw(), data.getAirquality(), data.getUv(), data.getDust(), data.getHumidity()});
end_time=System.currentTimeMillis();
}
final_time += (end_time - start_time);
Thread.sleep(10000); // 10000
}
// i--;
// Thread.sleep(10);
// }
final_time /= 10;
String s = String.valueOf(final_time);
System.out.println(s);
return s;
//return "<html><body><h2>Response</h2></br>"+responseMsg.toString()+"</body></html>";
}
}