Merge branch 'corrective-policy' into 'corrective-policy'

Improve endpoint-mgt functionalities

See merge request entgra/carbon-device-mgt!664
corrective-policy
Dharmakeerthi Lasantha 4 years ago
commit 574119df68

@ -33,15 +33,6 @@ public class DeviceInfo implements Serializable {
private static final long serialVersionUID = 1998101733L; private static final long serialVersionUID = 1998101733L;
// @ApiModelProperty(name = "deviceId", value = "Device Id.", required = false)
// private int deviceId;
//
// @ApiModelProperty(name = "deviceType", value = "Type of the device.", required = true)
// private String deviceType;
//
// @ApiModelProperty(name = "deviceId", value = "Device identifier.", required = true)
// private DeviceIdentifier deviceIdentifier;
@ApiModelProperty(name = "IMEI", value = "IMEI number of the device.", required = true) @ApiModelProperty(name = "IMEI", value = "IMEI number of the device.", required = true)
private String IMEI; private String IMEI;

@ -129,26 +129,4 @@ public interface DeviceDetailsDAO {
void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException; void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException;
void updateDeviceLocation(DeviceLocation deviceLocation, int enrollmentId) throws DeviceDetailsMgtDAOException; void updateDeviceLocation(DeviceLocation deviceLocation, int enrollmentId) throws DeviceDetailsMgtDAOException;
// /**
// * This method will add device application to database.
// * @param deviceApplication - Device application
// * @throws DeviceDetailsMgtDAOException
// */
// void addDeviceApplications(DeviceApplication deviceApplication) throws DeviceDetailsMgtDAOException;
//
// /**
// * This method will return the device application list once device id is provided.
// * @param deviceId
// * @return
// * @throws DeviceDetailsMgtDAOException
// */
// DeviceApplication getDeviceApplications(int deviceId) throws DeviceDetailsMgtDAOException;
//
// /**
// * This method will delete the application list from the database.
// * @param deviceId - Integer
// * @throws DeviceDetailsMgtDAOException
// */
// void deleteDeviceApplications(int deviceId) throws DeviceDetailsMgtDAOException;
} }

@ -41,7 +41,7 @@ import java.util.Map;
public class DeviceDetailsDAOImpl implements DeviceDetailsDAO { public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
private static Log log = LogFactory.getLog(DeviceDetailsDAOImpl.class); private static final Log log = LogFactory.getLog(DeviceDetailsDAOImpl.class);
@Override @Override
public void addDeviceInformation(int deviceId, int enrolmentId, DeviceInfo deviceInfo) public void addDeviceInformation(int deviceId, int enrolmentId, DeviceInfo deviceInfo)
@ -168,8 +168,6 @@ public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
rs = stmt.executeQuery(); rs = stmt.executeQuery();
if (rs.next()) { if (rs.next()) {
// deviceInfo.setIMEI(rs.getString("IMEI"));
// deviceInfo.setIMSI(rs.getString("IMSI"));
deviceInfo = new DeviceInfo(); deviceInfo = new DeviceInfo();
deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL"));
deviceInfo.setVendor(rs.getString("VENDOR")); deviceInfo.setVendor(rs.getString("VENDOR"));
@ -180,9 +178,7 @@ public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY"));
deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY"));
deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY"));
// deviceInfo.setOperator(rs.getString("OPERATOR"));
deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE"));
// deviceInfo.setMobileSignalStrength(rs.getDouble("MOBILE_SIGNAL_STRENGTH"));
deviceInfo.setSsid(rs.getString("SSID")); deviceInfo.setSsid(rs.getString("SSID"));
deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE"));
deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY"));
@ -190,7 +186,6 @@ public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN"));
deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP")));
} }
return deviceInfo; return deviceInfo;
} catch (SQLException e) { } catch (SQLException e) {
throw new DeviceDetailsMgtDAOException("Error occurred while fetching the details of the registered devices.", e); throw new DeviceDetailsMgtDAOException("Error occurred while fetching the details of the registered devices.", e);
@ -508,21 +503,5 @@ public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
private Connection getConnection() throws SQLException { private Connection getConnection() throws SQLException {
return DeviceManagementDAOFactory.getConnection(); return DeviceManagementDAOFactory.getConnection();
} }
// @Override
// public void addDeviceApplications(DeviceApplication deviceApplication) throws DeviceDetailsMgtDAOException {
//
// }
//
// @Override
// public DeviceApplication getDeviceApplications(int deviceId) throws DeviceDetailsMgtDAOException {
// return null;
// }
//
// @Override
// public void deleteDeviceApplications(int deviceId) throws DeviceDetailsMgtDAOException {
//
// }
} }

