001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.yarn.api.records;
020    
021    import java.util.Set;
022    
023    import org.apache.hadoop.classification.InterfaceAudience.Private;
024    import org.apache.hadoop.classification.InterfaceAudience.Public;
025    import org.apache.hadoop.classification.InterfaceStability.Stable;
026    import org.apache.hadoop.classification.InterfaceStability.Unstable;
027    import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
028    import org.apache.hadoop.yarn.util.Records;
029    
030    /**
031     * <p><code>NodeReport</code> is a summary of runtime information of a 
032     * node in the cluster.</p>
033     * 
034     * <p>It includes details such as:
035     *   <ul>
036     *     <li>{@link NodeId} of the node.</li>
037     *     <li>HTTP Tracking URL of the node.</li>
038     *     <li>Rack name for the node.</li>
039     *     <li>Used {@link Resource} on the node.</li>
040     *     <li>Total available {@link Resource} of the node.</li>
041     *     <li>Number of running containers on the node.</li>
042     *   </ul>
043     * </p>
044     *
045     * @see ApplicationClientProtocol#getClusterNodes(org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest)
046     */
047    @Public
048    @Stable
049    public abstract class NodeReport {
050      
051      @Private
052      @Unstable
053      public static NodeReport newInstance(NodeId nodeId, NodeState nodeState,
054          String httpAddress, String rackName, Resource used, Resource capability,
055          int numContainers, String healthReport, long lastHealthReportTime) {
056        return newInstance(nodeId, nodeState, httpAddress, rackName, used,
057            capability, numContainers, healthReport, lastHealthReportTime, null);
058      }
059    
060      @Private
061      @Unstable
062      public static NodeReport newInstance(NodeId nodeId, NodeState nodeState,
063          String httpAddress, String rackName, Resource used, Resource capability,
064          int numContainers, String healthReport, long lastHealthReportTime,
065          Set<String> nodeLabels) {
066        NodeReport nodeReport = Records.newRecord(NodeReport.class);
067        nodeReport.setNodeId(nodeId);
068        nodeReport.setNodeState(nodeState);
069        nodeReport.setHttpAddress(httpAddress);
070        nodeReport.setRackName(rackName);
071        nodeReport.setUsed(used);
072        nodeReport.setCapability(capability);
073        nodeReport.setNumContainers(numContainers);
074        nodeReport.setHealthReport(healthReport);
075        nodeReport.setLastHealthReportTime(lastHealthReportTime);
076        nodeReport.setNodeLabels(nodeLabels);
077        return nodeReport;
078      }
079    
080      /**
081       * Get the <code>NodeId</code> of the node.
082       * @return <code>NodeId</code> of the node
083       */
084      @Public
085      @Stable
086      public abstract NodeId getNodeId();
087      
088      @Private
089      @Unstable
090      public abstract void setNodeId(NodeId nodeId);
091      
092      /**
093       * Get the <code>NodeState</code> of the node.
094       * @return <code>NodeState</code> of the node
095       */
096      @Public
097      @Stable
098      public abstract NodeState getNodeState();
099      
100      @Private
101      @Unstable
102      public abstract void setNodeState(NodeState nodeState);
103      
104      /**
105       * Get the <em>http address</em> of the node.
106       * @return <em>http address</em> of the node
107       */
108      @Public
109      @Stable
110      public abstract String getHttpAddress();
111      
112      @Private
113      @Unstable
114      public abstract void setHttpAddress(String httpAddress);
115      
116      /**
117       * Get the <em>rack name</em> for the node.
118       * @return <em>rack name</em> for the node
119       */
120      @Public
121      @Stable
122      public abstract String getRackName();
123      
124      @Private
125      @Unstable
126      public abstract void setRackName(String rackName);
127      
128      /**
129       * Get <em>used</em> <code>Resource</code> on the node.
130       * @return <em>used</em> <code>Resource</code> on the node
131       */
132      @Public
133      @Stable
134      public abstract Resource getUsed();
135      
136      @Private
137      @Unstable
138      public abstract void setUsed(Resource used);
139      
140      /**
141       * Get the <em>total</em> <code>Resource</code> on the node.
142       * @return <em>total</em> <code>Resource</code> on the node
143       */
144      @Public
145      @Stable
146      public abstract Resource getCapability();
147      
148      @Private
149      @Unstable
150      public abstract void setCapability(Resource capability);
151      
152      /**
153       * Get the <em>number of allocated containers</em> on the node.
154       * @return <em>number of allocated containers</em> on the node
155       */
156      @Private
157      @Unstable
158      public abstract int getNumContainers();
159      
160      @Private
161      @Unstable
162      public abstract void setNumContainers(int numContainers);
163      
164    
165      /** 
166       * Get the <em>diagnostic health report</em> of the node.
167       * @return <em>diagnostic health report</em> of the node
168       */
169      @Public
170      @Stable
171      public abstract String getHealthReport();
172    
173      @Private
174      @Unstable
175      public abstract void setHealthReport(String healthReport);
176    
177      /**
178       * Get the <em>last timestamp</em> at which the health report was received.
179       * @return <em>last timestamp</em> at which the health report was received
180       */
181      @Public
182      @Stable
183      public abstract long getLastHealthReportTime();
184    
185      @Private
186      @Unstable
187      public abstract void setLastHealthReportTime(long lastHealthReport);
188      
189      /**
190       * Get labels of this node
191       * @return labels of this node
192       */
193      @Public
194      @Stable
195      public abstract Set<String> getNodeLabels();
196      
197      @Private
198      @Unstable
199      public abstract void setNodeLabels(Set<String> nodeLabels);
200    }