http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/LoadRunner.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/LoadRunner.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/LoadRunner.java deleted file mode 100644 index 7974a5f..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/LoadRunner.java +++ /dev/null @@ -1,160 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator; - -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.AppID; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.ApplicationInstance; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.HostMetricsGenerator; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.MetricsGeneratorConfigurer; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net.MetricsSender; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net.RestMetricsSender; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net.StdOutMetricsSender; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.TimeStampProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.concurrent.*; - -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.AppID.MASTER_APPS; -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.AppID.SLAVE_APPS; - -/** - * - */ -public class LoadRunner { - private final static Logger LOG = LoggerFactory.getLogger(LoadRunner.class); - - private final ScheduledExecutorService timer; - private final ExecutorService workersPool; - private final Collection<Callable<String>> workers; - private final long startTime = new Date().getTime(); - private final int collectIntervalMillis; - private final int sendIntervalMillis; - - public LoadRunner(String hostName, - int threadCount, - String metricsHostName, - int collectIntervalMillis, - int sendIntervalMillis, - boolean createMaster) { - this.collectIntervalMillis = collectIntervalMillis; - this.workersPool = Executors.newFixedThreadPool(threadCount); - this.timer = Executors.newScheduledThreadPool(1); - this.sendIntervalMillis = sendIntervalMillis; - - workers = prepareWorkers(hostName, threadCount, metricsHostName, createMaster); - } - - private Collection<Callable<String>> prepareWorkers(String hostName, - int threadCount, - String metricsHost, - Boolean createMaster) { - Collection<Callable<String>> senderWorkers = - new ArrayList<Callable<String>>(threadCount); - - int startIndex = 0; - if (createMaster) { - String simHost = hostName + ".0"; - addMetricsWorkers(senderWorkers, simHost, metricsHost, MASTER_APPS); - startIndex++; - } - - for (int i = startIndex; i < threadCount; i++) { - String simHost = hostName + "." + i; - addMetricsWorkers(senderWorkers, simHost, metricsHost, SLAVE_APPS); - } - - return senderWorkers; - } - - private void addMetricsWorkers(Collection<Callable<String>> senderWorkers, - String specificHostName, - String metricsHostName, - AppID[] apps) { - for (AppID app : apps) { - HostMetricsGenerator metricsGenerator = - createApplicationMetrics(specificHostName, app); - MetricsSender sender = new RestMetricsSender(metricsHostName); - senderWorkers.add(new MetricsSenderWorker(sender, metricsGenerator)); - } - } - - private HostMetricsGenerator createApplicationMetrics(String simHost, AppID host) { - ApplicationInstance appInstance = new ApplicationInstance(simHost, host, ""); - TimeStampProvider timeStampProvider = new TimeStampProvider(startTime, - collectIntervalMillis, sendIntervalMillis); - - return MetricsGeneratorConfigurer - .createMetricsForHost(appInstance, timeStampProvider); - } - - public void start() { - timer.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - try { - runOnce(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - }, 0, sendIntervalMillis, TimeUnit.MILLISECONDS); - } - - public void runOnce() throws InterruptedException { - List<Future<String>> futures = workersPool.invokeAll(workers, - sendIntervalMillis / 2, - TimeUnit.MILLISECONDS); - int done = 0; - - // TODO: correctly count the failed tasks - for (Future<String> future : futures) { - done += future.isDone() ? 1 : 0; - } - - LOG.info("Finished successfully " + done + " tasks "); - } - - public void shutdown() { - timer.shutdownNow(); - workersPool.shutdownNow(); - } - - public static void main(String[] args) { - LoadRunner runner = - new LoadRunner("local", 2, "metrics", 10000, 20000, false); - - runner.start(); - } - -}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsLoadSimulator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsLoadSimulator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsLoadSimulator.java deleted file mode 100644 index a0c1bd2..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsLoadSimulator.java +++ /dev/null @@ -1,120 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -/** - * Sample Usage: - * <pre> - * $ java -cp "dependency/*":LoadSimulator-1.0-SNAPSHOT.jar \ - * org.apache.ambari.metrics.MetricsLoadSimulator \ - * -h "bartosz.laptop" -n 2 -m "162.216.148.45" -c 10000 -s 30000</pre> - */ -public class MetricsLoadSimulator { - private final static Logger LOG = LoggerFactory.getLogger(MetricsLoadSimulator - .class); - - public static void main(String[] args) throws IOException, InterruptedException { - Map<String, String> mapArgs = parseArgs(args); - - LoadRunner loadRunner = new LoadRunner( - mapArgs.get("hostName"), - Integer.valueOf(mapArgs.get("numberOfHosts")), - mapArgs.get("metricsHostName"), - Integer.valueOf(mapArgs.get("collectInterval")), - Integer.valueOf(mapArgs.get("sendInterval")), - Boolean.valueOf(mapArgs.get("master")) - ); - - loadRunner.start(); - } - - private static Map<String, String> parseArgs(String[] args) { - Map<String, String> mapProps = new HashMap<String, String>(); - mapProps.put("hostName", "host"); - mapProps.put("numberOfHosts", "20"); - mapProps.put("trafficType", "burst"); - mapProps.put("metricsHostName", "localhost"); - mapProps.put("collectInterval", "10000"); - mapProps.put("sendInterval", "60000"); - - if (args.length == 0) { - printUsage(); - throw new RuntimeException("Unexpected argument, See usage message."); - } else { - for (int i = 0; i < args.length; i += 2) { - String arg = args[i]; - if (arg.equals("-h")) { - mapProps.put("hostName", args[i + 1]); - } else if (arg.equals("-n")) { - mapProps.put("numberOfHosts", args[i + 1]); - } else if (arg.equals("-t")) { - mapProps.put("trafficType", args[i + 1]); - } else if (arg.equals("-m")) { - mapProps.put("metricsHostName", args[i + 1]); - } else if (arg.equals("-c")) { - mapProps.put("collectInterval", args[i + 1]); - } else if (arg.equals("-s")) { - mapProps.put("sendInterval", args[i + 1]); - } else if (arg.equals("-M")) { - mapProps.put("master", args[i + 1]); - } else if (arg.equals("-d")) { - // a dummy switch - it says that we agree with defaults - } else { - printUsage(); - throw new RuntimeException("Unexpected argument, See usage message."); - } - } - } - - LOG.info("Recognized options: baseHostName={} hosts#={} trafficMode={} " + - "metricsHostName={} collectIntervalMillis={} sendIntervalMillis={} " + - "simulateMaster={}", - mapProps.get("hostName"), - Integer.valueOf(mapProps.get("numberOfHosts")), - mapProps.get("trafficType"), - mapProps.get("metricsHostName"), - Integer.valueOf(mapProps.get("collectInterval")), - Integer.valueOf(mapProps.get("sendInterval")), - Boolean.valueOf(mapProps.get("master")) - ); - - return mapProps; - } - - public static void printUsage() { - System.err.println("Usage: java MetricsLoadSimulator [OPTIONS]"); - System.err.println("Options: "); - System.err.println("[-h hostName] [-n numberOfHosts] " - + "[-t trafficMode {burst, staggered}] [-m metricsHostName] " - + "[-c collectIntervalMillis {10 sec}] [-s sendIntervalMillis {60 sec}]" - + "[-M simulateMaster {true, false}] "); - System.err.println(); - System.err.println("When you select a master, then one simulated host will play"); - System.err.println("a role of a master, and the rest will be slaves. Otherwise"); - System.err.println("all simulation threads (single thread is for single host)"); - System.err.println("will be slave hosts"); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsSenderWorker.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsSenderWorker.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsSenderWorker.java deleted file mode 100644 index c027933..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/MetricsSenderWorker.java +++ /dev/null @@ -1,65 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator; - - -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.AppMetrics; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data.HostMetricsGenerator; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net.MetricsSender; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net.RestMetricsSender; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.Json; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.concurrent.Callable; - -/** - */ -public class MetricsSenderWorker implements Callable<String> { - private final static Logger LOG = LoggerFactory.getLogger(RestMetricsSender.class); - - MetricsSender sender; - HostMetricsGenerator hmg; - - public MetricsSenderWorker(MetricsSender sender, HostMetricsGenerator metricsGenerator) { - this.sender = sender; - hmg = metricsGenerator; - } - - @Override - public String call() throws Exception { - AppMetrics hostMetrics = hmg.createMetrics(); - - try { - String request = new Json().serialize(hostMetrics); - String response = sender.pushMetrics(request); - - return response; - } catch (IOException e) { - LOG.error("Error while pushing metrics: ", e); - throw e; - } - - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppID.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppID.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppID.java deleted file mode 100644 index 4f58dc5..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppID.java +++ /dev/null @@ -1,42 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data; - -public enum AppID { - HOST("HOST"), - NAMENODE("namenode"), - RESOURCEMANAGER("resourcemanager"), - DATANODE("datanode"), - NODEMANAGER("nodemanager"), - MASTER_HBASE("hbase"), - SLAVE_HBASE("hbase"); - - public static final AppID[] MASTER_APPS = {HOST, NAMENODE, RESOURCEMANAGER, MASTER_HBASE}; - public static final AppID[] SLAVE_APPS = {HOST, DATANODE, NODEMANAGER, SLAVE_HBASE}; - - private String id; - - private AppID(String id) { - this.id = id; - } - - public String getId() { - return id; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppMetrics.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppMetrics.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppMetrics.java deleted file mode 100644 index d9cec2b..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/AppMetrics.java +++ /dev/null @@ -1,48 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data; - -import java.util.ArrayList; -import java.util.Collection; - -/** - * AppMetrics is a class that helps to create properly initialized metrics for - * current app. It also holds the - * metrics and can be serialized to json. - */ -public class AppMetrics { - - private final Collection<Metric> metrics = new ArrayList<Metric>(); - private final transient ApplicationInstance applicationId; - private final transient long startTime; - - public AppMetrics(ApplicationInstance applicationId, long startTime) { - this.applicationId = applicationId; - this.startTime = startTime; - } - - public Metric createMetric(String metricName) { - return new Metric(applicationId, metricName, startTime); - } - - public void addMetric(Metric metric) { - metrics.add(metric); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/ApplicationInstance.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/ApplicationInstance.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/ApplicationInstance.java deleted file mode 100644 index d99ecc9..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/ApplicationInstance.java +++ /dev/null @@ -1,59 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.data; - -/** - * AppId is a helper class that encapsulates the common part of metrics message. - * It contains hostName, appId and instanceId. It is immutable, - * and it can not hold null values. - */ -public final class ApplicationInstance { - - private final transient String hostName; - private final transient AppID appId; - private final transient String instanceId; - - /** - * @param hostname - * @param appId - * @param instanceId - */ - public ApplicationInstance(String hostname, AppID appId, String instanceId) { - if (hostname == null || appId == null || instanceId == null) - throw new IllegalArgumentException("ApplicationInstance can not be " + - "instantiated with null values"); - - this.hostName = hostname; - this.appId = appId; - this.instanceId = instanceId; - } - - public String getInstanceId() { - return instanceId; - } - - public AppID getAppId() { - return appId; - } - - public String getHostName() { - return hostName; - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/HostMetricsGenerator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/HostMetricsGenerator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/HostMetricsGenerator.java deleted file mode 100644 index 61a6624..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/HostMetricsGenerator.java +++ /dev/null @@ -1,63 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.data; - - -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.RandomMetricsProvider; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.TimeStampProvider; - -import java.util.HashMap; -import java.util.Map; - -/** - */ -public class HostMetricsGenerator { - - private Map<String, RandomMetricsProvider> metricDataProviders = new HashMap<String, RandomMetricsProvider>(); - private final TimeStampProvider tsp; - private final ApplicationInstance id; - - public HostMetricsGenerator(ApplicationInstance id, - TimeStampProvider timeStamps, - Map<String, RandomMetricsProvider> metricDataProviders) { - this.id = id; - this.tsp = timeStamps; - this.metricDataProviders = metricDataProviders; - } - - public AppMetrics createMetrics() { - long[] timestamps = tsp.timestampsForNextInterval(); - AppMetrics appMetrics = new AppMetrics(id, timestamps[0]); - - for (Map.Entry<String, RandomMetricsProvider> entry : metricDataProviders.entrySet()) { - String metricName = entry.getKey(); - RandomMetricsProvider metricData = entry.getValue(); - - Metric metric = appMetrics.createMetric(metricName); - for (long timestamp : timestamps) { - metric.putMetric(timestamp, String.valueOf(metricData.next())); - } - appMetrics.addMetric(metric); - } - - return appMetrics; - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/Metric.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/Metric.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/Metric.java deleted file mode 100644 index f274263..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/Metric.java +++ /dev/null @@ -1,71 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.data; - -import java.util.LinkedHashMap; -import java.util.Map; - -public class Metric { - - private String instanceid; - private String hostname; - private Map<String, String> metrics = new LinkedHashMap<String, String>(); - private String starttime; - private String appid; - private String metricname; - - // i don't like this ctor, but it has to be public for json deserialization - public Metric() { - } - - public Metric(ApplicationInstance app, String metricName, long startTime) { - this.hostname = app.getHostName(); - this.appid = app.getAppId().getId(); - this.instanceid = app.getInstanceId(); - this.metricname = metricName; - this.starttime = Long.toString(startTime); - } - - public void putMetric(long timestamp, String value) { - metrics.put(Long.toString(timestamp), value); - } - - public String getInstanceid() { - return instanceid; - } - - public String getHostname() { - return hostname; - } - - public Map<String, String> getMetrics() { - return metrics; - } - - public String getStarttime() { - return starttime; - } - - public String getAppid() { - return appid; - } - - public String getMetricname() { - return metricname; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/MetricsGeneratorConfigurer.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/MetricsGeneratorConfigurer.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/MetricsGeneratorConfigurer.java deleted file mode 100644 index b3401b2..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/data/MetricsGeneratorConfigurer.java +++ /dev/null @@ -1,95 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.data; - - -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.RandomMetricsProvider; -import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util.TimeStampProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Map; - -/** - * MetricsGeneratorConfigurer is a factory that reads metrics definition from a file, - * and returns an Single HostMetricsGenerator. Check createMetricsForHost method - * for details. - */ -public class MetricsGeneratorConfigurer { - - private final static Logger LOG = LoggerFactory.getLogger - (MetricsGeneratorConfigurer.class); - - /** - * Creates HostMetricsGenerator configured with metric names loaded from file. - * - * @param id ApplicationInstance descriptor, will be used to create - * HostMetricsGenerator, cannot be null - * @param timeStamps configured TimeStampProvider that can provide next - * timestamp, cannot be null - * @return HostMetricsGenerator with given ApplicationInstance id and configured - * mapping of - * metric names to data providers - */ - public static HostMetricsGenerator createMetricsForHost( - ApplicationInstance id, - TimeStampProvider timeStamps) { - return new HostMetricsGenerator(id, timeStamps, readMetrics(id.getAppId())); - } - - private static Map<String, RandomMetricsProvider> readMetrics(AppID type) { - InputStream input = null; - Map<String, RandomMetricsProvider> metrics = - new HashMap<String, RandomMetricsProvider>(); - String fileName = "metrics_def/" + type.toString() + ".dat"; - - try { - LOG.info("Loading " + fileName); - - input = MetricsGeneratorConfigurer.class.getClassLoader() - .getResourceAsStream(fileName); - - BufferedReader reader = new BufferedReader(new InputStreamReader(input)); - - String line; - while ((line = reader.readLine()) != null) { - metrics.put(line.trim(), new RandomMetricsProvider(100, 200)); - } - - } catch (IOException e) { - LOG.error("Cannot read file " + fileName + " for appID " + type.toString(), e); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException ex) { - // intentionally left blank, here we cannot do anything - } - } - } - - return metrics; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/MetricsSender.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/MetricsSender.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/MetricsSender.java deleted file mode 100644 index 35c0fc3..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/MetricsSender.java +++ /dev/null @@ -1,31 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.net; - -/** - * MetricSender should provides a simple way of pushing metrics to some service. - */ -public interface MetricsSender { - /** - * Push metrics to the metric service (e.g. a metrics storage system). - * - * @param payload the payload to be sent to metrics service - * @return response message either acknowledgement or error - */ - String pushMetrics(String payload); -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/RestMetricsSender.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/RestMetricsSender.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/RestMetricsSender.java deleted file mode 100644 index 5130ae3..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/RestMetricsSender.java +++ /dev/null @@ -1,95 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.net; - -import com.google.common.base.Stopwatch; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.ProtocolException; - -/** - * Implements MetricsSender and provides a way of pushing metrics to application metrics history service using REST - * endpoint. - */ -public class RestMetricsSender implements MetricsSender { - private final static Logger LOG = LoggerFactory.getLogger(RestMetricsSender.class); - - private final static String COLLECTOR_URL = "http://%s:8188/ws/v1/timeline/metrics"; - private final String collectorServiceAddress; - - /** - * Creates unconnected RestMetricsSender with endpoint configured as - * http://${metricsHost}:8188/ws/v1/timeline/metrics, - * where ${metricsHost} is specified by metricHost param. - * - * @param metricsHost the hostname that will be used to access application metrics history service. - */ - public RestMetricsSender(String metricsHost) { - collectorServiceAddress = String.format(COLLECTOR_URL, metricsHost); - } - - /** - * Push metrics to the REST endpoint. Connection is always open and closed on every call. - * - * @param payload the payload with metrics to be sent to metrics service - * @return response message either acknowledgement or error, empty on exception - */ - @Override - public String pushMetrics(String payload) { - String responseString = ""; - UrlService svc = null; - Stopwatch timer = new Stopwatch().start(); - - try { - LOG.info("server: {}", collectorServiceAddress); - - svc = getConnectedUrlService(); - responseString = svc.send(payload); - - timer.stop(); - LOG.info("http response time: " + timer.elapsedMillis() + " ms"); - - if (responseString.length() > 0) { - LOG.debug("POST response from server: " + responseString); - } - } catch (MalformedURLException e) { - LOG.error("", e); - } catch (ProtocolException e) { - LOG.error("", e); - } catch (IOException e) { - LOG.error("", e); - } finally { - if (svc != null) { - svc.disconnect(); - } - } - - return responseString; - } - - /** - * Relaxed to protected for testing. - */ - protected UrlService getConnectedUrlService() throws IOException { - return UrlService.newConnection(collectorServiceAddress); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/StdOutMetricsSender.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/StdOutMetricsSender.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/StdOutMetricsSender.java deleted file mode 100644 index aeb4ca8..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/StdOutMetricsSender.java +++ /dev/null @@ -1,56 +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.hadoop.yarn.server.applicationhistoryservice.metrics.loadsimulator.net; - -import java.io.PrintStream; - -/** - * StdOutMetricsSender dumps metrics to defined PrintStream out. It is useful for testing. - */ -public class StdOutMetricsSender implements MetricsSender { - public final PrintStream out; - private String metricsHostName; - - /** - * Creates new StdOutMetricsSender with specified hostname (only used in messages) and sends output to System.out - * - * @param metricsHostName a name used in printed messages - */ - public StdOutMetricsSender(String metricsHostName) { - this(metricsHostName, System.out); - } - - /** - * Creates new StdOutMetricsSender with specified hostname (only used in messages) and PrintStream which is used as - * an output. - * - * @param metricsHostName a name used in printed messages - * @param out PrintStream that the Sender will write to, can be System.out - */ - public StdOutMetricsSender(String metricsHostName, PrintStream out) { - this.metricsHostName = metricsHostName; - this.out = out; - } - - @Override - public String pushMetrics(String payload) { - out.println("Sending to " + metricsHostName + ": " + payload); - - return "OK"; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/UrlService.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/UrlService.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/UrlService.java deleted file mode 100644 index 7402438..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/net/UrlService.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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.net; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.HttpURLConnection; -import java.net.URL; - -public class UrlService { - - public static final int CONNECT_TIMEOUT = 20000; - public static final int READ_TIMEOUT = 20000; - private final String address; - private HttpURLConnection conn; - - private UrlService(String address) { - this.address = address; - } - - /** - * Returns a new UrlService connected to specified address. - * - * @param address - * @return - * @throws IOException - */ - public static UrlService newConnection(String address) throws IOException { - UrlService svc = new UrlService(address); - svc.connect(); - - return svc; - } - - public HttpURLConnection connect() throws IOException { - URL url = new URL(address); - conn = (HttpURLConnection) url.openConnection(); - - //TODO: make timeouts configurable - conn.setConnectTimeout(CONNECT_TIMEOUT); - conn.setReadTimeout(READ_TIMEOUT); - conn.setDoInput(true); - conn.setDoOutput(true); - conn.setRequestMethod("POST"); - conn.setRequestProperty("Content-Type", "application/json"); - conn.setRequestProperty("Accept", "*/*"); - - return conn; - } - - public String send(String payload) throws IOException { - if (conn == null) - throw new IllegalStateException("Cannot use unconnected UrlService"); - write(payload); - - return read(); - } - - private String read() throws IOException { - StringBuilder response = new StringBuilder(); - - BufferedReader br = new BufferedReader(new InputStreamReader( - conn.getInputStream())); - String line = null; - while ((line = br.readLine()) != null) { - response.append(line); - } - br.close(); - - return response.toString(); - } - - private void write(String payload) throws IOException { - OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), - "UTF-8"); - writer.write(payload); - writer.close(); - } - - public void disconnect() { - conn.disconnect(); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/Json.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/Json.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/Json.java deleted file mode 100644 index 61a3903..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/Json.java +++ /dev/null @@ -1,63 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util; - -import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonMethod; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; - -import java.io.IOException; - -/** - * Small wrapper that configures the ObjectMapper with some defaults. - */ -public class Json { - private ObjectMapper myObjectMapper; - - /** - * Creates default Json ObjectMapper that maps fields. - */ - public Json() { - this(false); - } - - /** - * Creates a Json ObjectMapper that maps fields and optionally pretty prints the - * serialized objects. - * - * @param pretty a flag - if true the output will be pretty printed. - */ - public Json(boolean pretty) { - myObjectMapper = new ObjectMapper(); - myObjectMapper.setVisibility(JsonMethod.FIELD, JsonAutoDetect.Visibility.ANY); - if (pretty) { - myObjectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); - } - } - - public String serialize(Object o) throws IOException { - return myObjectMapper.writeValueAsString(o); - } - - public <T> T deserialize(String content, Class<T> paramClass) throws IOException { - return myObjectMapper.readValue(content, paramClass); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/RandomMetricsProvider.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/RandomMetricsProvider.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/RandomMetricsProvider.java deleted file mode 100644 index 7910711..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/RandomMetricsProvider.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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util; - -import java.util.Random; - -/** - */ -public class RandomMetricsProvider { - - private double min; - private double max; - private Random rnd; - - public RandomMetricsProvider(double min, double max) { - this.min = min; - this.max = max; - this.rnd = new Random(); - } - - public double next() { - return rnd.nextDouble() * (max - min) + min; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/TimeStampProvider.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/TimeStampProvider.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/TimeStampProvider.java deleted file mode 100644 index ad7ec86..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/loadsimulator/util/TimeStampProvider.java +++ /dev/null @@ -1,52 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .loadsimulator.util; - -/** - */ -public class TimeStampProvider { - private int timeStep; - private long currentTime; - private int sendInterval; - - public TimeStampProvider(long startTime, int timeStep, int sendInterval) { - this.timeStep = timeStep; - this.currentTime = startTime - timeStep; - this.sendInterval = sendInterval; - } - - public long next() { - return currentTime += timeStep; - } - - public long[] timestampsForNextInterval() { - return timestampsForInterval(sendInterval); - } - - private long[] timestampsForInterval(int sendInterval) { - int steps = sendInterval / timeStep; - long[] timestamps = new long[steps]; - - for (int i = 0; i < timestamps.length; i++) { - timestamps[i] = next(); - } - - return timestamps; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java deleted file mode 100644 index a123e57..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java +++ /dev/null @@ -1,229 +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.hadoop.yarn.server.applicationhistoryservice.metrics.timeline; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; - -import java.io.File; -import java.io.IOException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Date; - -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.AGGREGATOR_CHECKPOINT_DELAY; -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.RESULTSET_FETCH_SIZE; - -public abstract class AbstractTimelineAggregator implements Runnable { - protected final PhoenixHBaseAccessor hBaseAccessor; - private final Log LOG; - protected final long checkpointDelayMillis; - protected final Integer resultsetFetchSize; - protected Configuration metricsConf; - - public AbstractTimelineAggregator(PhoenixHBaseAccessor hBaseAccessor, - Configuration metricsConf) { - this.hBaseAccessor = hBaseAccessor; - this.metricsConf = metricsConf; - this.checkpointDelayMillis = SECONDS.toMillis( - metricsConf.getInt(AGGREGATOR_CHECKPOINT_DELAY, 120)); - this.resultsetFetchSize = metricsConf.getInt(RESULTSET_FETCH_SIZE, 2000); - this.LOG = LogFactory.getLog(this.getClass()); - } - - @Override - public void run() { - LOG.info("Started Timeline aggregator thread @ " + new Date()); - Long SLEEP_INTERVAL = getSleepIntervalMillis(); - - while (true) { - long currentTime = System.currentTimeMillis(); - long lastCheckPointTime = -1; - - try { - lastCheckPointTime = readCheckPoint(); - if (isLastCheckPointTooOld(lastCheckPointTime)) { - LOG.warn("Last Checkpoint is too old, discarding last checkpoint. " + - "lastCheckPointTime = " + lastCheckPointTime); - lastCheckPointTime = -1; - } - if (lastCheckPointTime == -1) { - // Assuming first run, save checkpoint and sleep. - // Set checkpoint to 2 minutes in the past to allow the - // agents/collectors to catch up - saveCheckPoint(currentTime - checkpointDelayMillis); - } - } catch (IOException io) { - LOG.warn("Unable to write last checkpoint time. Resuming sleep.", io); - } - long sleepTime = SLEEP_INTERVAL; - - if (lastCheckPointTime != -1) { - LOG.info("Last check point time: " + lastCheckPointTime + ", lagBy: " - + ((System.currentTimeMillis() - lastCheckPointTime) / 1000) - + " seconds."); - - long startTime = System.currentTimeMillis(); - boolean success = doWork(lastCheckPointTime, - lastCheckPointTime + SLEEP_INTERVAL); - long executionTime = System.currentTimeMillis() - startTime; - long delta = SLEEP_INTERVAL - executionTime; - - if (delta > 0) { - // Sleep for (configured sleep - time to execute task) - sleepTime = delta; - } else { - // No sleep because last run took too long to execute - LOG.info("Aggregator execution took too long, " + - "cancelling sleep. executionTime = " + executionTime); - sleepTime = 1; - } - - LOG.debug("Aggregator sleep interval = " + sleepTime); - - if (success) { - try { - saveCheckPoint(lastCheckPointTime + SLEEP_INTERVAL); - } catch (IOException io) { - LOG.warn("Error saving checkpoint, restarting aggregation at " + - "previous checkpoint."); - } - } - } - - try { - Thread.sleep(sleepTime); - } catch (InterruptedException e) { - LOG.info("Sleep interrupted, continuing with aggregation."); - } - } - } - - private boolean isLastCheckPointTooOld(long checkpoint) { - return checkpoint != -1 && - ((System.currentTimeMillis() - checkpoint) > - getCheckpointCutOffIntervalMillis()); - } - - private long readCheckPoint() { - try { - File checkpoint = new File(getCheckpointLocation()); - if (checkpoint.exists()) { - String contents = FileUtils.readFileToString(checkpoint); - if (contents != null && !contents.isEmpty()) { - return Long.parseLong(contents); - } - } - } catch (IOException io) { - LOG.debug(io); - } - return -1; - } - - private void saveCheckPoint(long checkpointTime) throws IOException { - File checkpoint = new File(getCheckpointLocation()); - if (!checkpoint.exists()) { - boolean done = checkpoint.createNewFile(); - if (!done) { - throw new IOException("Could not create checkpoint at location, " + - getCheckpointLocation()); - } - } - FileUtils.writeStringToFile(checkpoint, String.valueOf(checkpointTime)); - } - - /** - * Read metrics written during the time interval and save the sum and total - * in the aggregate table. - * - * @param startTime Sample start time - * @param endTime Sample end time - */ - protected boolean doWork(long startTime, long endTime) { - LOG.info("Start aggregation cycle @ " + new Date() + ", " + - "startTime = " + new Date(startTime) + ", endTime = " + new Date(endTime)); - - boolean success = true; - PhoenixTransactSQL.Condition condition = - prepareMetricQueryCondition(startTime, endTime); - - Connection conn = null; - PreparedStatement stmt = null; - - try { - conn = hBaseAccessor.getConnection(); - stmt = PhoenixTransactSQL.prepareGetMetricsSqlStmt(conn, condition); - - LOG.debug("Query issued @: " + new Date()); - ResultSet rs = stmt.executeQuery(); - LOG.debug("Query returned @: " + new Date()); - - aggregate(rs, startTime, endTime); - LOG.info("End aggregation cycle @ " + new Date()); - - } catch (SQLException e) { - LOG.error("Exception during aggregating metrics.", e); - success = false; - } catch (IOException e) { - LOG.error("Exception during aggregating metrics.", e); - success = false; - } finally { - if (stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - // Ignore - } - } - if (conn != null) { - try { - conn.close(); - } catch (SQLException sql) { - // Ignore - } - } - } - - LOG.info("End aggregation cycle @ " + new Date()); - return success; - } - - protected abstract PhoenixTransactSQL.Condition - prepareMetricQueryCondition(long startTime, long endTime); - - protected abstract void aggregate(ResultSet rs, long startTime, long endTime) - throws IOException, SQLException; - - protected abstract Long getSleepIntervalMillis(); - - protected abstract Integer getCheckpointCutOffMultiplier(); - - protected Long getCheckpointCutOffIntervalMillis() { - return getCheckpointCutOffMultiplier() * getSleepIntervalMillis(); - } - - protected abstract boolean isDisabled(); - - protected abstract String getCheckpointLocation(); - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/Aggregator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/Aggregator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/Aggregator.java deleted file mode 100644 index f514298..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/Aggregator.java +++ /dev/null @@ -1,60 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline; - - -import java.util.Map; - -/** - * - */ -public class Aggregator { - - public double[] calculateAggregates(Map<Long, Double> metricValues) { - double[] values = new double[4]; - double max = Double.MIN_VALUE; - double min = Double.MAX_VALUE; - double sum = 0.0; - int metricCount = 0; - - if (metricValues != null && !metricValues.isEmpty()) { - for (Double value : metricValues.values()) { - // TODO: Some nulls in data - need to investigate null values from host - if (value != null) { - if (value > max) { - max = value; - } - if (value < min) { - min = value; - } - sum += value; - } - } - metricCount = metricValues.values().size(); - } - // BR: WHY ZERO is a good idea? - values[0] = sum; - values[1] = max != Double.MIN_VALUE ? max : 0.0; - values[2] = min != Double.MAX_VALUE ? min : 0.0; - values[3] = metricCount; - - return values; - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/ConnectionProvider.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/ConnectionProvider.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/ConnectionProvider.java deleted file mode 100644 index 47435f4..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/ConnectionProvider.java +++ /dev/null @@ -1,30 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline; - - -import java.sql.Connection; -import java.sql.SQLException; - -/** - * - */ -public interface ConnectionProvider { - public Connection getConnection() throws SQLException; -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/DefaultPhoenixDataSource.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/DefaultPhoenixDataSource.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/DefaultPhoenixDataSource.java deleted file mode 100644 index 652c492..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/DefaultPhoenixDataSource.java +++ /dev/null @@ -1,78 +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.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline; - - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -public class DefaultPhoenixDataSource implements ConnectionProvider { - - static final Log LOG = LogFactory.getLog(DefaultPhoenixDataSource.class); - private static final String ZOOKEEPER_CLIENT_PORT = - "hbase.zookeeper.property.clientPort"; - private static final String ZOOKEEPER_QUORUM = "hbase.zookeeper.quorum"; - private static final String ZNODE_PARENT = "zookeeper.znode.parent"; - - private static final String connectionUrl = "jdbc:phoenix:%s:%s:%s"; - private final String url; - - public DefaultPhoenixDataSource(Configuration hbaseConf) { - String zookeeperClientPort = hbaseConf.getTrimmed(ZOOKEEPER_CLIENT_PORT, - "2181"); - String zookeeperQuorum = hbaseConf.getTrimmed(ZOOKEEPER_QUORUM); - String znodeParent = hbaseConf.getTrimmed(ZNODE_PARENT, "/hbase"); - if (zookeeperQuorum == null || zookeeperQuorum.isEmpty()) { - throw new IllegalStateException("Unable to find Zookeeper quorum to " + - "access HBase store using Phoenix."); - } - - url = String.format(connectionUrl, - zookeeperQuorum, - zookeeperClientPort, - znodeParent); - } - - /** - * Get JDBC connection to HBase store. Assumption is that the hbase - * configuration is present on the classpath and loaded by the caller into - * the Configuration object. - * Phoenix already caches the HConnection between the client and HBase - * cluster. - * - * @return @java.sql.Connection - */ - public Connection getConnection() throws SQLException { - - LOG.debug("Metric store connection url: " + url); - try { - return DriverManager.getConnection(url); - } catch (SQLException e) { - LOG.warn("Unable to connect to HBase store using Phoenix.", e); - - throw e; - } - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java deleted file mode 100644 index 9364187..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java +++ /dev/null @@ -1,192 +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.hadoop.yarn.server.applicationhistoryservice.metrics.timeline; - - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric; -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics; -import org.apache.hadoop.service.AbstractService; -import org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse; - -import java.io.IOException; -import java.net.URL; -import java.sql.SQLException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline.PhoenixTransactSQL.Condition; -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline.TimelineMetricConfiguration.HBASE_SITE_CONFIGURATION_FILE; -import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics - .timeline.TimelineMetricConfiguration.METRICS_SITE_CONFIGURATION_FILE; - -public class HBaseTimelineMetricStore extends AbstractService - implements TimelineMetricStore { - - static final Log LOG = LogFactory.getLog(HBaseTimelineMetricStore.class); - private PhoenixHBaseAccessor hBaseAccessor; - - /** - * Construct the service. - * - */ - public HBaseTimelineMetricStore() { - super(HBaseTimelineMetricStore.class.getName()); - } - - @Override - protected void serviceInit(Configuration conf) throws Exception { - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - if (classLoader == null) { - classLoader = getClass().getClassLoader(); - } - URL hbaseResUrl = classLoader.getResource(HBASE_SITE_CONFIGURATION_FILE); - URL amsResUrl = classLoader.getResource(METRICS_SITE_CONFIGURATION_FILE); - LOG.info("Found hbase site configuration: " + hbaseResUrl); - LOG.info("Found metric service configuration: " + amsResUrl); - - if (hbaseResUrl == null) { - throw new IllegalStateException("Unable to initialize the metrics " + - "subsystem. No hbase-site present in the classpath."); - } - - if (amsResUrl == null) { - throw new IllegalStateException("Unable to initialize the metrics " + - "subsystem. No ams-site present in the classpath."); - } - - Configuration hbaseConf = new Configuration(true); - hbaseConf.addResource(hbaseResUrl.toURI().toURL()); - Configuration metricsConf = new Configuration(true); - metricsConf.addResource(amsResUrl.toURI().toURL()); - - initializeSubsystem(hbaseConf, metricsConf); - } - - private void initializeSubsystem(Configuration hbaseConf, - Configuration metricsConf) { - hBaseAccessor = new PhoenixHBaseAccessor(hbaseConf, metricsConf); - hBaseAccessor.initMetricSchema(); - - // Start the cluster aggregator - TimelineMetricClusterAggregator minuteClusterAggregator = - new TimelineMetricClusterAggregator(hBaseAccessor, metricsConf); - if (!minuteClusterAggregator.isDisabled()) { - Thread aggregatorThread = new Thread(minuteClusterAggregator); - aggregatorThread.start(); - } - - // Start the cluster aggregator hourly - TimelineMetricClusterAggregatorHourly hourlyClusterAggregator = - new TimelineMetricClusterAggregatorHourly(hBaseAccessor, metricsConf); - if (!hourlyClusterAggregator.isDisabled()) { - Thread aggregatorThread = new Thread(hourlyClusterAggregator); - aggregatorThread.start(); - } - - // Start the 5 minute aggregator - TimelineMetricAggregator minuteHostAggregator = - TimelineMetricAggregatorFactory.createTimelineMetricAggregatorMinute - (hBaseAccessor, metricsConf); - if (!minuteHostAggregator.isDisabled()) { - Thread minuteAggregatorThread = new Thread(minuteHostAggregator); - minuteAggregatorThread.start(); - } - - // Start hourly host aggregator - TimelineMetricAggregator hourlyHostAggregator = - TimelineMetricAggregatorFactory.createTimelineMetricAggregatorHourly - (hBaseAccessor, metricsConf); - if (!hourlyHostAggregator.isDisabled()) { - Thread aggregatorHourlyThread = new Thread(hourlyHostAggregator); - aggregatorHourlyThread.start(); - } - } - - @Override - protected void serviceStop() throws Exception { - super.serviceStop(); - } - - //TODO: update to work with HOSTS_COUNT and METRIC_COUNT - @Override - public TimelineMetrics getTimelineMetrics(List<String> metricNames, - String hostname, String applicationId, String instanceId, - Long startTime, Long endTime, Integer limit, - boolean groupedByHosts) throws SQLException, IOException { - - Condition condition = new Condition(metricNames, hostname, applicationId, - instanceId, startTime, endTime, limit, groupedByHosts); - - if (hostname == null) { - return hBaseAccessor.getAggregateMetricRecords(condition); - } - - return hBaseAccessor.getMetricRecords(condition); - } - - @Override - public TimelineMetric getTimelineMetric(String metricName, String hostname, - String applicationId, String instanceId, Long startTime, - Long endTime, Integer limit) - throws SQLException, IOException { - - TimelineMetrics metrics = hBaseAccessor.getMetricRecords( - new Condition(Collections.singletonList(metricName), hostname, - applicationId, instanceId, startTime, endTime, limit, true) - ); - - TimelineMetric metric = new TimelineMetric(); - List<TimelineMetric> metricList = metrics.getMetrics(); - - if (metricList != null && !metricList.isEmpty()) { - metric.setMetricName(metricList.get(0).getMetricName()); - metric.setAppId(metricList.get(0).getAppId()); - metric.setInstanceId(metricList.get(0).getInstanceId()); - metric.setHostName(metricList.get(0).getHostName()); - // Assumption that metrics are ordered by start time - metric.setStartTime(metricList.get(0).getStartTime()); - Map<Long, Double> metricRecords = new HashMap<Long, Double>(); - for (TimelineMetric timelineMetric : metricList) { - metricRecords.putAll(timelineMetric.getMetricValues()); - } - metric.setMetricValues(metricRecords); - } - - return metric; - } - - - @Override - public TimelinePutResponse putMetrics(TimelineMetrics metrics) - throws SQLException, IOException { - - // Error indicated by the Sql exception - TimelinePutResponse response = new TimelinePutResponse(); - - hBaseAccessor.insertMetricRecords(metrics); - - return response; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricAggregate.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricAggregate.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricAggregate.java deleted file mode 100644 index 61e15d7..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricAggregate.java +++ /dev/null @@ -1,110 +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.hadoop.yarn.server.applicationhistoryservice.metrics.timeline; - - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonSubTypes; -import org.codehaus.jackson.map.ObjectMapper; - -import java.io.IOException; - -/** -* -*/ -@JsonSubTypes({@JsonSubTypes.Type(value = MetricClusterAggregate.class), - @JsonSubTypes.Type(value = MetricHostAggregate.class)}) -@InterfaceAudience.Public -@InterfaceStability.Unstable -public class MetricAggregate { - private static final ObjectMapper mapper = new ObjectMapper(); - - protected Double sum = 0.0; - protected Double deviation; - protected Double max = Double.MIN_VALUE; - protected Double min = Double.MAX_VALUE; - - public MetricAggregate() { - } - - MetricAggregate(Double sum, Double deviation, Double max, - Double min) { - this.sum = sum; - this.deviation = deviation; - this.max = max; - this.min = min; - } - - void updateSum(Double sum) { - this.sum += sum; - } - - void updateMax(Double max) { - if (max > this.max) { - this.max = max; - } - } - - void updateMin(Double min) { - if (min < this.min) { - this.min = min; - } - } - - @JsonProperty("sum") - Double getSum() { - return sum; - } - - @JsonProperty("deviation") - Double getDeviation() { - return deviation; - } - - @JsonProperty("max") - Double getMax() { - return max; - } - - @JsonProperty("min") - Double getMin() { - return min; - } - - public void setSum(Double sum) { - this.sum = sum; - } - - public void setDeviation(Double deviation) { - this.deviation = deviation; - } - - public void setMax(Double max) { - this.max = max; - } - - public void setMin(Double min) { - this.min = min; - } - - public String toJSON() throws IOException { - return mapper.writeValueAsString(this); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/ba3d6926/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricClusterAggregate.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricClusterAggregate.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricClusterAggregate.java deleted file mode 100644 index c13c85f..0000000 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/MetricClusterAggregate.java +++ /dev/null @@ -1,74 +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.hadoop.yarn.server.applicationhistoryservice.metrics.timeline; - - -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; - -/** -* -*/ -public class MetricClusterAggregate extends MetricAggregate { - private int numberOfHosts; - - @JsonCreator - public MetricClusterAggregate() { - } - - MetricClusterAggregate(Double sum, int numberOfHosts, Double deviation, - Double max, Double min) { - super(sum, deviation, max, min); - this.numberOfHosts = numberOfHosts; - } - - @JsonProperty("numberOfHosts") - int getNumberOfHosts() { - return numberOfHosts; - } - - void updateNumberOfHosts(int count) { - this.numberOfHosts += count; - } - - public void setNumberOfHosts(int numberOfHosts) { - this.numberOfHosts = numberOfHosts; - } - - /** - * Find and update min, max and avg for a minute - */ - void updateAggregates(MetricClusterAggregate hostAggregate) { - updateMax(hostAggregate.getMax()); - updateMin(hostAggregate.getMin()); - updateSum(hostAggregate.getSum()); - updateNumberOfHosts(hostAggregate.getNumberOfHosts()); - } - - @Override - public String toString() { -// MetricClusterAggregate - return "MetricAggregate{" + - "sum=" + sum + - ", numberOfHosts=" + numberOfHosts + - ", deviation=" + deviation + - ", max=" + max + - ", min=" + min + - '}'; - } -}