examples: annotate examples
[nit.git] / src / web / api_metrics.nit
index 8c01c0d..21f84b4 100644 (file)
@@ -28,41 +28,39 @@ class APIStructuralMetrics
        super APIHandler
 
        private fun mclasses_metrics: MetricSet do
-               var mainmodule = config.mainmodule
                var metrics = new MetricSet
-               metrics.register(new CNOA(mainmodule, config.view))
-               metrics.register(new CNOP(mainmodule, config.view))
-               metrics.register(new CNOC(mainmodule, config.view))
-               metrics.register(new CNOD(mainmodule, config.view))
-               metrics.register(new CNOAC(mainmodule, config.view))
-               metrics.register(new CNOAA(mainmodule, config.view))
-               metrics.register(new CNOAI(mainmodule, config.view))
-               metrics.register(new CDIT(mainmodule, config.view))
-               metrics.register(new CNBP(mainmodule, config.view))
-               metrics.register(new CNBA(mainmodule, config.view))
-               metrics.register(new CNBM(mainmodule, config.view))
-               metrics.register(new CNBI(mainmodule, config.view))
-               metrics.register(new CNBV(mainmodule, config.view))
-               metrics.register(new CNBIP(mainmodule, config.view))
-               metrics.register(new CNBRP(mainmodule, config.view))
-               metrics.register(new CNBHP(mainmodule, config.view))
-               metrics.register(new CNBLP(mainmodule, config.view))
+               metrics.register(new CNOA(config.view))
+               metrics.register(new CNOP(config.view))
+               metrics.register(new CNOC(config.view))
+               metrics.register(new CNOD(config.view))
+               metrics.register(new CNOAC(config.view))
+               metrics.register(new CNOAA(config.view))
+               metrics.register(new CNOAI(config.view))
+               metrics.register(new CDIT(config.view))
+               metrics.register(new CNBP(config.view))
+               metrics.register(new CNBA(config.view))
+               metrics.register(new CNBM(config.view))
+               metrics.register(new CNBI(config.view))
+               metrics.register(new CNBV(config.view))
+               metrics.register(new CNBIP(config.view))
+               metrics.register(new CNBRP(config.view))
+               metrics.register(new CNBHP(config.view))
+               metrics.register(new CNBLP(config.view))
                return metrics
        end
 
        private fun mmodules_metrics: MetricSet do
-               var mainmodule = config.mainmodule
                var metrics = new MetricSet
-               metrics.register(new MNOA(mainmodule, config.view))
-               metrics.register(new MNOP(mainmodule, config.view))
-               metrics.register(new MNOC(mainmodule, config.view))
-               metrics.register(new MNOD(mainmodule, config.view))
-               metrics.register(new MDIT(mainmodule, config.view))
-               metrics.register(new MNBD(mainmodule, config.view))
-               metrics.register(new MNBI(mainmodule, config.view))
-               metrics.register(new MNBR(mainmodule, config.view))
-               metrics.register(new MNBCC(mainmodule, config.view))
-               metrics.register(new MNBAC(mainmodule, config.view))
+               metrics.register(new MNOA(config.view))
+               metrics.register(new MNOP(config.view))
+               metrics.register(new MNOC(config.view))
+               metrics.register(new MNOD(config.view))
+               metrics.register(new MDIT(config.view))
+               metrics.register(new MNBD(config.view))
+               metrics.register(new MNBI(config.view))
+               metrics.register(new MNBR(config.view))
+               metrics.register(new MNBCC(config.view))
+               metrics.register(new MNBAC(config.view))
                return metrics
        end
 
@@ -152,84 +150,76 @@ redef class MClass
 end
 
 redef class MetricSet
-       super Jsonable
+       super Serializable
 
-       fun json: JsonObject do
-               var obj = new JsonObject
+       redef fun core_serialize_to(v) do
                for metric in metrics do
-                       obj[metric.name] = metric
+                       v.serialize_attribute(metric.name, metric)
                end
-               return obj
        end
-
-       redef fun serialize_to(v) do json.serialize_to(v)
 end
 
 redef class Metric
-       super Jsonable
-
-       fun json: JsonObject do
-               var obj = new JsonObject
-               obj["name"] = name
-               obj["desc"] = desc
-               obj["empty"] = values.is_empty
-               if values.not_empty then obj["avg"] = avg
-               if values.not_empty then obj["std_dev"] = std_dev
-               if values.not_empty then obj["threshold"] = threshold
-               return obj
+       super Serializable
+
+       redef fun core_serialize_to(v) do
+               v.serialize_attribute("name", name)
+               v.serialize_attribute("desc", desc)
+               v.serialize_attribute("empty", values.is_empty)
+               if values.not_empty then v.serialize_attribute("avg", avg)
+               if values.not_empty then v.serialize_attribute("std_dev", std_dev)
+               if values.not_empty then v.serialize_attribute("threshold", threshold)
        end
-
-       redef fun serialize_to(v) do json.serialize_to(v)
 end
 
 redef class IntMetric
-       redef fun json do
-               var obj = super
-               if values.not_empty then obj["sum"] = sum
-               return obj
+       redef fun core_serialize_to(v) do
+               super
+               if values.not_empty then v.serialize_attribute("sum", sum)
        end
 end
 
 redef class FloatMetric
-       redef fun json do
-               var obj = super
-               if values.not_empty then obj["sum"] = sum
-               return obj
+       redef fun core_serialize_to(v) do
+               super
+               if values.not_empty then v.serialize_attribute("sum", sum)
        end
 end
 
 redef class MModuleMetric
-       redef fun json do
-               var obj = super
-               if values.not_empty then obj["min"] = min
-               if values.not_empty then obj["max"] = max
+       redef fun core_serialize_to(v) do
+               super
+               if values.not_empty then v.serialize_attribute("min", min)
+               if values.not_empty then v.serialize_attribute("max", max)
                var values = new JsonObject
                for value in sort do
-                       var v = self[value]
-                       var vobj = new JsonObject
-                       vobj["mentity"] = value
-                       vobj["value"] = if v isa Jsonable then v else v.to_s
-                       values[value.full_name] = vobj
+                       values[value.full_name] = new MetricEntry(value, self[value])
                end
-               obj["values"] = values
-               return obj
+               v.serialize_attribute("values", values)
        end
 end
 
 redef class MClassMetric
-       redef fun json do
-               var obj = super
-               if values.not_empty then obj["min"] = min
-               if values.not_empty then obj["max"] = max
+       redef fun core_serialize_to(v) do
+               super
+               if values.not_empty then v.serialize_attribute("min", min)
+               if values.not_empty then v.serialize_attribute("max", max)
                var values = new JsonObject
                for value in sort do
-                       var v = self[value]
-                       var vobj = new JsonObject
-                       vobj["mentity"] = value
-                       vobj["value"] = if v isa Jsonable then v else v.to_s
-                       values[value.full_name] = vobj
+                       values[value.full_name] = new MetricEntry(value, self[value])
                end
-               obj["values"] = values
-               return obj
+               v.serialize_attribute("values", values)
+       end
+end
+
+private class MetricEntry
+       super Serializable
+
+       var mentity: MEntity
+       var value: Object
+
+       redef fun core_serialize_to(v) do
+               v.serialize_attribute("mentity", mentity)
+               v.serialize_attribute("value", if value isa JsonObject then value else value.to_s)
        end
 end