boolean evaluateRule(PerformanceMetrics pm) {

		long now = Calendar.getInstance().getTimeInMillis();
		boolean isTrue = false;

		// if the metric is present
		if (pm.hasMetric(_metric)) {
			double current = pm.getValueForMetric(_metric);
			isTrue = compare(current, _comp, _value);
		}

		// set _trueSince if this became true right now
		if (!_wasTrue && isTrue) {
			_trueSince = now;
		}

		// update value for next time
		_wasTrue = isTrue;

		// if it's true, and we haven't evaluated it within the adjustment time,
		// go for it!
		if (isTrue && (now - _lastActionAt) > ClusterMonitorConstants.ADJUSTMENT_TIME) {
			if (now - _trueSince > _duration) {
				_lastActionAt = now;
				_wasTrue = false;
				_cluster.processAction(_action);
				return true;
			}
		}

		return false;

	}