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.timeline;
020
021 import java.util.HashMap;
022 import java.util.Map;
023
024 import javax.xml.bind.annotation.XmlAccessType;
025 import javax.xml.bind.annotation.XmlAccessorType;
026 import javax.xml.bind.annotation.XmlElement;
027 import javax.xml.bind.annotation.XmlRootElement;
028
029 import org.apache.hadoop.classification.InterfaceAudience.Private;
030 import org.apache.hadoop.classification.InterfaceAudience.Public;
031 import org.apache.hadoop.classification.InterfaceStability.Unstable;
032
033 /**
034 * The class that contains the information of an event that is related to some
035 * conceptual entity of an application. Users are free to define what the event
036 * means, such as starting an application, getting allocated a container and
037 * etc.
038 */
039 @XmlRootElement(name = "event")
040 @XmlAccessorType(XmlAccessType.NONE)
041 @Public
042 @Unstable
043 public class TimelineEvent implements Comparable<TimelineEvent> {
044
045 private long timestamp;
046 private String eventType;
047 private HashMap<String, Object> eventInfo = new HashMap<String, Object>();
048
049 public TimelineEvent() {
050 }
051
052 /**
053 * Get the timestamp of the event
054 *
055 * @return the timestamp of the event
056 */
057 @XmlElement(name = "timestamp")
058 public long getTimestamp() {
059 return timestamp;
060 }
061
062 /**
063 * Set the timestamp of the event
064 *
065 * @param timestamp
066 * the timestamp of the event
067 */
068 public void setTimestamp(long timestamp) {
069 this.timestamp = timestamp;
070 }
071
072 /**
073 * Get the event type
074 *
075 * @return the event type
076 */
077 @XmlElement(name = "eventtype")
078 public String getEventType() {
079 return eventType;
080 }
081
082 /**
083 * Set the event type
084 *
085 * @param eventType
086 * the event type
087 */
088 public void setEventType(String eventType) {
089 this.eventType = eventType;
090 }
091
092 /**
093 * Set the information of the event
094 *
095 * @return the information of the event
096 */
097 public Map<String, Object> getEventInfo() {
098 return eventInfo;
099 }
100
101 // Required by JAXB
102 @Private
103 @XmlElement(name = "eventinfo")
104 public HashMap<String, Object> getEventInfoJAXB() {
105 return eventInfo;
106 }
107
108 /**
109 * Add one piece of the information of the event to the existing information
110 * map
111 *
112 * @param key
113 * the information key
114 * @param value
115 * the information value
116 */
117 public void addEventInfo(String key, Object value) {
118 this.eventInfo.put(key, value);
119 }
120
121 /**
122 * Add a map of the information of the event to the existing information map
123 *
124 * @param eventInfo
125 * a map of of the information of the event
126 */
127 public void addEventInfo(Map<String, Object> eventInfo) {
128 this.eventInfo.putAll(eventInfo);
129 }
130
131 /**
132 * Set the information map to the given map of the information of the event
133 *
134 * @param eventInfo
135 * a map of of the information of the event
136 */
137 public void setEventInfo(Map<String, Object> eventInfo) {
138 if (eventInfo != null && !(eventInfo instanceof HashMap)) {
139 this.eventInfo = new HashMap<String, Object>(eventInfo);
140 } else {
141 this.eventInfo = (HashMap<String, Object>) eventInfo;
142 }
143 }
144
145 @Override
146 public int compareTo(TimelineEvent other) {
147 if (timestamp > other.timestamp) {
148 return -1;
149 } else if (timestamp < other.timestamp) {
150 return 1;
151 } else {
152 return eventType.compareTo(other.eventType);
153 }
154 }
155
156 @Override
157 public boolean equals(Object o) {
158 if (this == o)
159 return true;
160 if (o == null || getClass() != o.getClass())
161 return false;
162
163 TimelineEvent event = (TimelineEvent) o;
164
165 if (timestamp != event.timestamp)
166 return false;
167 if (!eventType.equals(event.eventType))
168 return false;
169 if (eventInfo != null ? !eventInfo.equals(event.eventInfo) :
170 event.eventInfo != null)
171 return false;
172
173 return true;
174 }
175
176 @Override
177 public int hashCode() {
178 int result = (int) (timestamp ^ (timestamp >>> 32));
179 result = 31 * result + eventType.hashCode();
180 result = 31 * result + (eventInfo != null ? eventInfo.hashCode() : 0);
181 return result;
182 }
183 }