/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF 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.apache.ambari.logsearch.rest; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Named; import javax.validation.Valid; import javax.validation.executable.ValidateOnExecution; import javax.ws.rs.BeanParam; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.ambari.logsearch.common.LogSearchConstants; import org.apache.ambari.logsearch.common.StatusMessage; import org.apache.ambari.logsearch.model.request.impl.HostLogFilesRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceAnyGraphRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceGraphRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogAggregatedInfoRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogComponentHostRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogComponentLevelRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogExportRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogHostComponentRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogLevelCountRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogRequest; import org.apache.ambari.logsearch.model.request.impl.ServiceLogTruncatedRequest; import org.apache.ambari.logsearch.model.response.BarGraphDataListResponse; import org.apache.ambari.logsearch.model.response.CountDataListResponse; import org.apache.ambari.logsearch.model.response.GraphDataListResponse; import org.apache.ambari.logsearch.model.response.GroupListResponse; import org.apache.ambari.logsearch.model.response.HostLogFilesResponse; import org.apache.ambari.logsearch.model.response.NameValueDataListResponse; import org.apache.ambari.logsearch.model.response.NodeListResponse; import org.apache.ambari.logsearch.model.response.ServiceLogResponse; import org.apache.ambari.logsearch.manager.ServiceLogsManager; import org.springframework.context.annotation.Scope; import java.util.List; import static org.apache.ambari.logsearch.doc.DocConstants.ServiceOperationDescriptions.*; @Api(value = "service/logs", description = "Service log operations") @Path("service/logs") @Named @Scope("request") public class ServiceLogsResource { @Inject private ServiceLogsManager serviceLogsManager; @GET @Produces({"application/json"}) @ApiOperation(SEARCH_LOGS_OD) public ServiceLogResponse searchServiceLogs(@BeanParam ServiceLogRequest request) { return serviceLogsManager.searchLogs(request); } @DELETE @Produces({"application/json"}) @ApiOperation(PURGE_LOGS_OD) public StatusMessage deleteServiceLogs(@BeanParam ServiceLogRequest request) { return serviceLogsManager.deleteLogs(request); } @GET @Path("/hosts") @Produces({"application/json"}) @ApiOperation(GET_HOSTS_OD) public GroupListResponse getHosts(@QueryParam(LogSearchConstants.REQUEST_PARAM_CLUSTER_NAMES) @Nullable String clusters) { return serviceLogsManager.getHosts(clusters); } @GET @Path("/components") @Produces({"application/json"}) @ApiOperation(GET_COMPONENTS_OD) public GroupListResponse getComponents(@QueryParam(LogSearchConstants.REQUEST_PARAM_CLUSTER_NAMES) @Nullable String clusters) { return serviceLogsManager.getComponents(clusters); } @GET @Path("/aggregated") @Produces({"application/json"}) @ApiOperation(GET_AGGREGATED_INFO_OD) public GraphDataListResponse getAggregatedInfo(@BeanParam ServiceLogAggregatedInfoRequest request) { return serviceLogsManager.getAggregatedInfo(request); } @GET @Path("/components/count") @Produces({"application/json"}) @ApiOperation(GET_COMPONENTS_COUNT_OD) public CountDataListResponse getComponentsCount(@QueryParam(LogSearchConstants.REQUEST_PARAM_CLUSTER_NAMES) @Nullable String clusters) { return serviceLogsManager.getComponentsCount(clusters); } @GET @Path("/hosts/count") @Produces({"application/json"}) @ApiOperation(GET_HOSTS_COUNT_OD) public CountDataListResponse getHostsCount(@QueryParam(LogSearchConstants.REQUEST_PARAM_CLUSTER_NAMES) @Nullable String clusters) { return serviceLogsManager.getHostsCount(clusters); } @GET @Path("/tree") @Produces({"application/json"}) @ApiOperation(GET_TREE_EXTENSION_OD) public NodeListResponse getTreeExtension(@BeanParam ServiceLogHostComponentRequest request) { return serviceLogsManager.getTreeExtension(request); } @GET @Path("/levels/counts") @Produces({"application/json"}) @ApiOperation(GET_LOG_LEVELS_COUNT_OD) public NameValueDataListResponse getLogsLevelCount(@BeanParam ServiceLogLevelCountRequest request) { return serviceLogsManager.getLogsLevelCount(request); } @GET @Path("/histogram") @Produces({"application/json"}) @ApiOperation(GET_HISTOGRAM_DATA_OD) public BarGraphDataListResponse getHistogramData(@BeanParam ServiceGraphRequest request) { return serviceLogsManager.getHistogramData(request); } @GET @Path("/export") @Produces({"application/json"}) @ApiOperation(EXPORT_TO_TEXT_FILE_OD) public Response exportToTextFile(@BeanParam ServiceLogExportRequest request) { return serviceLogsManager.export(request); } @GET @Path("/hosts/components") @Produces({"application/json"}) @ApiOperation(GET_HOST_LIST_BY_COMPONENT_OD) public NodeListResponse getHostListByComponent(@BeanParam ServiceLogComponentHostRequest request) { return serviceLogsManager.getHostListByComponent(request); } @GET @Path("/components/levels/counts") @Produces({"application/json"}) @ApiOperation(GET_COMPONENT_LIST_WITH_LEVEL_COUNT_OD) public NodeListResponse getComponentListWithLevelCounts(@BeanParam ServiceLogComponentLevelRequest request) { return serviceLogsManager.getComponentListWithLevelCounts(request); } @GET @Path("/schema/fields") @Produces({"application/json"}) @ApiOperation(GET_SERVICE_LOGS_SCHEMA_FIELD_NAME_OD) public String getServiceLogsSchemaFieldsName() { return serviceLogsManager.getServiceLogsSchemaFieldsName(); } @GET @Path("/count/anygraph") @Produces({"application/json"}) @ApiOperation(GET_ANY_GRAPH_COUNT_DATA_OD) public BarGraphDataListResponse getAnyGraphCountData(@BeanParam ServiceAnyGraphRequest request) { return serviceLogsManager.getAnyGraphCountData(request); } @GET @Path("/truncated") @Produces({"application/json"}) @ApiOperation(GET_AFTER_BEFORE_LOGS_OD) public ServiceLogResponse getAfterBeforeLogs(@BeanParam ServiceLogTruncatedRequest request) { return serviceLogsManager.getAfterBeforeLogs(request); } @GET @Path("/serviceconfig") @Produces({"application/json"}) @ApiOperation(GET_HADOOP_SERVICE_CONFIG_JSON_OD) public String getHadoopServiceConfigJSON() { return serviceLogsManager.getHadoopServiceConfigJSON(); } @GET @Path("/request/cancel") @Produces({"application/json"}) @ApiOperation(REQUEST_CANCEL) public String cancelRequest() { // TODO: create function that cancels an ongoing solr request return "{\"endpoint status\": \"not supported yet\"}"; } @GET @Path("/files") @Produces({"application/json"}) @ApiOperation(GET_HOST_LOGFILES_OD) @ValidateOnExecution public HostLogFilesResponse getHostLogFiles(@Valid @BeanParam HostLogFilesRequest request) { return serviceLogsManager.getHostLogFileData(request); } @GET @Path("/clusters") @Produces({"application/json"}) @ApiOperation(GET_SERVICE_CLUSTERS_OD) public List<String> getClustersForServiceLog() { return serviceLogsManager.getClusters(); } }