use of com.thinkbiganalytics.servicemonitor.rest.client.cdh.ClouderaRootResource in project kylo by Teradata.
the class ClouderaServicesStatusCheck method healthCheck.
@Override
public List<ServiceStatusResponse> healthCheck() {
List<ServiceStatusResponse> serviceStatusResponseList = new ArrayList<>();
// Get the Map of Services and optional Components we are tracking
Map<String, List<String>> definedServiceComponentMap = ServiceMonitorCheckUtil.getMapOfServiceAndComponents(services);
if (definedServiceComponentMap != null && !definedServiceComponentMap.isEmpty()) {
ClouderaRootResource rootResource;
try {
rootResource = clouderaClient.getClouderaResource();
if (rootResource == null) {
throw new Exception("The Cloudera Resource is null... It may still be trying to initialize the Rest Client.");
}
ApiClusterList clusters = rootResource.getPopulatedClusterList();
for (ApiCluster cluster : clusters.getClusters()) {
String clusterName = cluster.getName();
List<ApiService> services = cluster.getServices();
for (ApiService service : services) {
List<ServiceComponent> serviceComponents = new ArrayList<>();
List<ServiceAlert> alerts = new ArrayList<>();
String serviceName = service.getType();
if (definedServiceComponentMap.containsKey(serviceName)) {
service.getHealthSummary();
List<ApiHealthCheck> healthChecks = service.getHealthChecks();
for (ApiHealthCheck healthCheck : healthChecks) {
alerts.add(apiHealthCheckToServiceAlert(null, healthCheck));
}
List<ApiRole> roles = service.getRoles();
for (ApiRole role : roles) {
String roleName = role.getType();
role.getHealthSummary();
List<ApiHealthCheck> roleHealthChecks = role.getHealthChecks();
ServiceComponent.STATE roleState = apiRoleStateToServiceComponentState(role.getRoleState());
List<ServiceAlert> componentAlerts = new ArrayList<>();
for (ApiHealthCheck healthCheck : roleHealthChecks) {
ServiceAlert alert = apiHealthCheckToServiceAlert(roleName, healthCheck);
alerts.add(alert);
componentAlerts.add(alert);
}
ServiceComponent component = new DefaultServiceComponent.Builder(roleName, roleState).clusterName(clusterName).message(role.getRoleState().name()).alerts(componentAlerts).build();
if (definedServiceComponentMap.containsKey(serviceName) && (definedServiceComponentMap.get(serviceName).contains(ServiceMonitorCheckUtil.ALL_COMPONENTS) || definedServiceComponentMap.get(serviceName).contains(component.getName()))) {
serviceComponents.add(component);
}
}
ServiceStatusResponse serviceStatusResponse = new DefaultServiceStatusResponse(serviceName, serviceComponents, alerts);
serviceStatusResponseList.add(serviceStatusResponse);
}
}
}
} catch (Exception e) {
Throwable cause;
if (e.getCause() != null) {
cause = e.getCause();
} else {
cause = e;
}
ServiceComponent clouderaServiceComponent = new DefaultServiceComponent.Builder("Cloudera REST_CLIENT", ServiceComponent.STATE.DOWN).serviceName("Cloudera").clusterName("UNKNOWN").exception(cause).build();
List<ServiceComponent> clouderaComponents = new ArrayList<>();
clouderaComponents.add(clouderaServiceComponent);
ServiceStatusResponse serviceStatusResponse = new DefaultServiceStatusResponse(clouderaServiceComponent.getServiceName(), clouderaComponents);
serviceStatusResponseList.add(serviceStatusResponse);
// add the other services as being Warnings
addClouderaServiceErrors(cause.getMessage(), serviceStatusResponseList, definedServiceComponentMap);
}
}
return serviceStatusResponseList;
}
Aggregations