[rest] added systeminfo rest resource (#1608)

Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
Kai Kreuzer 2020-08-23 10:48:03 +02:00 committed by GitHub
parent 3ada0d0148
commit bcee357829
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 119 additions and 2 deletions

View File

@ -0,0 +1,78 @@
/**
* Copyright (c) 2010-2020 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.core.io.rest.internal.resources;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.auth.Role;
import org.openhab.core.io.rest.RESTConstants;
import org.openhab.core.io.rest.RESTResource;
import org.openhab.core.io.rest.internal.resources.beans.SystemInfoBean;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants;
import org.osgi.service.jaxrs.whiteboard.propertytypes.JSONRequired;
import org.osgi.service.jaxrs.whiteboard.propertytypes.JaxrsApplicationSelect;
import org.osgi.service.jaxrs.whiteboard.propertytypes.JaxrsName;
import org.osgi.service.jaxrs.whiteboard.propertytypes.JaxrsResource;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
/**
* This class acts as a REST resource for system information.
*
* @author Kai Kreuzer - Initial contribution
*/
@Component
@JaxrsResource
@JaxrsName(SystemInfoResource.PATH_SYSTEMINFO)
@JaxrsApplicationSelect("(" + JaxrsWhiteboardConstants.JAX_RS_NAME + "=" + RESTConstants.JAX_RS_NAME + ")")
@JSONRequired
@Path(SystemInfoResource.PATH_SYSTEMINFO)
@RolesAllowed({ Role.ADMIN })
@SecurityRequirement(name = "oauth2", scopes = { "admin" })
@Tag(name = SystemInfoResource.PATH_SYSTEMINFO)
@NonNullByDefault
public class SystemInfoResource implements RESTResource {
/** The URI path to this resource */
public static final String PATH_SYSTEMINFO = "systeminfo";
@Activate
public SystemInfoResource() {
}
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
@Operation(summary = "Gets information about the system.", responses = {
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = SystemInfoBean.class))) })
public Response getSystemInfo(@Context UriInfo uriInfo) {
final SystemInfoBean bean = new SystemInfoBean();
return Response.ok(bean).build();
}
}

View File

@ -15,6 +15,7 @@ package org.openhab.core.io.rest.internal.resources.beans;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.OpenHAB;
import org.openhab.core.io.rest.RESTConstants;
@ -25,6 +26,7 @@ import org.openhab.core.io.rest.RESTConstants;
* @author Kai Kreuzer - Initial contribution
* @author Yannick Schaus - Add runtime info
*/
@NonNullByDefault
public class RootBean {
public final String version = RESTConstants.API_VERSION;
@ -36,8 +38,6 @@ public class RootBean {
public static class RuntimeInfo {
public final String version = OpenHAB.getVersion();
public final String buildString = OpenHAB.buildString();
public final String configFolder = OpenHAB.getConfigFolder();
public final String userdataFolder = OpenHAB.getUserDataFolder();
}
public static class Links {

View File

@ -0,0 +1,39 @@
/**
* Copyright (c) 2010-2020 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.core.io.rest.internal.resources.beans;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.OpenHAB;
/**
* This is a java bean that is used to define system information for the REST interface.
*
* @author Kai Kreuzer - Initial contribution
*/
@NonNullByDefault
public class SystemInfoBean {
public final SystemInfo systemInfo = new SystemInfo();
public static class SystemInfo {
public final String configFolder = OpenHAB.getConfigFolder();
public final String userdataFolder = OpenHAB.getUserDataFolder();
public final String javaVersion = System.getProperty("java.version");
public final String osName = System.getProperty("os.name");
public final String osVersion = System.getProperty("os.version");
public final String osArchitecture = System.getProperty("os.arch");
public final int availableProcessors = Runtime.getRuntime().availableProcessors();
public final long freeMemory = Runtime.getRuntime().freeMemory();
public final long totalMemory = Runtime.getRuntime().totalMemory();
}
}