package cgl.iotcloud.core.api; import cgl.iotcloud.core.api.thrift.*; import cgl.iotcloud.core.master.MasterContext; import cgl.iotcloud.core.master.events.MSensorClientEvent; import cgl.iotcloud.core.sensorsite.SensorState; import com.google.common.eventbus.EventBus; import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; public class MasterAPIServiceHandler implements TMasterAPIService.Iface { private static Logger LOG = LoggerFactory.getLogger(MasterAPIServiceHandler.class); private MasterContext masterContext; private EventBus sensorEventBus; public MasterAPIServiceHandler(MasterContext masterContext, EventBus sensorEventBus) { this.masterContext = masterContext; this.sensorEventBus = sensorEventBus; } @Override public List<String> getSites() throws TException { return new ArrayList<String>(masterContext.getSensorSites().keySet()); } @Override public TSiteDetailsResponse getSite(String siteId) throws TException { TSite descriptor = masterContext.getSensorSite(siteId); if (descriptor != null) { TSite siteDetails = new TSite(siteId, descriptor.getPort(), descriptor.getHost()); // siteDetails.setMetadata(details.getMetadata()); TSiteDetailsResponse response = new TSiteDetailsResponse(); response.setDetails(siteDetails); response.setState(new TResponse(TResponseState.SUCCESS, "success")); return response; } TSiteDetailsResponse response = new TSiteDetailsResponse(); response.setDetails(null); response.setState(new TResponse(TResponseState.FAILURE, "no site with the given site id present")); return response; } @Override public TResponse deploySensor(List<String> sites, TSensorDeployDescriptor sensor) throws TException { LOG.info("Request received for deploying a sensor with jar {} and class {}", sensor.getFilename(), sensor.getClassName()); MSensorClientEvent deployEvent = new MSensorClientEvent(SensorState.DEPLOY, sensor, sites); sensorEventBus.post(deployEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse unDeploySensor(List<String> sites, String id) throws TException { LOG.info("Request received for un-deploying a sensor {}", id); MSensorClientEvent deployEvent = new MSensorClientEvent(id, SensorState.UN_DEPLOY, sites); sensorEventBus.post(deployEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse unDeployAllSensor(String id) throws TException { LOG.info("Request received for un-deploying a sensor {}", id); MSensorClientEvent deployEvent = new MSensorClientEvent(id, SensorState.UN_DEPLOY); sensorEventBus.post(deployEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse startSensor(List<String> sites, String id) throws TException { LOG.info("Request received for starting a sensor {}", id); MSensorClientEvent sensorStopEvent = new MSensorClientEvent(id, SensorState.ACTIVATE, sites); sensorEventBus.post(sensorStopEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse startAllSensor(String id) throws TException { LOG.info("Request received for starting a sensor {}", id); MSensorClientEvent sensorStopEvent = new MSensorClientEvent(id, SensorState.ACTIVATE); sensorEventBus.post(sensorStopEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse stopSiteSensors(List<String> sites, String id) throws TException { LOG.info("Request received for stopping a sensor {}", id); MSensorClientEvent sensorStopEvent = new MSensorClientEvent(id, SensorState.DEACTIVATE, sites); sensorEventBus.post(sensorStopEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public TResponse stopAllSensors(String id) throws TException { LOG.info("Request received for starting a sensor {}", id); MSensorClientEvent sensorStopEvent = new MSensorClientEvent(id, SensorState.DEACTIVATE); sensorEventBus.post(sensorStopEvent); return new TResponse(TResponseState.SUCCESS, "success"); } @Override public List<TSensor> getSensors(String siteId) throws TException { LOG.info("Request received get sensors for site {}", siteId); return masterContext.getSensors(siteId); } @Override public List<TSensor> getAllSensors() throws TException { LOG.info("Request received get all sensors"); return masterContext.getAllSensors(); } }