metrics: make MetricSet output csv
authorAlexandre Terrasa <alexandre@moz-code.org>
Thu, 6 Mar 2014 06:31:40 +0000 (01:31 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Fri, 7 Mar 2014 08:01:34 +0000 (03:01 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/metrics/inheritance_metrics.nit
src/metrics/mclasses_metrics.nit
src/metrics/metrics_base.nit
src/metrics/mmodules_metrics.nit
src/metrics/rta_metrics.nit

index 4ba1dc7..9e2c5d8 100644 (file)
@@ -33,6 +33,9 @@ private class InheritanceMetricsPhase
        redef fun process_mainmodule(mainmodule)
        do
                if not toolcontext.opt_inheritance.value and not toolcontext.opt_all.value then return
+               var csv = toolcontext.opt_csv.value
+               var out = "{toolcontext.opt_dir.value or else "metrics"}/inheritance"
+               out.mkdir
 
                print toolcontext.format_h1("\n# Inheritance metrics")
 
@@ -75,8 +78,10 @@ private class InheritanceMetricsPhase
                                mclasses.add_all(mod_mclasses)
                                cmetrics.collect(new HashSet[MClass].from(mod_mclasses))
                                cmetrics.to_console(1, not toolcontext.opt_nocolors.value)
+                               if csv then cmetrics.to_csv.save("{out}/{mgroup}_classes.csv")
                                hmetrics.collect(new HashSet[MModule].from(mgroup.mmodules))
                                hmetrics.to_console(1, not toolcontext.opt_nocolors.value)
+                               if csv then hmetrics.to_csv.save("{out}/{mgroup}_inheritance.csv")
                        end
                end
                if not mclasses.is_empty then
@@ -85,9 +90,11 @@ private class InheritanceMetricsPhase
                        cmetrics.clear
                        cmetrics.collect(mclasses)
                        cmetrics.to_console(1, not toolcontext.opt_nocolors.value)
+                       if csv then cmetrics.to_csv.save("{out}/summary_classes.csv")
                        hmetrics.clear
                        hmetrics.collect(mmodules)
                        hmetrics.to_console(1, not toolcontext.opt_nocolors.value)
+                       if csv then hmetrics.to_csv.save("{out}/summary_inheritance.csv")
                end
        end
 end
index f582732..066556f 100644 (file)
@@ -32,6 +32,10 @@ private class MClassesMetricsPhase
        redef fun process_mainmodule(mainmodule)
        do
                if not toolcontext.opt_mclasses.value and not toolcontext.opt_all.value then return
+               var csv = toolcontext.opt_csv.value
+               var out = "{toolcontext.opt_dir.value or else "metrics"}/mclasses"
+               out.mkdir
+
 
                print toolcontext.format_h1("\n# MClasses metrics")
 
@@ -67,6 +71,7 @@ private class MClassesMetricsPhase
                                mclasses.add_all(mod_mclasses)
                                metrics.collect(new HashSet[MClass].from(mod_mclasses))
                                metrics.to_console(1, not toolcontext.opt_nocolors.value)
+                               if csv then metrics.to_csv.save("{out}/{mgroup}.csv")
                        end
                end
                if not mclasses.is_empty then
@@ -74,6 +79,7 @@ private class MClassesMetricsPhase
                        print toolcontext.format_h2("\n ## global metrics")
                        metrics.collect(mclasses)
                        metrics.to_console(1, not toolcontext.opt_nocolors.value)
+                       if csv then metrics.to_csv.save("{out}/summary.csv")
                end
        end
 end
index 2bb61cb..14cd0ed 100644 (file)
@@ -50,7 +50,7 @@ redef class ToolContext
        # --rta
        var opt_rta = new OptionBool("Compute RTA metrics", "--rta")
        # --generate-csv
-       var opt_generate_csv = new OptionBool("Generate CVS format metrics", "--generate-csv")
+       var opt_csv = new OptionBool("Export metrics in CSV format", "--csv")
        # --generate_hyperdoc
        var opt_generate_hyperdoc = new OptionBool("Generate Hyperdoc", "--generate_hyperdoc")
        # --poset
@@ -77,7 +77,7 @@ redef class ToolContext
                self.option_context.add_option(opt_static_types)
                self.option_context.add_option(opt_tables)
                self.option_context.add_option(opt_rta)
-               self.option_context.add_option(opt_generate_csv)
+               self.option_context.add_option(opt_csv)
                self.option_context.add_option(opt_generate_hyperdoc)
                self.option_context.add_option(opt_poset)
                self.option_context.add_option(opt_dir)
@@ -309,4 +309,32 @@ class MetricSet
                for metric in metrics do metric.to_console(indent, colors)
        end
 
+       # Export the metric set in CSV format
+       fun to_csv: CSVDocument do
+               var csv = new CSVDocument
+
+               # set csv headers
+               csv.header.add("entry")
+               for metric in metrics do csv.header.add(metric.name)
+
+               # collect all entries to merge metric results
+               var entries = new HashSet[ELM]
+               for metric in metrics do
+                       for entry in metric.values.keys do entries.add(entry)
+               end
+
+               # collect results
+               for entry in entries do
+                       var line = [entry.to_s]
+                       for metric in metrics do
+                               if metric.has_element(entry) then
+                                       line.add(metric[entry].to_s)
+                               else
+                                       line.add("n/a")
+                               end
+                       end
+                       csv.lines.add(line)
+               end
+               return csv
+       end
 end
index 72bf41d..6381726 100644 (file)
@@ -32,6 +32,9 @@ private class MModulesMetricsPhase
        redef fun process_mainmodule(mainmodule)
        do
                if not toolcontext.opt_mmodules.value and not toolcontext.opt_all.value then return
+               var csv = toolcontext.opt_csv.value
+               var out = "{toolcontext.opt_dir.value or else "metrics"}/mmodules"
+               out.mkdir
 
                print toolcontext.format_h1("\n# MModules metrics")
 
@@ -52,6 +55,7 @@ private class MModulesMetricsPhase
                                mmodules.add_all(mgroup.mmodules)
                                metrics.collect(new HashSet[MModule].from(mgroup.mmodules))
                                metrics.to_console(1, not toolcontext.opt_nocolors.value)
+                               if csv then metrics.to_csv.save("{out}/{mgroup}.csv")
                        end
                end
                if not mmodules.is_empty then
@@ -60,6 +64,7 @@ private class MModulesMetricsPhase
                        metrics.clear
                        metrics.collect(mmodules)
                        metrics.to_console(1, not toolcontext.opt_nocolors.value)
+                       if csv then metrics.to_csv.save("{out}/summary.csv")
                end
        end
 end
index 58c2698..820c2ef 100644 (file)
@@ -120,7 +120,7 @@ do
        end
 
        # CSV generation
-       if modelbuilder.toolcontext.opt_generate_csv.value then
+       if modelbuilder.toolcontext.opt_csv.value then
                var summaryCSV = new CSVDocument
                summaryCSV.set_header("scope", "NLVT", "NLVTG", "NLCT", "NLVCTG")
                summaryCSV.add_line("global", nlvt, nlvtg, nlct, nlctg)