Search in sources :

Example 1 with DeviceAccessAuthorizationException

use of org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException in project product-iots by wso2.

the class ConnectedCupServiceImpl method getDeviceStats.

@Path("stats/{deviceId}/sensors/{sensorName}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Response getDeviceStats(@PathParam("deviceId") String deviceId, @PathParam("sensorName") String sensor, @QueryParam("from") long from, @QueryParam("to") long to) {
    String fromDate = String.valueOf(from);
    String toDate = String.valueOf(to);
    String query = " deviceId:" + deviceId + " AND deviceType:" + ConnectedCupConstants.DEVICE_TYPE + " AND time : [" + fromDate + " TO " + toDate + "]";
    String sensorTableName = getSensorEventTableName(sensor);
    try {
        if (!APIUtil.getDeviceAccessAuthorizationService().isUserAuthorized(new DeviceIdentifier(deviceId, ConnectedCupConstants.DEVICE_TYPE), DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
            return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
        }
        List<SensorRecord> sensorDatas;
        List<SortByField> sortByFields = new ArrayList<>();
        SortByField sortByField = new SortByField("time", SortType.ASC);
        sortByFields.add(sortByField);
        sensorDatas = APIUtil.getAllEventsForDevice(sensorTableName, query, sortByFields);
        return Response.ok().entity(sensorDatas).build();
    } catch (AnalyticsException e) {
        String errorMsg = "Error on retrieving stats on table " + sensorTableName + " with query " + query;
        log.error(errorMsg, e);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(errorMsg).build();
    } catch (DeviceAccessAuthorizationException e) {
        log.error(e.getErrorMessage(), e);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
    }
}
Also used : SortByField(org.wso2.carbon.analytics.dataservice.commons.SortByField) DeviceAccessAuthorizationException(org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException) AnalyticsException(org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException) SensorRecord(org.coffeeking.api.util.SensorRecord) ArrayList(java.util.ArrayList) DeviceIdentifier(org.wso2.carbon.device.mgt.common.DeviceIdentifier) Path(javax.ws.rs.Path) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 2 with DeviceAccessAuthorizationException

use of org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException in project product-iots by wso2.

the class DeviceTypeServiceImpl method getSensorStats.

/**
 * Retrieve Sensor data for the given time period.
 *
 * @param deviceId unique identifier for given device type instance
 * @param from     starting time
 * @param to       ending time
 * @return response with List<SensorRecord> object which includes sensor data which is requested
 */
@Path("device/stats/{deviceId}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Response getSensorStats(@PathParam("deviceId") String deviceId, @QueryParam("from") long from, @QueryParam("to") long to, @QueryParam("sensorType") String sensorType) {
    String fromDate = String.valueOf(from);
    String toDate = String.valueOf(to);
    String query = "meta_deviceId:" + deviceId + " AND meta_deviceType:" + DeviceTypeConstants.DEVICE_TYPE + " AND meta_time : [" + fromDate + " TO " + toDate + "]";
    String sensorTableName = null;
    if (sensorType.equals(DeviceTypeConstants.SENSOR_TYPE1)) {
        sensorTableName = DeviceTypeConstants.SENSOR_TYPE1_EVENT_TABLE;
    } else if (sensorType.equals(DeviceTypeConstants.SENSOR_TYPE2)) {
        sensorTableName = DeviceTypeConstants.SENSOR_TYPE2_EVENT_TABLE;
    }
    try {
        if (!APIUtil.getDeviceAccessAuthorizationService().isUserAuthorized(new DeviceIdentifier(deviceId, DeviceTypeConstants.DEVICE_TYPE))) {
            return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
        }
        if (sensorTableName != null) {
            List<SortByField> sortByFields = new ArrayList<>();
            SortByField sortByField = new SortByField("meta_time", SortType.ASC);
            sortByFields.add(sortByField);
            List<SensorRecord> sensorRecords = APIUtil.getAllEventsForDevice(sensorTableName, query, sortByFields);
            return Response.status(Response.Status.OK.getStatusCode()).entity(sensorRecords).build();
        }
    } catch (AnalyticsException e) {
        String errorMsg = "Error on retrieving stats on table " + sensorTableName + " with query " + query;
        log.error(errorMsg);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(errorMsg).build();
    } catch (DeviceAccessAuthorizationException e) {
        log.error(e.getErrorMessage(), e);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    }
    return Response.status(Response.Status.BAD_REQUEST).build();
}
Also used : SortByField(org.wso2.carbon.analytics.dataservice.commons.SortByField) DeviceAccessAuthorizationException(org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException) AnalyticsException(org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException) ArrayList(java.util.ArrayList) SensorRecord(org.wso2.iot.sampledevice.api.dto.SensorRecord) DeviceIdentifier(org.wso2.carbon.device.mgt.common.DeviceIdentifier) Path(javax.ws.rs.Path) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 3 with DeviceAccessAuthorizationException

use of org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException in project product-iots by wso2.

the class DeviceTypeServiceImpl method changeStatus.

/**
 * @param deviceId unique identifier for given device type instance
 * @param state    change status of sensor: on/off
 */
@Path("device/{deviceId}/change-status")
@POST
public Response changeStatus(@PathParam("deviceId") String deviceId, @QueryParam("state") String state, @Context HttpServletResponse response) {
    try {
        if (!APIUtil.getDeviceAccessAuthorizationService().isUserAuthorized(new DeviceIdentifier(deviceId, DeviceTypeConstants.DEVICE_TYPE))) {
            return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
        }
        String sensorState = state.toUpperCase();
        if (!sensorState.equals(DeviceTypeConstants.STATE_ON) && !sensorState.equals(DeviceTypeConstants.STATE_OFF)) {
            log.error("The requested state change should be either - 'ON' or 'OFF'");
            return Response.status(Response.Status.BAD_REQUEST.getStatusCode()).build();
        }
        Map<String, String> dynamicProperties = new HashMap<>();
        String publishTopic = APIUtil.getAuthenticatedUserTenantDomain() + "/" + DeviceTypeConstants.DEVICE_TYPE + "/" + deviceId + "/command";
        String actualMessage = DeviceTypeConstants.BULB_CONTEXT + ':' + sensorState;
        dynamicProperties.put(DeviceTypeConstants.ADAPTER_TOPIC_PROPERTY, publishTopic);
        Operation commandOp = new CommandOperation();
        commandOp.setCode("change-status");
        commandOp.setType(Operation.Type.COMMAND);
        commandOp.setEnabled(true);
        commandOp.setPayLoad(actualMessage);
        Properties props = new Properties();
        props.setProperty("mqtt.adapter.topic", publishTopic);
        commandOp.setProperties(props);
        List<DeviceIdentifier> deviceIdentifiers = new ArrayList<>();
        deviceIdentifiers.add(new DeviceIdentifier(deviceId, "sampledevice"));
        APIUtil.getDeviceManagementService().addOperation("sampledevice", commandOp, deviceIdentifiers);
        return Response.ok().build();
    } catch (DeviceAccessAuthorizationException e) {
        log.error(e.getErrorMessage(), e);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    } catch (OperationManagementException e) {
        String msg = "Error occurred while executing command operation upon ringing the buzzer";
        log.error(msg, e);
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    } catch (InvalidDeviceException e) {
        String msg = "Error occurred while executing command operation to send keywords";
        log.error(msg, e);
        return Response.status(Response.Status.BAD_REQUEST).build();
    }
}
Also used : DeviceAccessAuthorizationException(org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException) HashMap(java.util.HashMap) CommandOperation(org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation) ArrayList(java.util.ArrayList) Operation(org.wso2.carbon.device.mgt.common.operation.mgt.Operation) CommandOperation(org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation) OperationManagementException(org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException) Properties(java.util.Properties) InvalidDeviceException(org.wso2.carbon.device.mgt.common.InvalidDeviceException) DeviceIdentifier(org.wso2.carbon.device.mgt.common.DeviceIdentifier) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST)

Aggregations

ArrayList (java.util.ArrayList)3 Path (javax.ws.rs.Path)3 DeviceIdentifier (org.wso2.carbon.device.mgt.common.DeviceIdentifier)3 DeviceAccessAuthorizationException (org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException)3 Consumes (javax.ws.rs.Consumes)2 GET (javax.ws.rs.GET)2 Produces (javax.ws.rs.Produces)2 SortByField (org.wso2.carbon.analytics.dataservice.commons.SortByField)2 AnalyticsException (org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException)2 HashMap (java.util.HashMap)1 Properties (java.util.Properties)1 POST (javax.ws.rs.POST)1 SensorRecord (org.coffeeking.api.util.SensorRecord)1 InvalidDeviceException (org.wso2.carbon.device.mgt.common.InvalidDeviceException)1 Operation (org.wso2.carbon.device.mgt.common.operation.mgt.Operation)1 OperationManagementException (org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException)1 CommandOperation (org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation)1 SensorRecord (org.wso2.iot.sampledevice.api.dto.SensorRecord)1