package org.rhq.enterprise.server.measurement.util; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.measurement.ui.MetricDisplaySummary; public class MeasurementUtils { private static final Log LOG = LogFactory.getLog(MeasurementUtils.class); public static final int UNIT_COLLECTION_POINTS = 1; public static final int UNIT_MINUTES = 2; public static final int UNIT_HOURS = 3; public static final int UNIT_DAYS = 4; public static final int UNIT_WEEKS = 5; /** * Method calculateTimeFrame * <p/> * Returns a two element<code>List</code> of <code>Long</code> objects representing the begin and end times (in * milliseconds since the epoch) of the timeframe. Returns null instead if the time unit is indicated as * <code>UNIT_COLLECTION_POINTS</code>. * * @param lastN the number of time units in the time frame * @param unit the unit of time (as defined by <code>UNIT_*</code> constants * @return List */ public static List<Long> calculateTimeFrame(int lastN, int unit) { List<Long> l = new ArrayList<Long>(0); if (unit == UNIT_COLLECTION_POINTS) { return null; } long now = System.currentTimeMillis(); long retrospective = lastN; switch (unit) { case UNIT_WEEKS: retrospective *= NumberConstants.WEEKS; break; case UNIT_MINUTES: retrospective *= NumberConstants.MINUTES; break; case UNIT_HOURS: retrospective *= NumberConstants.HOURS; break; case UNIT_DAYS: retrospective *= NumberConstants.DAYS; break; default: retrospective = -1; break; } l.add(now - retrospective); l.add(now); return l; } /** * Parse the passed token that identifies single metric or group. * The format of the token is (without quotation marks): * <ul> * <li>For a compatible group: "cg,<i>groupId</i>,<i>definitionId</i>"</li> * <li>For an autogroup : "ag,<i>parentId</i>,<i>definitionId</i>,<i>childTypeId</i>"</li> * <li>For a single resource: "<i>resourceId</i>,<i>scheduleId</i>"</li> * </ul> * @param token A token that follows the form mentioned above. * @return a new {@link MetricDisplaySummary} where the identifiers for resource/group have been set. * @see #getContextKeyChart(MetricDisplaySummary) */ public static MetricDisplaySummary parseMetricToken(String token) { String DELIMITER = ","; if (LOG.isTraceEnabled()) { LOG.trace("parseMetricToken: input is " + token); } MetricDisplaySummary ret = new MetricDisplaySummary(); String[] tokens = token.split(DELIMITER); if (tokens == null || tokens.length < 2) { throw new IllegalArgumentException(token + " is not valid"); } if (tokens[0].equals("cg")) { ret.setGroupId(Integer.parseInt(tokens[1])); ret.setDefinitionId(Integer.parseInt(tokens[2])); } else if (tokens[0].equals("ag")) { ret.setParentId(Integer.parseInt(tokens[1])); ret.setDefinitionId(Integer.parseInt(tokens[2])); ret.setChildTypeId(Integer.parseInt(tokens[3])); } else { ret.setResourceId(Integer.parseInt(tokens[0])); ret.setScheduleId(Integer.parseInt(tokens[1])); } ret.setMetricToken(token); return ret; } }