package com.thinkbiganalytics.servicemonitor.rest.client.ambari;
/*-
* #%L
* thinkbig-service-monitor-ambari
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* Licensed 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.
* #L%
*/
import com.thinkbiganalytics.rest.JerseyRestClient;
import com.thinkbiganalytics.servicemonitor.rest.client.RestCommand;
import com.thinkbiganalytics.servicemonitor.rest.model.ambari.AlertSummary;
import com.thinkbiganalytics.servicemonitor.rest.model.ambari.Cluster;
import com.thinkbiganalytics.servicemonitor.rest.model.ambari.ClusterItem;
import com.thinkbiganalytics.servicemonitor.rest.model.ambari.ClusterList;
import com.thinkbiganalytics.servicemonitor.rest.model.ambari.ServiceComponentInfoSummary;
import org.springframework.web.client.RestClientException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.WebTarget;
/**
* Ambari REST client.
*/
public class AmbariJerseyClient extends JerseyRestClient implements AmbariClient {
private String apiPath = "/api/v1";
public AmbariJerseyClient(AmbariJerseyRestClientConfig config) {
super(config);
this.apiPath = config.getApiPath();
}
protected WebTarget getBaseTarget() {
WebTarget target = super.getBaseTarget();
return target.path(apiPath);
}
protected WebTarget getTargetFromPath(String path) {
return client.target(uri + apiPath + path);
}
private <T> T get(RestCommand<T> restCommand) {
restCommand.beforeRestRequest();
Map<String, Object> parameters = restCommand.getParameters();
String url = restCommand.getUrl();
if (!url.startsWith("/")) {
url = "/" + url;
}
if (restCommand.getPathString() != null) {
return getFromPathString(url + restCommand.getPathString(), restCommand.getResponseType());
} else {
return get(url, parameters, restCommand.getResponseType());
}
}
/**
* @see AmbariClient#getAmbariClusterNames()
*/
public List<String> getAmbariClusterNames() {
List<String> clusterNames = new ArrayList<>();
ClusterList clusterList = get(new AmbariGetClustersCommand());
if (clusterList != null) {
List<ClusterItem> items = clusterList.getItems();
if (items != null) {
for (ClusterItem item : items) {
Cluster cluster = item.getCluster();
if (cluster != null) {
String clusterName = cluster.getClusterName();
clusterNames.add(clusterName);
}
}
}
}
return clusterNames;
}
/**
* @see AmbariClient#getServiceComponentInfo(List, String)
*/
public ServiceComponentInfoSummary getServiceComponentInfo(List<String> clusterNames, String services) {
ServiceComponentInfoSummary summary = null;
for (String clusterName : clusterNames) {
AmbariServicesComponentInfoCommand
servicesComponentInfoCommand =
new AmbariServicesComponentInfoCommand(clusterName, services);
ServiceComponentInfoSummary clusterSummary = get(servicesComponentInfoCommand);
if (clusterSummary != null) {
if (summary == null) {
summary = clusterSummary;
} else {
summary.getItems().addAll(clusterSummary.getItems());
}
}
}
return summary;
}
/**
* @see AmbariClient#getAlerts(List, String)
*/
public AlertSummary getAlerts(List<String> clusterNames, String services) throws RestClientException {
AlertSummary alerts = null;
for (String clusterName : clusterNames) {
AmbariAlertsCommand alertsCommand = new AmbariAlertsCommand(clusterName, services);
AlertSummary alertSummary = get(alertsCommand);
if (alerts == null) {
alerts = alertSummary;
} else {
alerts.getItems().addAll(alertSummary.getItems());
}
}
return alerts;
}
}