You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2013/10/16 08:34:36 UTC

svn commit: r1532648 - in /commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/format: CSVFormat.java HTMLFormat.java MapFormat.java

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));
                 }