http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java deleted file mode 100644 index 9d2fb31..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariServiceInfo.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * 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.view.slider.clients; - -public class AmbariServiceInfo { - - private String id; - private boolean started; - private boolean maintenanceMode; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isStarted() { - return started; - } - - public void setStarted(boolean started) { - this.started = started; - } - - public boolean isMaintenanceMode() { - return maintenanceMode; - } - - public void setMaintenanceMode(boolean maintenanceMode) { - this.maintenanceMode = maintenanceMode; - } - -}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java deleted file mode 100644 index fa2a71c..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppTypesResource.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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.view.slider.rest; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import org.apache.ambari.view.ViewResourceHandler; - -import com.google.inject.Inject; - -public class SliderAppTypesResource { - - @Inject - ViewResourceHandler resourceHandler; - - @GET - @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response getApps(@Context HttpHeaders headers, @Context UriInfo uri) { - return resourceHandler.handleRequest(headers, uri, null); - } - - @GET - @Path("{appTypeId}") - @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response getApp(@Context HttpHeaders headers, @Context UriInfo uri, - @PathParam("appTypeId") String appTypeId) { - return resourceHandler.handleRequest(headers, uri, appTypeId); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java deleted file mode 100644 index 94d37d3..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * 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.view.slider.rest; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; - -import org.apache.ambari.view.ViewResourceHandler; -import org.apache.ambari.view.slider.SliderAppsViewController; -import org.apache.hadoop.yarn.exceptions.YarnException; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SliderAppsResource { - - private static final Logger logger = LoggerFactory - .getLogger(SliderAppsResource.class); - @Inject - ViewResourceHandler resourceHandler; - @Inject - SliderAppsViewController sliderAppsViewController; - - @GET - @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response getApps(@Context HttpHeaders headers, @Context UriInfo uri) { - MultivaluedMap<String, String> queryParameters = uri.getQueryParameters(); - if (queryParameters != null && queryParameters.containsKey("validateAppName")) { - List<String> appNames = queryParameters.get("validateAppName"); - if (appNames.size() > 0) { - try { - if (sliderAppsViewController.appExists(appNames.get(0))) { - return Response.status(Status.CONFLICT).build(); - } - } catch (IOException e) { - logger.warn("Unable to validate cluster name", e); - } catch (InterruptedException e) { - logger.warn("Unable to validate cluster name", e); - } catch (YarnException e) { - logger.warn("Unable to validate cluster name", e); - } - return Response.ok().build(); - } - } - return resourceHandler.handleRequest(headers, uri, null); - } - - @GET - @Path("{appId}") - @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response getApp(@Context HttpHeaders headers, @Context UriInfo uri, - @PathParam("appId") String appId) { - return resourceHandler.handleRequest(headers, uri, appId); - } - - @DELETE - @Path("{appId}") - public void deleteApp(@Context HttpHeaders headers, @Context UriInfo uri, - @PathParam("appId") String appId) throws YarnException, IOException, InterruptedException { - sliderAppsViewController.deleteSliderApp(appId); - } - - @PUT - @Path("{appId}") - @Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response updateApp(@Context UriInfo uri, String jsonString, - @PathParam("appId") String appId) throws IOException, YarnException, - InterruptedException, URISyntaxException { - if (jsonString != null) { - JsonElement requestContent = new JsonParser().parse(jsonString); - if (requestContent != null && appId != null) { - JsonObject requestJson = requestContent.getAsJsonObject(); - if (requestJson.has("state")) { - String newState = requestJson.get("state").getAsString(); - if ("FROZEN".equals(newState)) { - sliderAppsViewController.freezeApp(appId); - return Response.ok().build(); - } else if ("RUNNING".equals(newState)) { - sliderAppsViewController.thawApp(appId); - return Response.ok().build(); - } - } else if (requestJson.has("components")) { - Map<String, Integer> componentsMap = new HashMap<String, Integer>(); - JsonObject componentsJson = requestJson.get("components") - .getAsJsonObject(); - for (Entry<String, JsonElement> e : componentsJson.entrySet()) { - String componentName = e.getKey(); - int instanceCount = e.getValue().getAsJsonObject() - .get("instanceCount").getAsInt(); - componentsMap.put(componentName, instanceCount); - } - sliderAppsViewController.flexApp(appId, componentsMap); - return Response.ok().build(); - } - } - String sliderApp = sliderAppsViewController - .createSliderApp(requestContent.getAsJsonObject()); - if (sliderApp != null) - return Response.created(new URI(uri.getAbsolutePath() + sliderApp)) - .build(); - } - logger.warn("No request content sent to create app"); - return Response.status(Response.Status.BAD_REQUEST).build(); - } - - @POST - @Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON }) - public Response createApp(@Context UriInfo uri, String jsonString) - throws IOException, YarnException, InterruptedException, - URISyntaxException { - if (jsonString != null) { - JsonElement requestContent = new JsonParser().parse(jsonString); - String sliderApp = sliderAppsViewController - .createSliderApp(requestContent.getAsJsonObject()); - if (sliderApp != null) - return Response.created(new URI(uri.getAbsolutePath() + sliderApp)) - .build(); - } - logger.warn("No request content sent to create app"); - return Response.status(Response.Status.BAD_REQUEST).build(); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java deleted file mode 100644 index 5023d90..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/ViewStatusResource.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * 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.view.slider.rest; - -import javax.ws.rs.GET; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -import org.apache.ambari.view.slider.SliderAppsViewController; -import org.apache.ambari.view.slider.ViewStatus; - -import com.google.inject.Inject; - -public class ViewStatusResource { - - @Inject - SliderAppsViewController sliderController; - - @GET - @Produces({ MediaType.APPLICATION_JSON }) - public ViewStatus getViewStatus() { - return sliderController.getViewStatus(); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java deleted file mode 100644 index 74578c9..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/AmbariHttpClient.java +++ /dev/null @@ -1,233 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.slider.clients.AmbariClient; -import org.apache.ambari.view.slider.clients.AmbariCluster; -import org.apache.ambari.view.slider.clients.AmbariClusterInfo; -import org.apache.ambari.view.slider.clients.AmbariHostComponent; -import org.apache.ambari.view.slider.clients.AmbariHostInfo; -import org.apache.ambari.view.slider.clients.AmbariService; -import org.apache.ambari.view.slider.clients.AmbariServiceInfo; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class AmbariHttpClient extends BaseHttpClient implements AmbariClient { - - private static final Logger logger = LoggerFactory.getLogger(AmbariHttpClient.class); - - public AmbariHttpClient(String url, String userId, String password, - ViewContext viewContext) { - super(url, userId, password, viewContext); - } - - /** - * Provides the first cluster defined on this Ambari server. - * - * @return - */ - public AmbariClusterInfo getClusterInfo() { - try { - JsonElement jsonElement = doGetJson("/api/v1/clusters"); - if(jsonElement==null) { - return null; - } - JsonObject jsonObject = jsonElement.getAsJsonObject(); - JsonArray clustersArray = jsonObject.get("items").getAsJsonArray(); - if (clustersArray.size() > 0) { - AmbariClusterInfo cluster = new AmbariClusterInfo(); - JsonObject clusterObj = clustersArray.get(0).getAsJsonObject() - .get("Clusters").getAsJsonObject(); - cluster.setName(clusterObj.get("cluster_name").getAsString()); - cluster.setVersion(clusterObj.get("version").getAsString()); - return cluster; - } - } catch (IOException e) { - logger.warn("Unable to determine Ambari clusters", e); - throw new RuntimeException(e.getMessage(), e); - } - return null; - } - - /** - * Provides the first cluster defined on this Ambari server. - * - * @return - */ - public Map<String, String> getAmbariServerConfigs() { - Map<String, String> configs = new HashMap<String, String>(); - try { - JsonElement jsonElement = doGetJson("/api/v1/services/AMBARI/components/AMBARI_SERVER"); - if (jsonElement != null && jsonElement.getAsJsonObject().has("RootServiceComponents") - && jsonElement.getAsJsonObject().get("RootServiceComponents").getAsJsonObject().has("properties")) { - JsonObject ambariProperties = jsonElement.getAsJsonObject().get("RootServiceComponents").getAsJsonObject().get("properties").getAsJsonObject(); - for (Entry<String, JsonElement> entry : ambariProperties.entrySet()) { - if (entry.getValue().isJsonPrimitive()) { - configs.put(entry.getKey(), entry.getValue().getAsString()); - } - } - } - } catch (IOException e) { - logger.warn("Unable to determine Ambari clusters", e); - } - return configs; - } - - public AmbariCluster getCluster(AmbariClusterInfo clusterInfo) { - if (clusterInfo != null) { - try { - JsonElement jsonElement = doGetJson("/api/v1/clusters/" - + clusterInfo.getName() + "?fields=services/ServiceInfo,hosts,Clusters"); - if (jsonElement != null) { - AmbariCluster cluster = new AmbariCluster(); - // desired configs - Map<String, String> desiredConfigs = new HashMap<String, String>(); - JsonObject jsonObject = jsonElement.getAsJsonObject(); - JsonObject clustersJsonObject = jsonObject.get("Clusters").getAsJsonObject(); - JsonObject desiredConfigsObj = clustersJsonObject.get("desired_configs") - .getAsJsonObject(); - for (Map.Entry<String, JsonElement> entry : desiredConfigsObj - .entrySet()) { - desiredConfigs.put(entry.getKey(), entry.getValue() - .getAsJsonObject().get("tag").getAsString()); - } - cluster.setDesiredConfigs(desiredConfigs); - cluster.setName(clustersJsonObject.get("cluster_name").getAsString()); - cluster.setVersion(clustersJsonObject.get("version").getAsString()); - // services - List<AmbariServiceInfo> services = new ArrayList<AmbariServiceInfo>(); - for (JsonElement svcJson : jsonObject.get("services") - .getAsJsonArray()) { - AmbariServiceInfo si = new AmbariServiceInfo(); - si.setId(svcJson.getAsJsonObject().get("ServiceInfo") - .getAsJsonObject().get("service_name").getAsString()); - si.setStarted("STARTED".equals(svcJson.getAsJsonObject() - .get("ServiceInfo").getAsJsonObject().get("state") - .getAsString())); - services.add(si); - } - cluster.setServices(services); - // hosts - List<AmbariHostInfo> hosts = new ArrayList<AmbariHostInfo>(); - for (JsonElement hostJson : jsonObject.get("hosts") - .getAsJsonArray()) { - AmbariHostInfo hi = new AmbariHostInfo(); - hi.setHostName(hostJson.getAsJsonObject().get("Hosts") - .getAsJsonObject().get("host_name").getAsString()); - hosts.add(hi); - } - cluster.setHosts(hosts); - return cluster; - } - } catch (IllegalStateException e) { - logger.warn("Unable to determine Ambari cluster details - " - + clusterInfo.getName(), e); - throw new RuntimeException(e.getMessage(), e); - } catch (IOException e) { - logger.warn("Unable to determine Ambari cluster details - " - + clusterInfo.getName(), e); - throw new RuntimeException(e.getMessage(), e); - } - } - return null; - } - - public Map<String, String> getConfiguration(AmbariClusterInfo cluster, - String configType, String configTag) { - if (cluster != null && configType != null && configTag != null) { - try { - JsonElement jsonElement = doGetJson("/api/v1/clusters/" - + cluster.getName() + "/configurations?type=" + configType - + "&tag=" + configTag); - if (jsonElement!=null) { - JsonObject jsonObject = jsonElement.getAsJsonObject(); - JsonArray configsArray = jsonObject.get("items").getAsJsonArray(); - if (configsArray.size() > 0) { - JsonObject propertiesObj = configsArray.get(0).getAsJsonObject() - .get("properties").getAsJsonObject(); - Map<String, String> properties = new HashMap<String, String>(); - for (Map.Entry<String, JsonElement> entry : propertiesObj.entrySet()) { - if (entry.getValue().isJsonPrimitive()) { - properties.put(entry.getKey(), entry.getValue().getAsString()); - } - } - return properties; - } - } - } catch (IOException e) { - logger.warn("Unable to determine Ambari clusters", e); - throw new RuntimeException(e.getMessage(), e); - } - } - return null; - } - - @Override - public AmbariService getService(AmbariClusterInfo cluster, String serviceId) { - if (cluster != null && serviceId != null) { - try { - JsonElement jsonElement = doGetJson("/api/v1/clusters/" - + cluster.getName() + "/services/" + serviceId + "?fields=ServiceInfo,components/host_components/HostRoles"); - if (jsonElement == null) { - return null; - } - JsonObject jsonObject = jsonElement.getAsJsonObject(); - AmbariService svc = new AmbariService(); - JsonObject serviceInfoJsonObject = jsonObject.get("ServiceInfo").getAsJsonObject(); - svc.setId(serviceInfoJsonObject.get("service_name").getAsString()); - svc.setStarted("STARTED".equals(serviceInfoJsonObject.get("state").getAsString())); - svc.setMaintenanceMode(!"OFF".equals(serviceInfoJsonObject.get("maintenance_state").getAsString())); - Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap = new HashMap<String, List<AmbariHostComponent>>(); - for(JsonElement ce: jsonObject.get("components").getAsJsonArray()){ - String componentName = ce.getAsJsonObject().get("ServiceComponentInfo").getAsJsonObject().get("component_name").getAsString(); - List<AmbariHostComponent> hcList = new ArrayList<AmbariHostComponent>(); - componentsToHostComponentsMap.put(componentName, hcList); - JsonArray hcJsonArray = ce.getAsJsonObject().get("host_components").getAsJsonArray(); - for(JsonElement hce: hcJsonArray) { - AmbariHostComponent hc = new AmbariHostComponent(); - JsonObject hcJsonObject = hce.getAsJsonObject().get("HostRoles").getAsJsonObject(); - hc.setHostName(hcJsonObject.get("host_name").getAsString()); - hc.setStarted("STARTED".equals(hcJsonObject.get("state").getAsString())); - hc.setName(hcJsonObject.get("component_name").getAsString()); - hcList.add(hc); - } - } - svc.setComponentsToHostComponentsMap(componentsToHostComponentsMap); - return svc; - } catch (IOException e) { - logger.warn("Unable to determine Ambari clusters", e); - throw new RuntimeException(e.getMessage(), e); - } - } - return null; -} - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java deleted file mode 100644 index bfc4d3a..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/BaseHttpClient.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Map; - -import org.apache.ambari.view.URLStreamProvider; -import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.utils.ambari.AmbariApi; -import org.apache.commons.io.IOUtils; - -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class BaseHttpClient { - private static final Logger logger = LoggerFactory.getLogger(BaseHttpClient.class); - - private String url; - private boolean needsAuthentication; - private String userId; - private String password; - protected ViewContext viewContext; - protected AmbariApi ambariApi; - - public BaseHttpClient(String url, ViewContext viewContext) { - setUrl(url); - setNeedsAuthentication(false); - setViewContext(viewContext); - if (viewContext != null) { - ambariApi = new AmbariApi(viewContext); - } - } - - public BaseHttpClient(String url, String userId, String password, - ViewContext viewContext) { - setUrl(url); - setNeedsAuthentication(true); - setUserId(userId); - setPassword(password); - setViewContext(viewContext); - if (viewContext != null) { - ambariApi = new AmbariApi(viewContext); - } - } - - public void setViewContext(ViewContext viewContext) { - this.viewContext = viewContext; - } - - public URLStreamProvider getUrlStreamProvider() { - return viewContext.getURLStreamProvider(); - } - - public URLStreamProviderBasicAuth getUrlStreamProviderBasicAuth() { - return new URLStreamProviderBasicAuth(getUrlStreamProvider(),getUserId(),getPassword()); - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public boolean isNeedsAuthentication() { - return needsAuthentication; - } - - public void setNeedsAuthentication(boolean needsAuthentication) { - this.needsAuthentication = needsAuthentication; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public JsonElement doGetJson(String path) throws IOException { - return doGetJson(getUrl(), path); - } - - public JsonElement doGetJson(String url, String path) throws IOException { - InputStream inputStream = null; - try { - Map<String, String> headers = new HashMap<String, String>(); - if (isNeedsAuthentication()) { - inputStream = getUrlStreamProviderBasicAuth().readFrom( - url + path, "GET", (String) null, headers); - } else { - inputStream = getUrlStreamProvider().readAsCurrent( - url + path, "GET", (String) null, headers); - } - } catch (IOException e) { - logger.error("Error while reading from url " + url + path, e); - throw e; - } - JsonElement jsonElement = new JsonParser().parse(new JsonReader( - new InputStreamReader(inputStream))); - return jsonElement; - } - - public String doGet(String path) throws IOException { - String response = null; - try { - InputStream inputStream = null; - if (isNeedsAuthentication()) { - inputStream = getUrlStreamProviderBasicAuth().readFrom( - getUrl() + path, "GET", (String) null, - new HashMap<String, String>()); - } else { - inputStream = getUrlStreamProvider().readAsCurrent( - getUrl() + path, "GET", (String) null, - new HashMap<String, String>()); - } - response = IOUtils.toString(inputStream); - } catch (IOException e) { - logger.error("Error while reading from url " + getUrl() + path, e); - throw e; - } - return response; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java deleted file mode 100644 index 04b824a..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/JMXMetricHolder.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import java.util.List; -import java.util.Map; - -/** - * - */ -public final class JMXMetricHolder { - - private List<Map<String, Object>> beans; - - public List<Map<String, Object>> getBeans() { - return beans; - } - - public void setBeans(List<Map<String, Object>> beans) { - this.beans = beans; - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - - for (Map<String, Object> map : beans) { - for (Map.Entry<String, Object> entry : map.entrySet()) { - stringBuilder.append(" ").append(entry.toString()).append("\n"); - } - } - return stringBuilder.toString(); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java deleted file mode 100644 index 1ec682b..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/Metric.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; - -import java.util.ArrayList; -import java.util.List; - -@JsonIgnoreProperties({"keyName", "matchers", "xPathExpression", "xPathExpressionComputed"}) -public class Metric { - private static final Logger logger = LoggerFactory - .getLogger(Metric.class); - private static String SEPARATOR = "."; - private static char SEPARATOR_REPLACED = '#'; - private String metric; - private boolean pointInTime; - private boolean temporal; - @JsonIgnore - private String keyName = null; - @JsonIgnore - private List<List<String>> matchers = null; - @JsonIgnore - private XPathExpression xPathExpression = null; - @JsonIgnore - private boolean xPathExpressionComputed = false; - - private Metric() { - } - - protected Metric(String metric, boolean pointInTime, boolean temporal) { - this.metric = metric; - this.pointInTime = pointInTime; - this.temporal = temporal; - } - - public String getMetric() { - return metric; - } - - public void setMetric(String metric) { - this.metric = metric; - } - - public boolean isPointInTime() { - return pointInTime; - } - - public void setPointInTime(boolean pointInTime) { - this.pointInTime = pointInTime; - } - - public boolean isTemporal() { - return temporal; - } - - public void setTemporal(boolean temporal) { - this.temporal = temporal; - } - - @JsonIgnore - public XPathExpression getxPathExpression() { - if (!xPathExpressionComputed) { - XPathFactory xPathfactory = XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - XPathExpression schemaPath = null; - try { - schemaPath = xpath.compile(metric); - } catch (XPathExpressionException e) { - logger.info(String.format("Unable to compile %s into xpath expression", metric)); - } - xPathExpression = schemaPath; - xPathExpressionComputed = true; - } - - return xPathExpression; - } - - @JsonIgnore - public String getJmxBeanKeyName() { - if (keyName == null) { - int firstIndex = metric.indexOf(SEPARATOR); - if (firstIndex > 0) { - keyName = metric.substring(0, firstIndex).replace(SEPARATOR_REPLACED, '.'); - } - } - return keyName; - } - - /** - * Matcher is of the form a.b.c... They can be matched as a -> b-> c or a.b -> c or a -> b.c etc. The matcher returns - * all possibilities in priority order - * - * @return - */ - @JsonIgnore - public List<List<String>> getMatchers() { - if (matchers == null) { - List<List<String>> tmpMatchers = new ArrayList<List<String>>(); - int matcherStartIndex = metric.indexOf(SEPARATOR); - if (matcherStartIndex > 0) { - String allTagsStr = metric.substring(matcherStartIndex + 1); - String[] tags = allTagsStr.split("\\."); - if (tags.length > 0) { - extractMatchers(tags, -1, tmpMatchers, null); - } - } - - matchers = tmpMatchers; - } - return matchers; - } - - public void extractMatchers(String[] tags, int index, List<List<String>> matchers, ArrayList<String> currentSet) { - if (tags.length == index + 1) { - matchers.add(currentSet); - } else { - if (index == -1) { - currentSet = new ArrayList<String>(); - currentSet.add(tags[0]); - extractMatchers(tags, 0, matchers, currentSet); - } else { - ArrayList<String> mergeAndProceed = new ArrayList<String>(currentSet); - mergeAndProceed.add(tags[index + 1]); - extractMatchers(tags, index + 1, matchers, mergeAndProceed); - - ArrayList<String> appendAndProceed = new ArrayList<String>(currentSet); - int lastIndex = appendAndProceed.size() - 1; - appendAndProceed.set(lastIndex, appendAndProceed.get(lastIndex) + "." + tags[index + 1]); - extractMatchers(tags, index + 1, matchers, appendAndProceed); - } - } - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java deleted file mode 100644 index 7f7aae0..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppJmxHelper.java +++ /dev/null @@ -1,205 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import org.apache.commons.io.IOUtils; -import org.codehaus.jackson.map.DeserializationConfig; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.ObjectReader; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class SliderAppJmxHelper { - - private static final Logger logger = LoggerFactory - .getLogger(SliderAppJmxHelper.class); - private static final String NAME_KEY = "name"; - private static final String PORT_KEY = "tag.port"; - private static final String FORPORT_KEY = "ForPort"; - private static final String JSON_METRIC_START = "$['"; - private static final String JSON_METRIC_END = "']"; - - public static JMXTypes jmxTypeExpected(Map<String, Metric> metrics) { - JMXTypes retVal = null; - for (Metric metric : metrics.values()) { - if (retVal == null) { - retVal = getMetricType(metric.getMetric()); - continue; - } else { - if (retVal != getMetricType(metric.getMetric())) { - retVal = null; - break; - } - } - } - return retVal; - } - - public static void extractMetricsFromJmxBean(InputStream jmxStream, String jmxUrl, - Map<String, String> jmxProperties, - Map<String, Metric> metrics) { - ObjectMapper jmxObjectMapper = new ObjectMapper(); - jmxObjectMapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS, false); - ObjectReader jmxObjectReader = jmxObjectMapper.reader(JMXMetricHolder.class); - JMXMetricHolder metricHolder = null; - try { - metricHolder = jmxObjectReader.readValue(jmxStream); - } catch (IOException e) { - logger.error(String.format("Malformed jmx data from %s. Error %s", jmxUrl, e.getMessage())); - } - - Map<String, Map<String, Object>> categories = new HashMap<String, Map<String, Object>>(); - - for (Map<String, Object> bean : metricHolder.getBeans()) { - String category = getCategory(bean); - if (category != null) { - categories.put(category, bean); - } - } - - addJmxPropertiesFromBeans(jmxProperties, categories, metrics); - } - - public static void extractMetricsFromJmxJson(InputStream jmxStream, String jmxUrl, - Map<String, String> jmxProperties, - Map<String, Metric> metrics) - throws IOException, ParseException { - JSONParser parser = new JSONParser(); - Object obj = parser.parse(IOUtils.toString(jmxStream)); - JSONObject jsonObject = (JSONObject) obj; - for (String key : metrics.keySet()) { - Metric metric = metrics.get(key); - String jsonKey = extractJsonKeySingleLevel(metric.getMetric()); - Object value = jsonObject.get(jsonKey); - if (value != null) { - jmxProperties.put(key, value.toString()); - } - } - } - - private static String extractJsonKeySingleLevel(String metricKey) { - String jsonKey = metricKey; - if (metricKey != null) { - if (metricKey.startsWith(JSON_METRIC_START) && metricKey.endsWith(JSON_METRIC_END)) { - jsonKey = metricKey.substring(JSON_METRIC_START.length(), metricKey.length() - JSON_METRIC_END.length()); - } - } - - return jsonKey; - } - - public static void extractMetricsFromJmxXML(InputStream jmxStream, String jmxUrl, - Map<String, String> jmxProperties, - Map<String, Metric> metrics) - throws ParserConfigurationException, IOException, SAXException, XPathExpressionException { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(jmxStream); - for (String key : metrics.keySet()) { - Metric metric = metrics.get(key); - XPathExpression xPathExpression = metric.getxPathExpression(); - if (xPathExpression != null) { - String value = xPathExpression.evaluate(doc); - if (value != null) { - jmxProperties.put(key, value.toString().trim()); - } - } - } - } - - private static String getCategory(Map<String, Object> bean) { - if (bean.containsKey(NAME_KEY)) { - String name = (String) bean.get(NAME_KEY); - - if (bean.containsKey(PORT_KEY)) { - String port = (String) bean.get(PORT_KEY); - name = name.replace(FORPORT_KEY + port, ""); - } - return name; - } - return null; - } - - protected static void addJmxPropertiesFromBeans(Map<String, String> jmxProperties, - Map<String, Map<String, Object>> categories, - Map<String, Metric> relevantMetrics) { - for (String metricName : relevantMetrics.keySet()) { - Metric metric = relevantMetrics.get(metricName); - String beanName = metric.getJmxBeanKeyName(); - Object value = categories.get(beanName); - if (value instanceof Map) { - Map<?, ?> map = (Map<?, ?>) value; - for (List<String> matcher : metric.getMatchers()) { - boolean foundMetrics = false; - for (int matchIndex = 0; matchIndex < matcher.size(); matchIndex++) { - String matchKey = matcher.get(matchIndex); - value = map.get(matchKey); - if (value instanceof Map) { - map = (Map<?, ?>) value; - continue; - } else { - if (value != null && matchIndex == matcher.size() - 1) { - jmxProperties.put(metricName, value.toString()); - foundMetrics = true; - } else { - break; - } - } - } - if (foundMetrics) { - break; - } - } - } - } - } - - private static JMXTypes getMetricType(String metricKey) { - assert metricKey != null; - if (metricKey.startsWith("/")) { - return JMXTypes.XML; - } else if (metricKey.startsWith("$")) { - return JMXTypes.JSON; - } else { - return JMXTypes.JMX_BEAN; - } - } - - public enum JMXTypes { - JMX_BEAN, - JSON, - XML - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java deleted file mode 100644 index 0a2540c..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java +++ /dev/null @@ -1,324 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import org.apache.ambari.view.URLStreamProvider; -import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.slider.MetricsHolder; -import org.apache.ambari.view.slider.SliderAppType; -import org.apache.ambari.view.slider.SliderAppTypeComponent; -import org.apache.ambari.view.slider.TemporalInfo; -import org.apache.ambari.view.slider.SliderAppsViewController; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SliderAppMasterClient extends BaseHttpClient { - - private static final Logger logger = LoggerFactory - .getLogger(SliderAppMasterClient.class); - - public SliderAppMasterClient(String url, ViewContext viewContext) { - super(url, viewContext); - } - - public SliderAppMasterData getAppMasterData() { - try { - String html = doGet(""); - if (html != null) { - int from = html.lastIndexOf("<ul>"); - int to = html.lastIndexOf("</ul>"); - if (from < to && from > -1) { - SliderAppMasterData data = new SliderAppMasterData(); - String content = html.substring(from, to); - content = content.replaceAll("<[^>]*>", "\r\n"); - String[] splits = content.split("\r\n"); - for (int i = 0; i < splits.length; i++) { - String split = splits[i].trim(); - if ("classpath:org.apache.slider.registry".equals(split)) { - data.registryUrl = splits[i + 1].trim(); - } else if ("classpath:org.apache.http.UI".equals(split)) { - data.uiUrl = splits[i + 1].trim(); - } else if ("classpath:org.apache.slider.management".equals(split)) { - data.managementUrl = splits[i + 1].trim(); - } else if ("classpath:org.apache.slider.publisher".equals(split)) { - data.publisherUrl = splits[i + 1].trim(); - } - } - return data; - } - } - } catch (IOException e) { - logger.warn("Unable to determine Ambari clusters", e); - throw new RuntimeException(e.getMessage(), e); - } - return null; - } - - public Map<String, String> getQuickLinks(String providerUrl) { - Map<String, String> quickLinks = new HashMap<String, String>(); - try { - if (providerUrl == null || providerUrl.trim().length() < 1) { - return quickLinks; - } - JsonElement json = super.doGetJson(providerUrl, "/slider/quicklinks"); - if (json != null && json.getAsJsonObject() != null - && json.getAsJsonObject().has("entries")) { - JsonObject jsonObject = json.getAsJsonObject().get("entries") - .getAsJsonObject(); - for (Entry<String, JsonElement> entry : jsonObject.entrySet()) { - if ("org.apache.slider.jmx".equals(entry.getKey())) { - quickLinks.put("JMX", entry.getValue().getAsString()); - } else if ("org.apache.slider.monitor".equals(entry.getKey())) { - quickLinks.put("UI", entry.getValue().getAsString()); - } else if ("org.apache.slider.metrics.ui".equals(entry.getKey())) { - quickLinks.put("Metrics UI", entry.getValue().getAsString()); - } else if ("org.apache.slider.metrics".equals(entry.getKey())) { - quickLinks.put(SliderAppsViewController.METRICS_API_NAME, entry.getValue().getAsString()); - } else { - quickLinks.put(entry.getKey(), entry.getValue().getAsString()); - } - } - } - } catch (IOException e) { - logger.warn("Unable to determine quicklinks from " + providerUrl, e); - } - return quickLinks; - } - - public Map<String, Map<String, String>> getConfigs(String providerUrl) { - Map<String, Map<String, String>> configsMap = new HashMap<String, Map<String, String>>(); - try { - if (providerUrl == null || providerUrl.trim().length() < 1) { - return configsMap; - } - JsonElement json = super.doGetJson(providerUrl, "/slider"); - if (json != null) { - JsonObject configsJson = json.getAsJsonObject().get("configurations") - .getAsJsonObject(); - for (Entry<String, JsonElement> entry : configsJson.entrySet()) { - if ("complete-config".equals(entry.getKey()) - || "quicklinks".equals(entry.getKey())) { - continue; - } - JsonElement entryJson = super.doGetJson(providerUrl, "/slider/" - + entry.getKey()); - if (entryJson != null) { - JsonObject configsObj = entryJson.getAsJsonObject().get("entries") - .getAsJsonObject(); - if (configsObj != null) { - Map<String, String> configs = new HashMap<String, String>(); - for (Entry<String, JsonElement> e : configsObj.entrySet()) { - configs.put(e.getKey(), e.getValue().getAsString()); - } - configsMap.put(entry.getKey(), configs); - } - } - } - } - } catch (IOException e) { - logger.warn("Unable to determine quicklinks from " + providerUrl, e); - } - return configsMap; - } - - public Map<String, Number[][]> getMetrics(String appName, - String metricsUrl, - Set<String> metricsRequested, - TemporalInfo temporalInfo, - ViewContext context, - SliderAppType appType, - MetricsHolder metricsHolder) { - Map<String, Number[][]> retVal = new HashMap<String, Number[][]>(); - - if (appType == null || metricsHolder == null - || metricsHolder.getTimelineMetrics() == null) { - logger.info("AppType must be provided and it must contain " - + "timeline_metrics.json to extract jmx properties"); - return retVal; - } - - Map<String, Number[][]> receivedMetrics = null; - List<String> components = new ArrayList<String>(); - for (SliderAppTypeComponent appTypeComponent : appType.getTypeComponents()) { - components.add(appTypeComponent.getName()); - } - - Map<String, Map<String, Map<String, Metric>>> metrics = metricsHolder - .getTimelineMetrics(); - Map<String, Metric> relevantMetrics = getRelevantMetrics(metrics, components); - Set<String> metricsToRead = new HashSet<String>(); - Map<String, String> reverseNameLookup = new HashMap<String, String>(); - for (String key : relevantMetrics.keySet()) { - if (metricsRequested.contains(key)) { - String metricName = relevantMetrics.get(key).getMetric(); - metricsToRead.add(metricName); - reverseNameLookup.put(metricName, key); - } - } - - if (metricsToRead.size() != 0) { - try { - String specWithParams = SliderAppMetricsHelper.getUrlWithParams( - appName, metricsUrl, metricsToRead, temporalInfo); - logger.info("Using spec: " + specWithParams); - if (specWithParams != null) { - - String spec = null; - String params = null; - String[] tokens = specWithParams.split("\\?", 2); - - try { - spec = tokens[0]; - params = tokens[1]; - } catch (ArrayIndexOutOfBoundsException e) { - logger.info(e.toString()); - } - - receivedMetrics = SliderAppMetricsHelper.getMetrics(context, spec, - params); - } - } catch (Exception e) { - logger.warn("Unable to retrieve metrics. " + e.getMessage()); - } - } - - if (receivedMetrics != null) { - for (Map.Entry<String, Number[][]> metric : receivedMetrics.entrySet()) { - if (reverseNameLookup.containsKey(metric.getKey())) { - retVal.put(reverseNameLookup.get(metric.getKey()), metric.getValue()); - } - } - } - - return retVal; - } - - /** - * Provides only the interesting JMX metric names and values. - * - * @param jmxUrl - * - * @return - */ - public Map<String, String> getJmx(String jmxUrl, - ViewContext context, - SliderAppType appType, - MetricsHolder metricsHolder) { - Map<String, String> jmxProperties = new HashMap<String, String>(); - if (appType == null || metricsHolder == null || metricsHolder.getJmxMetrics() == null) { - logger - .info("AppType must be provided and it must contain jmx_metrics.json to extract jmx properties"); - return jmxProperties; - } - - List<String> components = new ArrayList<String>(); - for (SliderAppTypeComponent appTypeComponent : appType.getTypeComponents()) { - components.add(appTypeComponent.getName()); - } - - Map<String, Map<String, Map<String, Metric>>> metrics = metricsHolder.getJmxMetrics(); - Map<String, Metric> relevantMetrics = getRelevantMetrics(metrics, components); - if (relevantMetrics.size() == 0) { - logger.info("No metrics found for components defined in the app."); - return jmxProperties; - } - - SliderAppJmxHelper.JMXTypes jmxType = SliderAppJmxHelper.jmxTypeExpected(relevantMetrics); - if (jmxType == null) { - logger - .info("jmx_metrics.json is malformed. It may have mixed metric key types of unsupported metric key types."); - return jmxProperties; - } - - try { - URLStreamProvider streamProvider = context.getURLStreamProvider(); - InputStream jmxStream = null; - Map<String, String> headers = new HashMap<String, String>(); - try { - jmxStream = streamProvider.readFrom(jmxUrl, "GET", (String)null, headers); - } catch (IOException e) { - logger.error(String.format( - "Unable to access JMX endpoint at %s. Error %s", jmxUrl, - e.getMessage())); - } - - if (jmxStream != null) { - switch (jmxType) { - case JMX_BEAN: - SliderAppJmxHelper.extractMetricsFromJmxBean(jmxStream, jmxUrl, - jmxProperties, relevantMetrics); - break; - case JSON: - SliderAppJmxHelper.extractMetricsFromJmxJson(jmxStream, jmxUrl, - jmxProperties, relevantMetrics); - break; - case XML: - SliderAppJmxHelper.extractMetricsFromJmxXML(jmxStream, jmxUrl, - jmxProperties, relevantMetrics); - break; - default: - logger.info("Unsupported jmx type."); - } - } - } catch (Exception e) { - logger.info("Failed to extract jmx metrics. " + e.getMessage()); - } - - return jmxProperties; - } - - private Map<String, Metric> getRelevantMetrics( - Map<String, Map<String, Map<String, Metric>>> metrics, List<String> comps) { - Map<String, Metric> relevantMetrics = new HashMap<String, Metric>(); - for (String comp : comps) { - for (Map<String, Map<String, Metric>> m : metrics.values()) { - if (m.containsKey(comp)) { - relevantMetrics.putAll(m.get(comp)); - } - } - } - return relevantMetrics; - } - - public static class SliderAppMasterData { - public String registryUrl; - public String uiUrl; - public String managementUrl; - public String publisherUrl; - } - - public static class SliderAppContainerData { - public String hostName; - public String containerId; - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java deleted file mode 100644 index 1044e9d..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMetricsHelper.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.apache.ambari.view.SystemException; -import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.slider.TemporalInfo; -import org.apache.http.client.utils.URIBuilder; -import org.codehaus.jackson.map.AnnotationIntrospector; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.ObjectReader; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; -import org.codehaus.jackson.xc.JaxbAnnotationIntrospector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SliderAppMetricsHelper { - private static final Logger logger = LoggerFactory - .getLogger(SliderAppMetricsHelper.class); - private static ObjectMapper mapper; - private final static ObjectReader timelineObjectReader; - private final static String URI_PARAM_APP_ID = "appId"; - private final static String URI_PARAM_METRIC_NAMES = "metricNames"; - private final static String URI_PARAM_START_TIME = "startTime"; - private final static String URI_PARAM_END_TIME = "endTime"; - - static { - mapper = new ObjectMapper(); - AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); - mapper.setAnnotationIntrospector(introspector); - // no inspection deprecation - mapper.getSerializationConfig().setSerializationInclusion( - Inclusion.NON_NULL); - timelineObjectReader = mapper.reader(TimelineMetrics.class); - } - - public static Map<String, Number[][]> getMetrics(ViewContext context, - String spec, String params) throws IOException { - Map<String, Number[][]> receivedMetrics = new HashMap<String, Number[][]>(); - Map<String, String> headers = new HashMap<String, String>(); - - BufferedReader reader = null; - try { - String fullUrl = spec + "?" + params; - logger.debug("Metrics request url = " + fullUrl); - reader = new BufferedReader(new InputStreamReader(context - .getURLStreamProvider().readFrom(fullUrl, "GET", (String)null, headers))); - - TimelineMetrics timelineMetrics = timelineObjectReader.readValue(reader); - logger.debug("Timeline metrics response => " + timelineMetrics); - - for (TimelineMetric tlMetric : timelineMetrics.getMetrics()) { - if (tlMetric.getMetricName() != null - && tlMetric.getMetricValues() != null) { - Map<Long, Double> tlMetricValues = tlMetric.getMetricValues(); - Number[][] metricValues = transformMetricValues(tlMetricValues); - receivedMetrics.put(tlMetric.getMetricName(), metricValues); - } - } - - } catch (IOException io) { - logger.warn("Error getting timeline metrics.", io); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - if (logger.isDebugEnabled()) { - logger.warn("Unable to close http input steam : spec=" + spec, e); - } - } - } - } - - return receivedMetrics; - } - - private static Number[][] transformMetricValues( - Map<Long, Double> tlMetricValues) { - Number[][] metricValues = new Number[tlMetricValues.size()][2]; - int i = 0; - for (Map.Entry<Long, Double> tlMetricValue : tlMetricValues.entrySet()) { - // value goes to column 0 - metricValues[i][0] = tlMetricValue.getValue(); - // timestamp goes to column 1 - convert it from millis to sec - metricValues[i][1] = tlMetricValue.getKey() / 1000; - i++; - } - return metricValues; - } - - public static String getUrlWithParams(String appName, String metricUrl, - Set<String> metricSet, TemporalInfo temporalInfo) throws SystemException, - URISyntaxException { - String metrics = getSetString(metricSet, -1); - URIBuilder uriBuilder = new URIBuilder(metricUrl); - - if (appName != null) { - uriBuilder.setParameter(URI_PARAM_APP_ID, appName); - } - if (metrics.length() > 0) { - uriBuilder.setParameter(URI_PARAM_METRIC_NAMES, metrics); - } - - if (temporalInfo != null) { - long startTime = temporalInfo.getStartTime(); - if (startTime != -1) { - uriBuilder.setParameter(URI_PARAM_START_TIME, String.valueOf(startTime)); - } - long endTime = temporalInfo.getEndTime(); - if (endTime != -1) { - uriBuilder.setParameter(URI_PARAM_END_TIME, String.valueOf(endTime)); - } - } else { - long endTime = System.currentTimeMillis() / 1000; - long startTime = System.currentTimeMillis() / 1000 - 60 * 60; - uriBuilder.setParameter(URI_PARAM_END_TIME, String.valueOf(endTime)); - uriBuilder.setParameter(URI_PARAM_START_TIME, String.valueOf(startTime)); - } - return uriBuilder.toString(); - } - - private static String getSetString(Set<String> set, int limit) { - StringBuilder sb = new StringBuilder(); - if (limit == -1 || set.size() <= limit) { - for (String cluster : set) { - if (sb.length() > 0) { - sb.append(","); - } - sb.append(cluster); - } - } - return sb.toString(); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java deleted file mode 100644 index e5e1e8f..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetric.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import java.util.Map; -import java.util.TreeMap; - -@XmlRootElement(name = "metric") -@XmlAccessorType(XmlAccessType.NONE) -@InterfaceAudience.Public -@InterfaceStability.Unstable -public class TimelineMetric implements Comparable<TimelineMetric> { - - private String metricName; - private String appId; - private String instanceId; - private String hostName; - private long timestamp; - private long startTime; - private String type; - private Map<Long, Double> metricValues = new TreeMap<Long, Double>(); - - @XmlElement(name = "metricname") - public String getMetricName() { - return metricName; - } - - public void setMetricName(String metricName) { - this.metricName = metricName; - } - - @XmlElement(name = "appid") - public String getAppId() { - return appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - @XmlElement(name = "instanceid") - public String getInstanceId() { - return instanceId; - } - - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - @XmlElement(name = "hostname") - public String getHostName() { - return hostName; - } - - public void setHostName(String hostName) { - this.hostName = hostName; - } - - @XmlElement(name = "timestamp") - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - @XmlElement(name = "starttime") - public long getStartTime() { - return startTime; - } - - public void setStartTime(long startTime) { - this.startTime = startTime; - } - - @XmlElement(name = "type") - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - @XmlElement(name = "metrics") - public Map<Long, Double> getMetricValues() { - return metricValues; - } - - public void setMetricValues(Map<Long, Double> metricValues) { - this.metricValues = metricValues; - } - - public void addMetricValues(Map<Long, Double> metricValues) { - this.metricValues.putAll(metricValues); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - TimelineMetric metric = (TimelineMetric) o; - - if (!metricName.equals(metric.metricName)) return false; - if (hostName != null ? !hostName.equals(metric.hostName) : metric.hostName != null) - return false; - if (appId != null ? !appId.equals(metric.appId) : metric.appId != null) - return false; - if (instanceId != null ? !instanceId.equals(metric.instanceId) : metric.instanceId != null) - return false; - if (timestamp != metric.timestamp) return false; - if (startTime != metric.startTime) return false; - - return true; - } - - public boolean equalsExceptTime(TimelineMetric metric) { - if (!metricName.equals(metric.metricName)) return false; - if (hostName != null ? !hostName.equals(metric.hostName) : metric.hostName != null) - return false; - if (appId != null ? !appId.equals(metric.appId) : metric.appId != null) - return false; - if (instanceId != null ? !instanceId.equals(metric.instanceId) : metric.instanceId != null) - return false; - - return true; - } - - @Override - public int hashCode() { - int result = metricName.hashCode(); - result = 31 * result + (appId != null ? appId.hashCode() : 0); - result = 31 * result + (instanceId != null ? instanceId.hashCode() : 0); - result = 31 * result + (hostName != null ? hostName.hashCode() : 0); - result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)); - return result; - } - - @Override - public int compareTo(TimelineMetric other) { - if (timestamp > other.timestamp) { - return -1; - } else if (timestamp < other.timestamp) { - return 1; - } else { - return metricName.compareTo(other.metricName); - } - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java deleted file mode 100644 index bb125af..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/TimelineMetrics.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import java.util.ArrayList; -import java.util.List; - -/** - * The class that hosts a list of timeline entities. - */ -@XmlRootElement(name = "metrics") -@XmlAccessorType(XmlAccessType.NONE) -@InterfaceAudience.Public -@InterfaceStability.Unstable -public class TimelineMetrics { - - private List<TimelineMetric> allMetrics = new ArrayList<TimelineMetric>(); - - public TimelineMetrics() {} - - @XmlElement(name = "metrics") - public List<TimelineMetric> getMetrics() { - return allMetrics; - } - - public void setMetrics(List<TimelineMetric> allMetrics) { - this.allMetrics = allMetrics; - } - - private boolean isEqualTimelineMetrics(TimelineMetric metric1, - TimelineMetric metric2) { - - boolean isEqual = true; - - if (!metric1.getMetricName().equals(metric2.getMetricName())) { - return false; - } - - if (metric1.getHostName() != null) { - isEqual = metric1.getHostName().equals(metric2.getHostName()); - } - - if (metric1.getAppId() != null) { - isEqual = metric1.getAppId().equals(metric2.getAppId()); - } - - return isEqual; - } - - /** - * Merge with existing TimelineMetric if everything except startTime is - * the same. - * @param metric {@link TimelineMetric} - */ - public void addOrMergeTimelineMetric(TimelineMetric metric) { - TimelineMetric metricToMerge = null; - - if (!allMetrics.isEmpty()) { - for (TimelineMetric timelineMetric : allMetrics) { - if (timelineMetric.equalsExceptTime(metric)) { - metricToMerge = timelineMetric; - break; - } - } - } - - if (metricToMerge != null) { - metricToMerge.addMetricValues(metric.getMetricValues()); - if (metricToMerge.getTimestamp() > metric.getTimestamp()) { - metricToMerge.setTimestamp(metric.getTimestamp()); - } - if (metricToMerge.getStartTime() > metric.getStartTime()) { - metricToMerge.setStartTime(metric.getStartTime()); - } - } else { - allMetrics.add(metric); - } - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java deleted file mode 100644 index 2d32fd7..0000000 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/URLStreamProviderBasicAuth.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * 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.view.slider.rest.client; - -import org.apache.ambari.view.URLStreamProvider; -import org.apache.commons.codec.binary.Base64; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -/** - * Wrapper for URLStreamProvider that adds authentication header. - */ -public class URLStreamProviderBasicAuth implements URLStreamProvider { - private URLStreamProvider urlStreamProvider; - private String username; - private String password; - private String requestedBy = "views"; - - public URLStreamProviderBasicAuth(URLStreamProvider urlStreamProvider, String username, String password) { - this.urlStreamProvider = urlStreamProvider; - this.username = username; - this.password = password; - } - - /** - * X-Requested-By header value - * @param requestedBy value of X-Requested-By header - */ - public void setRequestedBy(String requestedBy) { - this.requestedBy = requestedBy; - } - - @Override - public InputStream readFrom(String url, String method, String data, Map<String, String> headers) throws IOException { - return urlStreamProvider.readFrom(url, method, data, addHeaders(headers)); - } - - @Override - public InputStream readFrom(String url, String method, InputStream data, Map<String, String> headers) throws IOException { - return urlStreamProvider.readFrom(url, method, data, addHeaders(headers)); - } - - @Override - public InputStream readAs(String url, String method, String data, Map<String, String> headers, String doAs) throws IOException { - return urlStreamProvider.readAs(url, method, data, addHeaders(headers), doAs); - } - - @Override - public InputStream readAs(String url, String method, InputStream data, Map<String, String> headers, String doAs) throws IOException { - return urlStreamProvider.readAs(url, method, data, addHeaders(headers), doAs); - } - - @Override - public InputStream readAsCurrent(String url, String method, String data, Map<String, String> headers) throws IOException { - return urlStreamProvider.readAsCurrent(url, method, data, addHeaders(headers)); - } - - @Override - public InputStream readAsCurrent(String url, String method, InputStream data, Map<String, String> headers) throws IOException { - return urlStreamProvider.readAsCurrent(url, method, data, addHeaders(headers)); - } - - private HashMap<String, String> addHeaders(Map<String, String> customHeaders) { - HashMap<String, String> newHeaders = new HashMap<String, String>(); - if (customHeaders != null) - newHeaders.putAll(customHeaders); - - if (urlStreamProvider != null) { - // basic auth is not needed for AmbariStreamProvider - addBasicAuthHeaders(newHeaders); - } - addRequestedByHeaders(newHeaders); - return newHeaders; - } - - private void addRequestedByHeaders(HashMap<String, String> newHeaders) { - newHeaders.put("X-Requested-By", requestedBy); - } - - private void addBasicAuthHeaders(HashMap<String, String> headers) { - String authString = username + ":" + password; - byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); - String authStringEnc = new String(authEncBytes); - - headers.put("Authorization", "Basic " + authStringEnc); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/slider.properties ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/slider.properties b/contrib/views/slider/src/main/resources/slider.properties deleted file mode 100644 index c635e15..0000000 --- a/contrib/views/slider/src/main/resources/slider.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2011 The Apache Software Foundation -# -# 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. - -slider.view.version=${project.version} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/.gitignore ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/.gitignore b/contrib/views/slider/src/main/resources/ui/.gitignore deleted file mode 100755 index 95fc1d7..0000000 --- a/contrib/views/slider/src/main/resources/ui/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Numerous always-ignore extensions -*.diff -*.err -*.orig -*.log -*.rej -*.swo -*.swp -*.vi -*~ -*.sass-cache - -# OS or Editor folders -.DS_Store -.cache -.project -.settings -.tmproj -nbproject -Thumbs.db - -# NPM packages folder. -node_modules/ - -# Brunch folder for temporary files. -tmp/ - -# Brunch output folder. -public/ - -bower_components/ http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/resources/ui/LICENSE ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/LICENSE b/contrib/views/slider/src/main/resources/ui/LICENSE deleted file mode 100755 index 345b31a..0000000 --- a/contrib/views/slider/src/main/resources/ui/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -All of brunch-with-ember-reloaded is licensed under the MIT license. - -Copyright (c) 2013 Giovanni Collazo - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.