private fun mclasses_metrics: MetricSet do
var mainmodule = config.mainmodule
var metrics = new MetricSet
- metrics.register(new CNOA(mainmodule, view))
- metrics.register(new CNOP(mainmodule, view))
- metrics.register(new CNOC(mainmodule, view))
- metrics.register(new CNOD(mainmodule, view))
- metrics.register(new CNOAC(mainmodule, view))
- metrics.register(new CNOAA(mainmodule, view))
- metrics.register(new CNOAI(mainmodule, view))
- metrics.register(new CDIT(mainmodule, view))
- metrics.register(new CNBP(mainmodule, view))
- metrics.register(new CNBA(mainmodule, view))
- metrics.register(new CNBM(mainmodule, view))
- metrics.register(new CNBI(mainmodule, view))
- metrics.register(new CNBV(mainmodule, view))
- metrics.register(new CNBIP(mainmodule, view))
- metrics.register(new CNBRP(mainmodule, view))
- metrics.register(new CNBHP(mainmodule, view))
- metrics.register(new CNBLP(mainmodule, view))
+ 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))
return metrics
end
private fun mmodules_metrics: MetricSet do
var mainmodule = config.mainmodule
var metrics = new MetricSet
- metrics.register(new MNOA(mainmodule, view))
- metrics.register(new MNOP(mainmodule, view))
- metrics.register(new MNOC(mainmodule, view))
- metrics.register(new MNOD(mainmodule, view))
- metrics.register(new MDIT(mainmodule, view))
- metrics.register(new MNBD(mainmodule, view))
- metrics.register(new MNBI(mainmodule, view))
- metrics.register(new MNBR(mainmodule, view))
- metrics.register(new MNBCC(mainmodule, view))
- metrics.register(new MNBAC(mainmodule, view))
- metrics.register(new MNBIC(mainmodule, view))
+ 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))
return metrics
end
redef fun get(req, res) do
var mentity = mentity_from_uri(req, res)
- if mentity == null then
- res.error 404
- return
- end
+ if mentity == null then return
var metrics = mentity.collect_metrics(self)
if metrics == null then
- res.error 404
+ res.api_error(404, "No metric for mentity `{mentity.full_name}`")
return
end
res.json metrics
redef class MetricSet
super Jsonable
- 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 to_json do return json.to_json
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
+ 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 to_json do return json.to_json
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 Jsonable
+
+ 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