mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #1162 from geethkokila/master
Improvements to policy monitoring framework
This commit is contained in:
commit
aaa2e47cee
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.device.mgt.common.general;
|
||||
|
||||
public class GeneralConfig {
|
||||
|
||||
private boolean policyMonitoringEnabled;
|
||||
|
||||
public boolean isPolicyMonitoringEnabled() {
|
||||
return policyMonitoringEnabled;
|
||||
}
|
||||
|
||||
public void setPolicyMonitoringEnabled(boolean policyMonitoringEnabled) {
|
||||
this.policyMonitoringEnabled = policyMonitoringEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.common.spi;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.*;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.general.GeneralConfig;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
|
||||
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||
@ -52,4 +53,6 @@ public interface DeviceManagementService {
|
||||
|
||||
DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig();
|
||||
|
||||
GeneralConfig getGeneralConfig();
|
||||
|
||||
}
|
||||
|
||||
@ -522,6 +522,8 @@ public interface DeviceManagementProviderService {
|
||||
|
||||
List<String> getAvailableDeviceTypes() throws DeviceManagementException;
|
||||
|
||||
List<String> getPolicyMonitoringEnableDeviceTypes() throws DeviceManagementException;
|
||||
|
||||
boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device) throws DeviceManagementException;
|
||||
|
||||
boolean setOwnership(DeviceIdentifier deviceId, String ownershipType) throws DeviceManagementException;
|
||||
|
||||
@ -1177,6 +1177,29 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return deviceTypesResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPolicyMonitoringEnableDeviceTypes() throws DeviceManagementException {
|
||||
|
||||
List<String> deviceTypes = this.getAvailableDeviceTypes();
|
||||
List<String> deviceTypesToMonitor = new ArrayList<>();
|
||||
int tenantId = this.getTenantId();
|
||||
Map<DeviceTypeServiceIdentifier, DeviceManagementService> registeredTypes =
|
||||
pluginRepository.getAllDeviceManagementServices(tenantId);
|
||||
|
||||
List<DeviceManagementService> services = new ArrayList<>(registeredTypes.values());
|
||||
for (DeviceManagementService deviceType : services) {
|
||||
if (deviceType != null && deviceType.getGeneralConfig() != null &&
|
||||
deviceType.getGeneralConfig().isPolicyMonitoringEnabled()) {
|
||||
for (String type : deviceTypes) {
|
||||
if (type.equalsIgnoreCase(deviceType.getType())) {
|
||||
deviceTypesToMonitor.add(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return deviceTypesToMonitor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateDeviceInfo(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
|
||||
if (deviceId == null || device == null) {
|
||||
|
||||
@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.core;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.*;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.general.GeneralConfig;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
|
||||
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||
@ -108,4 +109,9 @@ public class TestDeviceManagementService implements DeviceManagementService {
|
||||
public DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneralConfig getGeneralConfig() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
import org.wso2.carbon.device.mgt.common.general.GeneralConfig;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
|
||||
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||
@ -69,6 +70,7 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
private InitialOperationConfig initialOperationConfig;
|
||||
private PullNotificationSubscriber pullNotificationSubscriber;
|
||||
private DeviceStatusTaskPluginConfig deviceStatusTaskPluginConfig;
|
||||
private GeneralConfig generalConfig;
|
||||
|
||||
public DeviceTypeManagerService(DeviceTypeConfigIdentifier deviceTypeConfigIdentifier,
|
||||
DeviceTypeConfiguration deviceTypeConfiguration) {
|
||||
@ -84,6 +86,7 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
this.setDeviceStatusTaskPluginConfig(deviceTypeConfiguration.getDeviceStatusTaskConfiguration());
|
||||
this.setPolicyMonitoringManager(deviceTypeConfiguration.getPolicyMonitoring());
|
||||
this.setPullNotificationSubscriber(deviceTypeConfiguration.getPullNotificationSubscriberConfig());
|
||||
this.setGeneralConfig(deviceTypeConfiguration);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -193,6 +196,11 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
return deviceStatusTaskPluginConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneralConfig getGeneralConfig() {
|
||||
return generalConfig;
|
||||
}
|
||||
|
||||
private void setProvisioningConfig(String tenantDomain, DeviceTypeConfiguration deviceTypeConfiguration) {
|
||||
if (deviceTypeConfiguration.getProvisioningConfig() != null) {
|
||||
boolean sharedWithAllTenants = deviceTypeConfiguration.getProvisioningConfig().isSharedWithAllTenants();
|
||||
@ -264,4 +272,12 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setGeneralConfig(DeviceTypeConfiguration deviceTypeConfiguration) {
|
||||
this.generalConfig = new GeneralConfig();
|
||||
if (deviceTypeConfiguration.getPolicyMonitoring() != null) {
|
||||
this.generalConfig.setPolicyMonitoringEnabled(deviceTypeConfiguration.getPolicyMonitoring().isEnabled());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ public class InitialOperationConfig {
|
||||
return operations;
|
||||
}
|
||||
|
||||
public void setOperationsll(List<String> operations) {
|
||||
public void setOperations(List<String> operations) {
|
||||
this.operations = operations;
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
|
||||
import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
import org.wso2.carbon.device.mgt.common.general.GeneralConfig;
|
||||
import org.wso2.carbon.device.mgt.common.license.mgt.License;
|
||||
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||
@ -76,6 +77,7 @@ public class DeviceTypeManagerServiceTest {
|
||||
private Method populatePushNotificationConfig;
|
||||
private Method setPolicyMonitoringManager;
|
||||
private Method setPullNotificationSubscriber;
|
||||
private Method setGeneralConfig;
|
||||
|
||||
@BeforeClass
|
||||
public void setup() throws NoSuchMethodException, SAXException, JAXBException, ParserConfigurationException,
|
||||
@ -102,10 +104,19 @@ public class DeviceTypeManagerServiceTest {
|
||||
.getDeclaredMethod("setPullNotificationSubscriber", PullNotificationSubscriberConfig.class);
|
||||
setPullNotificationSubscriber.setAccessible(true);
|
||||
|
||||
setGeneralConfig = DeviceTypeManagerService.class
|
||||
.getDeclaredMethod("setGeneralConfig", DeviceTypeConfiguration.class);
|
||||
setGeneralConfig.setAccessible(true);
|
||||
|
||||
Field deviceStatusTaskPluginConfig = DeviceTypeManagerService.class
|
||||
.getDeclaredField("deviceStatusTaskPluginConfig");
|
||||
deviceStatusTaskPluginConfig.setAccessible(true);
|
||||
|
||||
|
||||
Field generalConfig = DeviceTypeManagerService.class
|
||||
.getDeclaredField("generalConfig");
|
||||
generalConfig.setAccessible(true);
|
||||
|
||||
Field operationMonitoringConfigs = DeviceTypeManagerService.class
|
||||
.getDeclaredField("operationMonitoringConfigs");
|
||||
operationMonitoringConfigs.setAccessible(true);
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
<PolicyMonitoring enabled="false"/>
|
||||
<ProvisioningConfig>
|
||||
<SharedWithAllTenants>true</SharedWithAllTenants>
|
||||
</ProvisioningConfig>
|
||||
|
||||
@ -209,7 +209,12 @@ public class PolicyManagerServiceImpl implements PolicyManagerService {
|
||||
|
||||
List<ComplianceFeature> complianceFeatures =
|
||||
monitoringManager.checkPolicyCompliance(deviceIdentifier, response);
|
||||
return !(complianceFeatures == null || complianceFeatures.isEmpty());
|
||||
if(complianceFeatures == null || complianceFeatures.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -242,6 +242,7 @@ public class MonitoringDAOImpl implements MonitoringDAO {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet resultSet = null;
|
||||
NonComplianceData complianceData = new NonComplianceData();
|
||||
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
|
||||
try {
|
||||
|
||||
@ -20,6 +20,7 @@ package org.wso2.carbon.policy.mgt.core.mgt.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
@ -93,12 +94,14 @@ public class MonitoringManagerImpl implements MonitoringManager {
|
||||
NonComplianceData cmd = monitoringDAO.getCompliance(device.getId(), device.getEnrolmentInfo().getId());
|
||||
complianceData = monitoringService.checkPolicyCompliance(deviceIdentifier,
|
||||
policy, deviceResponse);
|
||||
|
||||
if (cmd != null) {
|
||||
complianceData.setId(cmd.getId());
|
||||
complianceData.setPolicy(policy);
|
||||
complianceFeatures = complianceData.getComplianceFeatures();
|
||||
complianceData.setDeviceId(device.getId());
|
||||
complianceData.setPolicyId(policy.getId());
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new PolicyComplianceException("Error occurred while opening a data source connection", e);
|
||||
} catch (MonitoringDAOException e) {
|
||||
@ -188,7 +191,7 @@ public class MonitoringManagerImpl implements MonitoringManager {
|
||||
PolicyManagementDAOFactory.openConnection();
|
||||
NonComplianceData complianceData = monitoringDAO.getCompliance(device.getId(), device.getEnrolmentInfo()
|
||||
.getId());
|
||||
if (complianceData == null || !complianceData.isStatus()) {
|
||||
if (complianceData != null && !complianceData.isStatus()) {
|
||||
return false;
|
||||
}
|
||||
} catch (MonitoringDAOException e) {
|
||||
@ -361,7 +364,7 @@ public class MonitoringManagerImpl implements MonitoringManager {
|
||||
//when shutdown, it sets DeviceManagementService to null, therefore need to have a null check
|
||||
if (PolicyManagementDataHolder.getInstance().getDeviceManagementService() != null) {
|
||||
deviceTypes =
|
||||
PolicyManagementDataHolder.getInstance().getDeviceManagementService().getAvailableDeviceTypes();
|
||||
PolicyManagementDataHolder.getInstance().getDeviceManagementService().getPolicyMonitoringEnableDeviceTypes();
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
throw new PolicyComplianceException("Error occurred while getting the device types.", e);
|
||||
|
||||
@ -46,6 +46,8 @@ import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.policy.mgt.core.enforcement.DelegationTask;
|
||||
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
|
||||
import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager;
|
||||
import org.wso2.carbon.policy.mgt.core.mgt.impl.MonitoringManagerImpl;
|
||||
import org.wso2.carbon.policy.mgt.core.mock.TypeXDeviceManagementService;
|
||||
import org.wso2.carbon.policy.mgt.core.task.MonitoringTask;
|
||||
import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService;
|
||||
@ -232,7 +234,7 @@ public class PolicyManagerServiceImplTest extends BasePolicyManagementDAOTest {
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = "applyPolicy")
|
||||
public void checkCompliance() throws PolicyComplianceException {
|
||||
public void checkCompliance() throws PolicyComplianceException, DeviceManagementException {
|
||||
new MonitoringTask().execute();
|
||||
|
||||
List<ComplianceFeature> complianceFeatures = new ArrayList<>();
|
||||
@ -246,6 +248,15 @@ public class PolicyManagerServiceImplTest extends BasePolicyManagementDAOTest {
|
||||
complianceFeature.setMessage("Test message");
|
||||
complianceFeature.setCompliance(true);
|
||||
complianceFeatures.add(complianceFeature);
|
||||
|
||||
Device device = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().
|
||||
getDevice(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), false);
|
||||
List<Device> deviceList = new ArrayList<>();
|
||||
deviceList.add(device);
|
||||
|
||||
MonitoringManager manager = new MonitoringManagerImpl();
|
||||
manager.addMonitoringOperation(deviceList);
|
||||
|
||||
policyManagerService.checkCompliance(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), complianceFeatures);
|
||||
boolean deviceCompliance = policyManagerService.isCompliant(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
|
||||
|
||||
@ -253,7 +264,7 @@ public class PolicyManagerServiceImplTest extends BasePolicyManagementDAOTest {
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = "checkCompliance")
|
||||
public void checkNonCompliance() throws PolicyComplianceException {
|
||||
public void checkNonCompliance() throws PolicyComplianceException, DeviceManagementException {
|
||||
new MonitoringTask().execute();
|
||||
|
||||
List<ComplianceFeature> complianceFeatures = new ArrayList<>();
|
||||
@ -267,6 +278,15 @@ public class PolicyManagerServiceImplTest extends BasePolicyManagementDAOTest {
|
||||
complianceFeature.setMessage("Test message");
|
||||
complianceFeature.setCompliance(false);
|
||||
complianceFeatures.add(complianceFeature);
|
||||
|
||||
Device device = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().
|
||||
getDevice(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), false);
|
||||
List<Device> deviceList = new ArrayList<>();
|
||||
deviceList.add(device);
|
||||
|
||||
MonitoringManager manager = new MonitoringManagerImpl();
|
||||
manager.addMonitoringOperation(deviceList);
|
||||
|
||||
policyManagerService.checkCompliance(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), complianceFeatures);
|
||||
boolean deviceCompliance = policyManagerService.isCompliant(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
|
||||
Assert.assertFalse(deviceCompliance, "Policy was compliant even though the response was not compliant");
|
||||
|
||||
@ -25,6 +25,7 @@ import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
||||
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||
import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.general.GeneralConfig;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
|
||||
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||
@ -96,4 +97,9 @@ public class TypeXDeviceManagementService implements DeviceManagementService {
|
||||
public DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneralConfig getGeneralConfig() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user