Author: rmannibucau Date: Wed Oct 16 06:34:36 2013 New Revision: 1532648 URL: http://svn.apache.org/r1532648 Log: fixing number formatting, we don't want to format in csv but only in rendered html + allowing to configure it
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/CSVFormat.java commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/HTMLFormat.java commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/MapFormat.java Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/CSVFormat.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/CSVFormat.java?rev=1532648&r1=1532647&r2=1532648&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/CSVFormat.java (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/CSVFormat.java Wed Oct 16 06:34:36 2013 @@ -35,7 +35,7 @@ public class CSVFormat extends MapFormat new MapBuilder<String, Object>() .set("headers", HEADER) .set("separator", SEPARATOR) - .set("lines", snapshot(timeUnit)) + .set("lines", snapshot(timeUnit, format(params, null))) .build(), false); } Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/HTMLFormat.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/HTMLFormat.java?rev=1532648&r1=1532647&r2=1532648&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/HTMLFormat.java (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/HTMLFormat.java Wed Oct 16 06:34:36 2013 @@ -23,6 +23,8 @@ import org.apache.commons.monitoring.rep import java.util.Map; public class HTMLFormat extends MapFormat implements Format { + private static final String NUMBER_FORMAT = "###,###,###,##0.00"; // DecimalFormat is not thread safe so don't init it statically + @Override public Template render(final Map<String, ?> params) { final Unit timeUnit = timeUnit(params); @@ -30,7 +32,7 @@ public class HTMLFormat extends MapForma new MapBuilder<String, Object>() .set(Map.class.cast(params)) .set("headers", ATTRIBUTES_ORDERED_LIST) - .set("data", snapshot(timeUnit)) + .set("data", snapshot(timeUnit, format(params, NUMBER_FORMAT))) .build()); } Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/MapFormat.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/MapFormat.java?rev=1532648&r1=1532647&r2=1532648&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/MapFormat.java (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format/MapFormat.java Wed Oct 16 06:34:36 2013 @@ -21,6 +21,8 @@ import org.apache.commons.monitoring.cou import org.apache.commons.monitoring.counters.Unit; import org.apache.commons.monitoring.repositories.Repository; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collection; @@ -29,7 +31,6 @@ import java.util.concurrent.CopyOnWriteA public abstract class MapFormat { protected static final Collection<String> ATTRIBUTES_ORDERED_LIST = buildMetricDataHeader(); - private static final DecimalFormat NUMBER_FORMATTER = new DecimalFormat("###,###,###,##0.00"); protected static Collection<String> buildMetricDataHeader() { final Collection<String> list = new CopyOnWriteArrayList<String>(); @@ -41,6 +42,29 @@ public abstract class MapFormat { return list; } + protected static String format(final Map<String, ?> params, final String defaultValue) { + final Object format = params.get("format"); + if (format != null) { + if (String.class.isInstance(format)) { + final String strFormat = String.class.cast(format); + return decode(strFormat); + } + if (String[].class.isInstance(format)) { + final String[] array = String[].class.cast(format); + return decode(array[0]); + } + } + return defaultValue; + } + + private static String decode(String strFormat) { + try { + return URLDecoder.decode(strFormat, "UTF-8"); + } catch (final UnsupportedEncodingException e) { + return strFormat; + } + } + protected static Unit timeUnit(final Map<String, ?> params) { final Object u = params.get("unit"); if (u != null) { @@ -63,7 +87,7 @@ public abstract class MapFormat { return Unit.Time.MILLISECOND; } - protected static Collection<Collection<String>> snapshot(final Unit timeUnit) { + protected static Collection<Collection<String>> snapshot(final Unit timeUnit, final String format) { final Collection<Collection<String>> data = new ArrayList<Collection<String>>(); for (final Counter counter : Repository.INSTANCE) { final Unit counterUnit = counter.getKey().getRole().getUnit(); @@ -80,13 +104,20 @@ public abstract class MapFormat { line.add(counter.getKey().getRole().getName() + " (" + counterUnit.getName() + ")"); } + final DecimalFormat formatter; + if (format != null) { + formatter = new DecimalFormat(format); + } else { + formatter = null; + } + for (final MetricData md : MetricData.values()) { double value = md.value(counter); if (md.isTime() && compatible && timeUnit != counterUnit) { value = timeUnit.convert(value, counterUnit); } - if (!Double.isNaN(value) && !Double.isInfinite(value)) { - line.add(NUMBER_FORMATTER.format(value)); + if (formatter != null && !Double.isNaN(value) && !Double.isInfinite(value)) { + line.add(formatter.format(value)); } else { line.add(Double.toString(value)); }