[banshee] [extras/metrics] Start adding some cool analysis



commit ad9880ccd8caecb0c3e990fe7b501f38f243ca25
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Mon Feb 22 17:12:39 2010 -0800

    [extras/metrics] Start adding some cool analysis

 extras/metrics/MetaMetrics.cs     |   41 ++++++++++++++++++++++++++++++++++++-
 extras/metrics/MultiUserSample.cs |    5 +++-
 2 files changed, 44 insertions(+), 2 deletions(-)
---
diff --git a/extras/metrics/MetaMetrics.cs b/extras/metrics/MetaMetrics.cs
index bf0c72f..ed17b74 100644
--- a/extras/metrics/MetaMetrics.cs
+++ b/extras/metrics/MetaMetrics.cs
@@ -31,16 +31,55 @@ namespace metrics
 {
     public class MetaMetrics
     {
+        private HyenaSqliteConnection db;
+
         public DateTime FirstReport { get; private set; }
         public DateTime LastReport  { get; private set; }
+
         public MetaMetrics (HyenaSqliteConnection db)
         {
+            this.db = db;
             FirstReport = db.Query<DateTime> ("SELECT Stamp FROM Samples ORDER BY STAMP ASC");
             LastReport  = db.Query<DateTime> ("SELECT Stamp FROM Samples ORDER BY STAMP DESC");
 
             Console.WriteLine ("First report was on {0}", FirstReport);
             Console.WriteLine ("Last report was on {0}", LastReport);
             Console.WriteLine ("Total unique users: {0}", db.Query<long> ("SELECT COUNT(DISTINCT(UserId)) FROM Samples"));
+
+            SummarizeTextual ("Env/CultureInfo");
+            SummarizeTextual ("Banshee/Configuration/core/io_provider");
+
+            SummarizeNumeric<TimeSpan> ("Banshee/RunDuration");
+
+            SummarizeNumeric<long> ("Banshee/Screen/Width");
+            SummarizeNumeric<long> ("Banshee/Screen/Height");
+            SummarizeNumeric<long> ("Banshee/Screen/NMonitors");
+            SummarizeTextual ("Banshee/Screen/IsComposited");
+
+            /*foreach (var metric in db.QueryEnumerable<string> ("SELECT DISTINCT(MetricName) as name FROM Samples ORDER BY name ASC")) {
+                Console.WriteLine (metric);
+            }*/
+        }
+
+        private void SummarizeNumeric<T> (string metric_name)
+        {
+            Console.WriteLine ("{0}:", metric_name);
+            Console.WriteLine ("   Min: {0,-20}", db.Query<T> ("SELECT MIN(Value) FROM Samples WHERE MetricName = ?", metric_name));
+            Console.WriteLine ("   Max: {0,-20}", db.Query<T> ("SELECT MAX(Value) FROM Samples WHERE MetricName = ?", metric_name));
+            Console.WriteLine ("   Avg: {0,-20}", db.Query<T> ("SELECT AVG(Value) FROM Samples WHERE MetricName = ?", metric_name));
+            Console.WriteLine ();
+        }
+
+        private void SummarizeTextual (string metric_name)
+        {
+            Console.WriteLine ("{0}:", metric_name);
+            //Console.WriteLine ("   Unique Values: {0,-20}", db.Query<long> ("SELECT COUNT(DISTINCT(Value)) FROM Samples WHERE MetricName = ?", metric_name));
+            using (var reader = new HyenaDataReader (db.Query ("SELECT COUNT(DISTINCT(UserId)) as users, Value FROM Samples WHERE MetricName = ? GROUP BY Value ORDER BY users DESC", metric_name))) {
+                while (reader.Read ()) {
+                    Console.WriteLine ("   {0,-5}: {1,-20}", reader.Get<long> (0), reader.Get<string> (1));
+                }
+            }
+            Console.WriteLine ();
         }
     }
-}
+}
\ No newline at end of file
diff --git a/extras/metrics/MultiUserSample.cs b/extras/metrics/MultiUserSample.cs
index 20bf1b3..4135aa1 100644
--- a/extras/metrics/MultiUserSample.cs
+++ b/extras/metrics/MultiUserSample.cs
@@ -44,6 +44,8 @@ namespace metrics
         {
         }
 
+        static DateTime value_dt;
+        static TimeSpan value_span;
         public static void Import (string user_id, string metric_name, string stamp, object val)
         {
             var sample = new MultiUserSample ();
@@ -55,10 +57,11 @@ namespace metrics
                 sample.Stamp = stamp_dt;
             }
 
-            DateTime value_dt;
             if (DateTimeUtil.TryParseInvariant (val as string, out value_dt)) {
                 // We want numeric dates to compare with
                 sample.Value = DateTimeUtil.ToTimeT (value_dt).ToString ();
+            } else if (TimeSpan.TryParse (val as string, out value_span)) {
+                sample.Value = value_span.TotalMilliseconds.ToString ();
             } else {
                 sample.SetValue (val);
             }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]