| /** |
| * 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.storm.scheduler; |
| |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Map; |
| import java.util.Set; |
| import org.apache.storm.scheduler.resource.normalization.NormalizedResourceOffer; |
| import org.apache.storm.scheduler.resource.normalization.ResourceMetrics; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| public class SupervisorDetails { |
| private static final Logger LOG = LoggerFactory.getLogger(SupervisorDetails.class); |
| |
| private final String id; |
| /** |
| * thrift server of this supervisor. |
| */ |
| private final Integer serverPort; |
| /** |
| * hostname of this supervisor. |
| */ |
| private final String host; |
| private final Object meta; |
| /** |
| * meta data configured for this supervisor. |
| */ |
| private final Object schedulerMeta; |
| /** |
| * Map containing a manifest of resources for the node the supervisor resides. |
| */ |
| private final NormalizedResourceOffer totalResources; |
| /** |
| * all the ports of the supervisor. |
| */ |
| private Set<Integer> allPorts; |
| |
| /** |
| * Create the details of a new supervisor. |
| * @param id the ID as reported by the supervisor. |
| * @param serverPort the thrift server for the supervisor. |
| * @param host the host the supervisor is on. |
| * @param meta meta data reported by the supervisor (should be a collection of the ports on the supervisor). |
| * @param schedulerMeta Not used and can probably be removed. |
| * @param allPorts all of the ports for the supervisor (a better version of meta) |
| * @param totalResources all of the resources for this supervisor. |
| */ |
| public SupervisorDetails(String id, Integer serverPort, String host, Object meta, Object schedulerMeta, |
| Collection<? extends Number> allPorts, Map<String, Double> totalResources) { |
| |
| this.id = id; |
| this.serverPort = serverPort; |
| this.host = host; |
| this.meta = meta; |
| this.schedulerMeta = schedulerMeta; |
| if (allPorts != null) { |
| setAllPorts(allPorts); |
| } else { |
| this.allPorts = new HashSet<>(); |
| } |
| this.totalResources = new NormalizedResourceOffer(totalResources); |
| LOG.debug("Creating a new supervisor ({}-{}) with resources: {}", this.host, this.id, totalResources); |
| } |
| |
| public SupervisorDetails(String id, Object meta) { |
| this(id, null, null, meta, null, null, null); |
| } |
| |
| public SupervisorDetails(String id, Object meta, Map<String, Double> totalResources) { |
| this(id, null, null, meta, null, null, totalResources); |
| } |
| |
| public SupervisorDetails(String id, Object meta, Collection<? extends Number> allPorts) { |
| this(id, null, null, meta, null, allPorts, null); |
| } |
| |
| public SupervisorDetails(String id, String host, Object schedulerMeta, Collection<? extends Number> allPorts) { |
| this(id, null, host, null, schedulerMeta, allPorts, null); |
| } |
| |
| public SupervisorDetails(String id, String host, Object schedulerMeta, |
| Collection<? extends Number> allPorts, Map<String, Double> totalResources) { |
| this(id, null, host, null, schedulerMeta, allPorts, totalResources); |
| } |
| |
| public SupervisorDetails(String id, int serverPort, String host, Object schedulerMeta, |
| Collection<? extends Number> allPorts, Map<String, Double> totalResources) { |
| this(id, serverPort, host, null, schedulerMeta, allPorts, totalResources); |
| } |
| |
| @Override |
| public String toString() { |
| return getClass().getSimpleName() + " ID: " + id + " HOST: " + host + " META: " + meta |
| + " SCHED_META: " + schedulerMeta + " PORTS: " + allPorts; |
| } |
| |
| public String getId() { |
| return id; |
| } |
| |
| public int getServerPort() { |
| return serverPort; |
| } |
| |
| public String getHost() { |
| return host; |
| } |
| |
| public Object getMeta() { |
| return meta; |
| } |
| |
| public Set<Integer> getAllPorts() { |
| return allPorts; |
| } |
| |
| private void setAllPorts(Collection<? extends Number> allPorts) { |
| this.allPorts = new HashSet<>(); |
| if (allPorts != null) { |
| for (Number n : allPorts) { |
| this.allPorts.add(n.intValue()); |
| } |
| } |
| } |
| |
| public Object getSchedulerMeta() { |
| return this.schedulerMeta; |
| } |
| |
| /** |
| * Get the total Memory on this supervisor in MB. |
| */ |
| public double getTotalMemory() { |
| return totalResources.getTotalMemoryMb(); |
| } |
| |
| /** |
| * Get the total CPU on this supervisor in % CPU. |
| */ |
| public double getTotalCpu() { |
| return totalResources.getTotalCpu(); |
| } |
| |
| /** |
| * Get all resources for this Supervisor. |
| */ |
| public NormalizedResourceOffer getTotalResources() { |
| return totalResources; |
| } |
| } |