View Javadoc

1   /*******************************************************************************
2    * Copyright (c) 2007, 2014 Massimiliano Ziccardi
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *******************************************************************************/
16  package it.jnrpe;
17  
18  import java.math.BigDecimal;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  /**
23   * This class is just a container for the plugin result.
24   * 
25   * @author Massimiliano Ziccardi
26   */
27  public final class ReturnValue {
28  	/**
29  	 * An enumeration defining all supported unit of measures.
30  	 * 
31  	 * @author Massimiliano Ziccardi
32  	 */
33  	public enum UnitOfMeasure {
34  		/**
35  		 * microseconds.
36  		 */
37  		microseconds,
38  		/**
39  		 * milliseconds.
40  		 */
41  		milliseconds,
42  		/**
43  		 * seconds.
44  		 */
45  		seconds,
46  		/**
47  		 * percentage.
48  		 */
49  		percentage,
50  		/**
51  		 * bytes.
52  		 */
53  		bytes,
54  		/**
55  		 * kilobytes.
56  		 */
57  		kilobytes,
58  		/**
59  		 * megabytes.
60  		 */
61  		megabytes,
62  		/**
63  		 * gigabytes.
64  		 */
65  		gigabytes,
66  		/**
67  		 * terabytes.
68  		 */
69  		terabytes,
70  		/**
71  		 * counter.
72  		 */
73  		counter
74  	};
75  
76  	/**
77  	 * The performance data to attach to the result string.
78  	 */
79  	private final List<PerformanceData> performanceDataList = new ArrayList<PerformanceData>();
80  
81  	/**
82  	 * The raw return code.
83  	 */
84  	private Status statusCode;
85  
86  	/**
87  	 * The message.
88  	 */
89  	private String messageString;
90  
91  	/**
92  	 * Initializes an empty return value.
93  	 */
94  	public ReturnValue() {
95  
96  	}
97  
98  	/**
99  	 * Initializes the return value object with the given message and with the
100 	 * {@link Status.OK} state.
101 	 * 
102 	 * @param message
103 	 *            The message
104 	 */
105 	public ReturnValue(final String message) {
106 		statusCode = Status.OK;
107 		messageString = message;
108 	}
109 
110 	/**
111 	 * Initializes the return value object with the given state and the given
112 	 * message.
113 	 * 
114 	 * @param returnCode
115 	 *            The state
116 	 * @param message
117 	 *            The message
118 	 * @deprecated Use {@link #ReturnValue(Status, String)} instead
119 	 */
120 	@Deprecated
121 	public ReturnValue(final int returnCode, final String message) {
122 		statusCode = Status.fromIntValue(returnCode);
123 		messageString = message;
124 	}
125 
126 	/**
127 	 * Initializes the return value object with the given state and the given
128 	 * message.
129 	 * 
130 	 * @param status
131 	 *            The status to be returned
132 	 * @param message
133 	 *            The message to be returned
134 	 */
135 	public ReturnValue(final Status status, final String message) {
136 		statusCode = status;
137 		messageString = message;
138 	}
139 
140 	/**
141 	 * Sets the return code and returns 'this' so that the calls can be
142 	 * cascaded.
143 	 * 
144 	 * @param returnCode
145 	 *            The return code
146 	 * @return this
147 	 * @deprecated Use {@link #withStatus(Status)} instead.
148 	 */
149 	@Deprecated
150 	public ReturnValue withReturnCode(final int returnCode) {
151 		statusCode = Status.fromIntValue(returnCode);
152 		return this;
153 	}
154 
155 	/**
156 	 * Sets the return code and returns 'this' so that the calls can be
157 	 * cascaded.
158 	 * 
159 	 * @param status
160 	 *            The status to be returned to Nagios
161 	 * @return this
162 	 */
163 	public ReturnValue withStatus(final Status status) {
164 		if (status == null) {
165 			throw new IllegalArgumentException("Status cannot be null");
166 		}
167 
168 		statusCode = status;
169 		return this;
170 	}
171 
172 	/**
173 	 * Sets the message and returns 'this' so that the calls can be cascaded.
174 	 * 
175 	 * @param message
176 	 *            The message to be returned
177 	 * @return this
178 	 */
179 	public ReturnValue withMessage(final String message) {
180 		messageString = message;
181 		return this;
182 	}
183 
184 	/**
185 	 * Returns the status.
186 	 * 
187 	 * @return The state
188 	 * @deprecated Use {@link #getStatus()} instead.
189 	 */
190 	@Deprecated
191 	public int getReturnCode() {
192 		return statusCode.intValue();
193 	}
194 
195 	/**
196 	 * Returns the status.
197 	 * 
198 	 * @return The status
199 	 */
200 	public Status getStatus() {
201 		return statusCode;
202 	}
203 
204 	/**
205 	 * Returns the message. If the performance data has been passed in, they are
206 	 * attached at the end of the message accordingly to the Nagios
207 	 * specifications
208 	 * 
209 	 * @return The message and optionally the performance data
210 	 */
211 	public String getMessage() {
212 		if (performanceDataList.isEmpty()) {
213 			return messageString;
214 		}
215 		StringBuffer res = new StringBuffer(messageString).append("|");
216 		for (PerformanceData pd : performanceDataList) {
217 			res.append(pd.toPerformanceString()).append(' ');
218 		}
219 		return res.toString();
220 	}
221 
222 	/**
223 	 * Adds performance data to the plugin result. Thos data will be added to
224 	 * the output formatted as specified in Nagios specifications
225 	 * (http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN201)
226 	 * 
227 	 * @param label
228 	 *            The label of the performance data we are adding
229 	 * @param value
230 	 *            The performance data value
231 	 * @param uom
232 	 *            The Unit Of Measure
233 	 * @param warningRange
234 	 *            The warning threshold used to check this metric (can be null)
235 	 * @param criticalRange
236 	 *            The critical threshold used to check this value (can be null)
237 	 * @param minimumValue
238 	 *            The minimum value for this metric (can be null if not
239 	 *            applicable)
240 	 * @param maximumValue
241 	 *            The maximum value for this metric (can be null if not
242 	 *            applicable)
243 	 * @return this
244 	 */
245 	public ReturnValue withPerformanceData(final String label,
246 			final Long value, final UnitOfMeasure uom,
247 			final String warningRange, final String criticalRange,
248 			final Long minimumValue, final Long maximumValue) {
249 		BigDecimal bdValue = null;
250 		BigDecimal bdMin = null;
251 		BigDecimal bdMax = null;
252 
253 		if (value != null) {
254 			bdValue = new BigDecimal(value);
255 		}
256 		if (minimumValue != null) {
257 			bdMin = new BigDecimal(minimumValue);
258 		}
259 		if (maximumValue != null) {
260 			bdMax = new BigDecimal(maximumValue);
261 		}
262 
263 		performanceDataList.add(new PerformanceData(label, bdValue, uom,
264 				warningRange, criticalRange, bdMin, bdMax));
265 		return this;
266 	}
267 
268 	/**
269 	 * Adds performance data to the plugin result. Thos data will be added to
270 	 * the output formatted as specified in Nagios specifications
271 	 * (http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN201)
272 	 * 
273 	 * @param label
274 	 *            The label of the performance data we are adding
275 	 * @param value
276 	 *            The performance data value
277 	 * @param uom
278 	 *            The Unit Of Measure
279 	 * @param warningRange
280 	 *            The warning threshold used to check this metric (can be null)
281 	 * @param criticalRange
282 	 *            The critical threshold used to check this value (can be null)
283 	 * @param minimumValue
284 	 *            The minimum value for this metric (can be null if not
285 	 *            applicable)
286 	 * @param maximumValue
287 	 *            The maximum value for this metric (can be null if not
288 	 *            applicable)
289 	 * @return this
290 	 */
291 	public ReturnValue withPerformanceData(final String label,
292 			final BigDecimal value, final UnitOfMeasure uom,
293 			final String warningRange, final String criticalRange,
294 			final BigDecimal minimumValue, final BigDecimal maximumValue) {
295 		performanceDataList.add(new PerformanceData(label, value, uom,
296 				warningRange, criticalRange, minimumValue, maximumValue));
297 		return this;
298 	}
299 
300 	/**
301 	 * Adds performance data to the plugin result. Thos data will be added to
302 	 * the output formatted as specified in Nagios specifications
303 	 * (http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN201)
304 	 * 
305 	 * @param label
306 	 *            The label of the performance data we are adding
307 	 * @param value
308 	 *            The performance data value
309 	 * @param unit
310 	 *            The Unit Of Measure
311 	 * @param warningRange
312 	 *            The warning threshold used to check this metric (can be null)
313 	 * @param criticalRange
314 	 *            The critical threshold used to check this value (can be null)
315 	 * @param minimumValue
316 	 *            The minimum value for this metric (can be null if not
317 	 *            applicable)
318 	 * @param maximumValue
319 	 *            The maximum value for this metric (can be null if not
320 	 *            applicable)
321 	 * @return this
322 	 */
323 	public ReturnValue withPerformanceData(final String label,
324 			final BigDecimal value, final String unit,
325 			final String warningRange, final String criticalRange,
326 			final BigDecimal minimumValue, final BigDecimal maximumValue) {
327 
328 		performanceDataList.add(new PerformanceData(label, value, unit,
329 				warningRange, criticalRange, minimumValue, maximumValue));
330 		return this;
331 	}
332 }