|
|
|
@ -1,57 +1,24 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2016, 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.jaxrs.service.api;
|
|
|
|
|
|
|
|
|
|
import io.swagger.annotations.SwaggerDefinition;
|
|
|
|
|
import io.swagger.annotations.Info;
|
|
|
|
|
import io.swagger.annotations.ExtensionProperty;
|
|
|
|
|
import io.swagger.annotations.Extension;
|
|
|
|
|
import io.swagger.annotations.Tag;
|
|
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
|
|
import io.swagger.annotations.ApiResponse;
|
|
|
|
|
import io.swagger.annotations.ApiResponses;
|
|
|
|
|
import io.swagger.annotations.ResponseHeader;
|
|
|
|
|
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
|
|
|
|
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
|
|
|
import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardGadgetDataWrapper;
|
|
|
|
|
import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardPaginationGadgetDataWrapper;
|
|
|
|
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
|
|
|
|
|
|
|
|
|
import javax.ws.rs.GET;
|
|
|
|
|
import javax.ws.rs.Path;
|
|
|
|
|
import javax.ws.rs.Produces;
|
|
|
|
|
import javax.ws.rs.QueryParam;
|
|
|
|
|
import javax.ws.rs.*;
|
|
|
|
|
import javax.ws.rs.core.MediaType;
|
|
|
|
|
import javax.ws.rs.core.Response;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Device Analytics Dashboard related REST-APIs. This can be used to obtain device related analytics.
|
|
|
|
|
*/
|
|
|
|
|
@SwaggerDefinition(
|
|
|
|
|
info = @Info(
|
|
|
|
|
version = "1.0.0",
|
|
|
|
|
title = "",
|
|
|
|
|
extensions = {
|
|
|
|
|
@Extension(properties = {
|
|
|
|
|
@ExtensionProperty(name = "name", value = "DeviceAnalyticsDashboard"),
|
|
|
|
|
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/dashboard"),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
tags = {
|
|
|
|
|
@Tag(name = "device_management", description = "")
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
@Path("/dashboard")
|
|
|
|
|
@Api(value = "Device Analytics Dashboard",
|
|
|
|
|
description = "Device Analytics Dashboard related information APIs are described here.")
|
|
|
|
@ -71,67 +38,667 @@ public interface Dashboard {
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("device-count-overview")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the details of registered devices in WSO2 EMM.",
|
|
|
|
|
notes = "Get the details of active, inactive, removed and total number of registered devices in"
|
|
|
|
|
+ " WSO2 EMM.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request. \n Invalid request or validation error.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getOverviewDeviceCounts();
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("device-counts-by-potential-vulnerabilities")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of unmonitored and non-compliant devices in WSO2 EMM.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request. \n Invalid request or validation error.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n Server error occurred while fetching activity data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getDeviceCountsByPotentialVulnerabilities();
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("non-compliant-device-counts-by-features")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of devices that have not complied to a policy that was enforced on a "
|
|
|
|
|
+ "device.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardPaginationGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request. \n",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found. \n",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getNonCompliantDeviceCountsByFeatures(@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
Response getNonCompliantDeviceCountsByFeatures(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "start",
|
|
|
|
|
value = "Provide the starting pagination index. Example 10",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "length",
|
|
|
|
|
value = "Provide how many policy details you require from the starting pagination index."
|
|
|
|
|
+ " For example if you require the non-compliant policy details from the 10th "
|
|
|
|
|
+ "pagination index to the 15th, you must define 10 as the value for start and "
|
|
|
|
|
+ "5 as the value for length.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("device-counts-by-groups")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of devices for a given device type, such as connectivity status, "
|
|
|
|
|
+ "potential vulnerability, platform, and ownership.\n",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DeviceCountByGroup.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getDeviceCountsByGroups(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
Response getDeviceCountsByGroups(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "connectivity-status",
|
|
|
|
|
value = "Provide the connectivity status of the device. The following values can be assigned:\n"
|
|
|
|
|
+ "active: The devices that are registered with WSO2 EMM and are actively "
|
|
|
|
|
+ "communicating with the server.\n"
|
|
|
|
|
+ "inactive: The devices that are registered with WSO2 EMM but unable to "
|
|
|
|
|
+ "actively communicate with the server.\n"
|
|
|
|
|
+ "removed: The devices that have unregistered from WSO2 EMM",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "potential-vulnerability",
|
|
|
|
|
value = "Provide details of the potential vulnerabilities of the device. The following "
|
|
|
|
|
+ "values can be assigned:\n"
|
|
|
|
|
+ "non-compliant: Devices that have not complied to the policies enforced on the "
|
|
|
|
|
+ "device by WSO2 EMM.\n"
|
|
|
|
|
+ "unmonitored: Devices that have no policy assigned to them.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. The following values can "
|
|
|
|
|
+ "be assigned:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. The following values can be assigned:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("feature-non-compliant-device-counts-by-groups")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of devices that have not complied to a given policy based on a particular"
|
|
|
|
|
+ " device type.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DeviceCountByGroup.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getFeatureNonCompliantDeviceCountsByGroups(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
Response getFeatureNonCompliantDeviceCountsByGroups(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "non-compliant-feature-code",
|
|
|
|
|
value = "As the value for this parameter, the policy feature code or ID can be used. Some"
|
|
|
|
|
+ " examples for feature codes are: PASSCODE_POLICY,CAMERA and WIFI.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. The following values can "
|
|
|
|
|
+ "be assigned:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = false)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. The following values can be assigned:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = false)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("filtered-device-count-over-total")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of devices that are registered with WSO2 EMM filtered by one of the "
|
|
|
|
|
+ "following attributes:\n"
|
|
|
|
|
+ "Connectivity status of the device, such as active, inactive or removed.\n"
|
|
|
|
|
+ "The device ownership type, such as BYOD or COPE.\n" + "The device platform.\n"
|
|
|
|
|
+ "The potential vulnerabilities faced by the devices.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getFilteredDeviceCountOverTotal(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
Response getFilteredDeviceCountOverTotal(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "connectivity-status",
|
|
|
|
|
value = "Provide the connectivity status of the device. You can assign any of the values "
|
|
|
|
|
+ "given below:\n"
|
|
|
|
|
+ "Total: All the devices that have registered with WSO2 EMM.\n"
|
|
|
|
|
+ "active: The devices that are registered with WSO2 EMM and are actively "
|
|
|
|
|
+ "communicating with the server.\n"
|
|
|
|
|
+ "inactive: The devices that are registered with WSO2 EMM but unable to actively"
|
|
|
|
|
+ " communicate with the server.\n"
|
|
|
|
|
+ "removed: The devices that have unregistered from WSO2 EMM.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "potential-vulnerability",
|
|
|
|
|
value = "Provide details of the potential vulnerabilities of the device. You can assign"
|
|
|
|
|
+ " any of the values given below:\n"
|
|
|
|
|
+ "non-compliant: Devices that have not complied to the policies enforced on the "
|
|
|
|
|
+ "device by WSO2 EMM.\n"
|
|
|
|
|
+ "unmonitored: Devices that have no policy assigned to them.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. You can assign any of the "
|
|
|
|
|
+ "values given below:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. You can assign any of the values "
|
|
|
|
|
+ "given below:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("feature-non-compliant-device-count-over-total")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get the number of devices that have not complied to a given policy over the total"
|
|
|
|
|
+ " number of devices registered with WSO2 EMM.\n",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getFeatureNonCompliantDeviceCountOverTotal(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
Response getFeatureNonCompliantDeviceCountOverTotal(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "non-compliant-feature-code",
|
|
|
|
|
value = "Provide the feature code or ID of the policy. Some examples for feature codes "
|
|
|
|
|
+ "are: WIFI, PASSCODE_POLICY, CAMERA and ENCRYPT_STORAGE.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. You can assign the values "
|
|
|
|
|
+ "given below:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. You can assign the values given below:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("devices-with-details")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get device details of devices based on a particular device type.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardPaginationGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getDevicesWithDetails(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership,
|
|
|
|
|
@QueryParam(PAGINATION_ENABLED) String paginationEnabled,
|
|
|
|
|
@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
Response getDevicesWithDetails(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "connectivity-status",
|
|
|
|
|
value = "Provide the connectivity status of the device. This can be one of the following:\n"
|
|
|
|
|
+ "Total: All the devices that have registered with WSO2 EMM.\n"
|
|
|
|
|
+ "active: The devices that are registered with WSO2 EMM and are actively "
|
|
|
|
|
+ "communicating with the server.\n"
|
|
|
|
|
+ "inactive: The devices that are registered with WSO2 EMM but unable to actively"
|
|
|
|
|
+ " communicate with the server.\n"
|
|
|
|
|
+ "removed: The devices that have unregistered from WSO2 EMM.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "potential-vulnerability",
|
|
|
|
|
value = "Provide details of the potential vulnerabilities of the device. This can be:\n"
|
|
|
|
|
+ "non-compliant: Devices that have not complied to the policies enforced on "
|
|
|
|
|
+ "the device by WSO2 EMM.\n"
|
|
|
|
|
+ "unmonitored: Devices that have no policy assigned to them. ",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. This can be one of the following:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. This can be one of the following:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "pagination-enabled",
|
|
|
|
|
value = "To enable/disable pagination set the value as true or false",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PAGINATION_ENABLED) String paginationEnabled,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "start",
|
|
|
|
|
value = "Provide the starting pagination index.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "length",
|
|
|
|
|
value = "Provide how many policy details you require from the starting pagination index.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
|
|
|
|
|
@GET
|
|
|
|
|
@Path("feature-non-compliant-devices-with-details")
|
|
|
|
|
@ApiOperation(
|
|
|
|
|
produces = MediaType.APPLICATION_JSON,
|
|
|
|
|
httpMethod = "GET",
|
|
|
|
|
value = "Get device details of non-compliant devices which do not comply to a given policy.",
|
|
|
|
|
tags = "Dashboard")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 200,
|
|
|
|
|
message = "OK.",
|
|
|
|
|
response = DashboardPaginationGadgetDataWrapper.class,
|
|
|
|
|
responseHeaders = {
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Content-Type",
|
|
|
|
|
description = "The content type of the body"),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "ETag",
|
|
|
|
|
description = "Entity Tag of the response resource.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
@ResponseHeader(
|
|
|
|
|
name = "Last-Modified",
|
|
|
|
|
description = "Date and time the resource has been modified the last time.\n" +
|
|
|
|
|
"Used by caches, or in conditional requests."),
|
|
|
|
|
}),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 304,
|
|
|
|
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
|
|
|
|
"the requested resource."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 400,
|
|
|
|
|
message = "Bad Request.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 401,
|
|
|
|
|
message = "Unauthorized. \n Unauthorized request."),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 404,
|
|
|
|
|
message = "Not Found.",
|
|
|
|
|
response = ErrorResponse.class),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 406,
|
|
|
|
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
|
|
|
@ApiResponse(
|
|
|
|
|
code = 500,
|
|
|
|
|
message = "Internal Server Error. \n ErrorResponse in retrieving requested data.",
|
|
|
|
|
response = ErrorResponse.class)
|
|
|
|
|
})
|
|
|
|
|
@Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view")
|
|
|
|
|
Response getFeatureNonCompliantDevicesWithDetails(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership,
|
|
|
|
|
@QueryParam(PAGINATION_ENABLED) String paginationEnabled,
|
|
|
|
|
@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
}
|
|
|
|
|
Response getFeatureNonCompliantDevicesWithDetails(
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "non-compliant-feature-code",
|
|
|
|
|
value = "Provide the code specific to the feature "
|
|
|
|
|
+ "(examples for feature codes are: WIFI,PASSCODE_POLICY, CAMERA and ENCRYPT_STORAGE.)",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "platform",
|
|
|
|
|
value = "Provide the platform that the device is running on. This can be one of the following:\n"
|
|
|
|
|
+ "iOS\n" + "Android\n" + "Windows",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PLATFORM) String platform,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "ownership",
|
|
|
|
|
value = "Provide the ownership status of the device. This can be one of the following:\n"
|
|
|
|
|
+ "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(OWNERSHIP) String ownership,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "pagination-enabled",
|
|
|
|
|
value = "To enable/disable pagination set the value as true or false",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(PAGINATION_ENABLED) String paginationEnabled,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "start",
|
|
|
|
|
value = "Provide the starting pagination index.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(START_INDEX) int startIndex,
|
|
|
|
|
@ApiParam(
|
|
|
|
|
name = "length",
|
|
|
|
|
value = "Provide how many policy details you require from the starting pagination index.",
|
|
|
|
|
required = true)
|
|
|
|
|
@QueryParam(RESULT_COUNT) int resultCount);
|
|
|
|
|
}
|