@ -165,52 +165,52 @@ public class OperationManagerImpl implements OperationManager {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("operation:[" + operation.toString() + "]"); log.debug("operation:[" + operation.toString() + "]");
for (DeviceIdentifier deviceIdentifier : deviceIds) { for (DeviceIdentifier deviceIdentifier : deviceIds) {
log.debug("device identifier id:[" + deviceIdentifier.getId() + "] type:[" + log.debug("device identifier id:[" + deviceIdentifier.getId() + "] type:[" + deviceIdentifier.getType()
deviceIdentifier.getType() + "]"); + "]");
} }
} }
try {
DeviceIDHolder deviceValidationResult = DeviceManagerUtil.validateDeviceIdentifiers(deviceIds);
List<DeviceIdentifier> validDeviceIds = deviceValidationResult.getValidDeviceIDList();
if (validDeviceIds.size() > 0) {
DeviceIDHolder deviceAuthorizationResult = this.authorizeDevices(operation, validDeviceIds);
List<DeviceIdentifier> authorizedDeviceIds = deviceAuthorizationResult.getValidDeviceIDList();
if (authorizedDeviceIds.size() <= 0) {
log.warn("User : " + getUser() + " is not authorized to perform operations on given device-list.");
Activity activity = new Activity();
//Send the operation statuses only for admin triggered operations
activity.setActivityStatus(this.getActivityStatus(deviceValidationResult,
deviceAuthorizationResult));
return activity;
}
boolean isScheduledOperation = this.isTaskScheduledOperation(operation); DeviceIDHolder deviceValidationResult = DeviceManagerUtil.validateDeviceIdentifiers(deviceIds);
String initiatedBy = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); List<DeviceIdentifier> validDeviceIds = deviceValidationResult.getValidDeviceIDList();
if (initiatedBy == null && isScheduledOperation) { if (!validDeviceIds.isEmpty()) {
if (log.isDebugEnabled()) { DeviceIDHolder deviceAuthorizationResult = this.authorizeDevices(operation, validDeviceIds);
log.debug("initiatedBy : " + SYSTEM); List<DeviceIdentifier> authorizedDeviceIds = deviceAuthorizationResult.getValidDeviceIDList();
} if (authorizedDeviceIds.isEmpty()) {
operation.setInitiatedBy(SYSTEM); log.warn("User : " + getUser() + " is not authorized to perform operations on given device-list.");
} else { Activity activity = new Activity();
if (log.isDebugEnabled()) { //Send the operation statuses only for admin triggered operations
log.debug("initiatedBy : " + initiatedBy); activity.setActivityStatus(this.getActivityStatus(deviceValidationResult, deviceAuthorizationResult));
} return activity;
operation.setInitiatedBy(initiatedBy); }
}
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto = boolean isScheduledOperation = this.isTaskScheduledOperation(operation);
OperationDAOUtil.convertOperation(operation); String initiatedBy = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
String operationCode = operationDto.getCode(); if (initiatedBy == null && isScheduledOperation) {
Map<Integer, Device> enrolments = new HashMap<>(); if (log.isDebugEnabled()) {
Device device; log.debug("initiatedBy : " + SYSTEM);
for (DeviceIdentifier deviceId : authorizedDeviceIds) { }
device = getDevice(deviceId); operation.setInitiatedBy(SYSTEM);
enrolments.put(device.getEnrolmentInfo().getId(), device); } else {
if (log.isDebugEnabled()) {
log.debug("initiatedBy : " + initiatedBy);
} }
operation.setInitiatedBy(initiatedBy);
}
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto = OperationDAOUtil
.convertOperation(operation);
String operationCode = operationDto.getCode();
Map<Integer, Device> enrolments = new HashMap<>();
Device device;
for (DeviceIdentifier deviceId : authorizedDeviceIds) {
device = getDevice(deviceId);
enrolments.put(device.getEnrolmentInfo().getId(), device);
}
try {
OperationManagementDAOFactory.beginTransaction(); OperationManagementDAOFactory.beginTransaction();
if (operationDto.getControl() == if (operationDto.getControl()
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Control.NO_REPEAT) { == org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Control.NO_REPEAT) {
Map<Integer, Integer> pendingOperationIDs = operationDAO Map<Integer, Integer> pendingOperationIDs = operationDAO
.getExistingOperationIDs(enrolments.keySet().toArray(new Integer[0]), operationCode); .getExistingOperationIDs(enrolments.keySet().toArray(new Integer[0]), operationCode);
for (Integer enrolmentId : pendingOperationIDs.keySet()) { for (Integer enrolmentId : pendingOperationIDs.keySet()) {
@ -227,8 +227,8 @@ public class OperationManagerImpl implements OperationManager {
+ operationCode); + operationCode);
} }
Activity activity = new Activity(); Activity activity = new Activity();
activity.setActivityStatus(this.getActivityStatus(deviceValidationResult, activity.setActivityStatus(
deviceAuthorizationResult)); this.getActivityStatus(deviceValidationResult, deviceAuthorizationResult));
return activity; return activity;
} }
} }
@ -242,20 +242,20 @@ public class OperationManagerImpl implements OperationManager {
activity.setType(Activity.Type.valueOf(operationDto.getType().toString())); activity.setType(Activity.Type.valueOf(operationDto.getType().toString()));
//For now set the operation statuses only for admin triggered operations //For now set the operation statuses only for admin triggered operations
if (!isScheduledOperation) { if (!isScheduledOperation) {
activity.setActivityStatus(this.getActivityStatus(deviceValidationResult, activity.setActivityStatus(
deviceAuthorizationResult)); this.getActivityStatus(deviceValidationResult, deviceAuthorizationResult));
} }
return activity; return activity;
} else { } catch (OperationManagementDAOException e) {
throw new InvalidDeviceException("Invalid device Identifiers found."); OperationManagementDAOFactory.rollbackTransaction();
throw new OperationManagementException("Error occurred while adding operation", e);
} catch (TransactionManagementException e) {
throw new OperationManagementException("Error occurred while initiating the transaction", e);
} finally {
OperationManagementDAOFactory.closeConnection();
} }
} catch (OperationManagementDAOException e) { } else {
OperationManagementDAOFactory.rollbackTransaction(); throw new InvalidDeviceException("Invalid device Identifiers found.");
throw new OperationManagementException("Error occurred while adding operation", e);
} catch (TransactionManagementException e) {
throw new OperationManagementException("Error occurred while initiating the transaction", e);
} finally {
OperationManagementDAOFactory.closeConnection();
} }
} }

@ -674,6 +674,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
while (rs.next()) { while (rs.next()) {
if (enrolmentId == 0) { if (enrolmentId == 0) {
activity = new Activity(); activity = new Activity();
activity.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE"))); activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE")));
activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP")) * 1000).toString()); activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP")) * 1000).toString());
activity.setCode(rs.getString("OPERATION_CODE")); activity.setCode(rs.getString("OPERATION_CODE"));

@ -2750,14 +2750,10 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
if (EnrolmentInfo.Status.REMOVED == newStatus) { if (EnrolmentInfo.Status.REMOVED == newStatus) {
isDeviceUpdated = disenrollDevice(deviceIdentifier); isDeviceUpdated = disenrollDevice(deviceIdentifier);
} else { } else {
enrolmentInfo = device.getEnrolmentInfo(); enrolmentInfo.setStatus(newStatus);
if (enrolmentInfo.getStatus() != newStatus) { isDeviceUpdated = updateEnrollment(deviceId, enrolmentInfo, tenantId);
enrolmentInfo.setStatus(newStatus);
isDeviceUpdated = updateEnrollment(deviceId, enrolmentInfo, tenantId);
} else {
isDeviceUpdated = false;
}
} }
this.removeDeviceFromCache(deviceIdentifier);
return isDeviceUpdated; return isDeviceUpdated;
} }
@ -2793,15 +2789,12 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
} }
boolean isUpdatedEnrollment = false; boolean isUpdatedEnrollment = false;
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.beginTransaction();
int updatedRows = enrollmentDAO.updateEnrollment(enrolmentInfo, tenantId); int updatedRows = enrollmentDAO.updateEnrollment(enrolmentInfo, tenantId);
DeviceManagementDAOFactory.commitTransaction();
if (updatedRows > 0) { if (updatedRows > 0) {
isUpdatedEnrollment = true; isUpdatedEnrollment = true;
} }
} catch (SQLException e) {
String msg = "Error occurred while opening a connection to the data source";
log.error(msg, e);
throw new DeviceManagementException(msg, e);
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while updating the enrollment information device for" + String msg = "Error occurred while updating the enrollment information device for" +
@ -3319,6 +3312,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
DeviceManagementDAOFactory.beginTransaction(); DeviceManagementDAOFactory.beginTransaction();
success = deviceDAO.setEnrolmentStatusInBulk(deviceType, status, getTenantId(), deviceList); success = deviceDAO.setEnrolmentStatusInBulk(deviceType, status, getTenantId(), deviceList);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
if (success) {
for (String id : deviceList) {
this.removeDeviceFromCache(new DeviceIdentifier(id, deviceType));
}
}
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred in while updating status of devices :" + deviceType + " status : " + status; String msg = "Error occurred in while updating status of devices :" + deviceType + " status : " + status;

@ -25,13 +25,16 @@ import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceStatusTaskPluginConfig; import org.wso2.carbon.device.mgt.common.DeviceStatusTaskPluginConfig;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException; import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException;
import org.wso2.carbon.device.mgt.core.cache.impl.DeviceCacheManagerImpl; import org.wso2.carbon.device.mgt.core.cache.impl.DeviceCacheManagerImpl;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationEnrolmentMapping; import org.wso2.carbon.device.mgt.core.operation.mgt.OperationEnrolmentMapping;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.status.task.DeviceStatusTaskException; import org.wso2.carbon.device.mgt.core.status.task.DeviceStatusTaskException;
import org.wso2.carbon.ntask.core.Task; import org.wso2.carbon.ntask.core.Task;
@ -75,7 +78,7 @@ public class DeviceStatusMonitoringTask implements Task {
Device device; Device device;
try { try {
operationEnrolmentMappings = this.getOperationEnrolmentMappings(); operationEnrolmentMappings = this.getOperationEnrolmentMappings();
if (operationEnrolmentMappings.size() > 0) { if (!operationEnrolmentMappings.isEmpty()) {
lastActivities = this.getLastDeviceActivities(); lastActivities = this.getLastDeviceActivities();
} }
} catch (DeviceStatusTaskException e) { } catch (DeviceStatusTaskException e) {
@ -98,6 +101,19 @@ public class DeviceStatusMonitoringTask implements Task {
enrolmentInfo.setId(mapping.getEnrolmentId()); enrolmentInfo.setId(mapping.getEnrolmentId());
enrolmentInfo.setStatus(newStatus); enrolmentInfo.setStatus(newStatus);
} else { } else {
DeviceManagementProviderService dmps = DeviceManagementDataHolder.getInstance()
.getDeviceManagementProvider();
try {
Device updatedDevice = dmps
.getDevice(device.getDeviceIdentifier(), device.getDeviceInfo().getUpdatedTime(), true);
if (updatedDevice != null) {
device = updatedDevice;
}
} catch (DeviceManagementException e) {
log.error(
"Error occurred while getting the updated device information which has device identifier: "
+ device.getDeviceIdentifier());
}
enrolmentInfo = device.getEnrolmentInfo(); enrolmentInfo = device.getEnrolmentInfo();
enrolmentInfo.setStatus(newStatus); enrolmentInfo.setStatus(newStatus);
device.setEnrolmentInfo(enrolmentInfo); device.setEnrolmentInfo(enrolmentInfo);
@ -107,7 +123,7 @@ public class DeviceStatusMonitoringTask implements Task {
} }
} }
if (enrolmentInfoTobeUpdated.size() > 0) { if (!enrolmentInfoTobeUpdated.isEmpty()) {
try { try {
this.updateDeviceStatus(enrolmentInfoTobeUpdated); this.updateDeviceStatus(enrolmentInfoTobeUpdated);
} catch (DeviceStatusTaskException e) { } catch (DeviceStatusTaskException e) {
@ -200,4 +216,4 @@ public class DeviceStatusMonitoringTask implements Task {
} }
return lastActivities; return lastActivities;
} }
} }

Loading…
Cancel
Save