public static void Main(string [] args) { try { using (var db = new Database (db_path)) { if (args != null && args.Length > 0 && args[0] == "--timeline") { var metric = db.GetMetric ("Banshee/StartedAt"); var usage_samples = new SampleModel (String.Format ("WHERE MetricId = {0}", metric.Id), db, "1"); usage_samples.Reload (); for (long i = 0; i < usage_samples.Cache.Count; i++) { var sample = usage_samples.Cache.GetValue (i); Console.WriteLine ( "{1} {0} {2} {0} {3} {0} {4}", "<TUFTE>", DateTimeUtil.FromDateTime (sample.Stamp), sample.UserId, sample.CacheEntryId, sample.CacheEntryId ); } return; } db.Import (); new MetaMetrics (db); } } catch (Exception e) { Console.WriteLine ("Going down, got exception {0}", e); throw; } }
public MetaMetrics(Database db) { var latest_samples = new SampleModel("GROUP BY UserID, MetricID ORDER BY stamp desc", db, "COUNT(DISTINCT(UserID)), MIN(Stamp), MAX(Stamp)"); latest_samples.Cache.AggregatesUpdated += (reader) => { Console.WriteLine("Total unique users for this time slice: {0}", reader[1]); Console.WriteLine("First report was on {0}", SqliteUtils.FromDbFormat(typeof(DateTime), reader[2])); Console.WriteLine("Last report was on {0}", SqliteUtils.FromDbFormat(typeof(DateTime), reader[3])); Console.WriteLine(); }; latest_samples.Reload(); var string_summary = new MetricSampleModel(latest_samples.Cache, db, @"COUNT(DISTINCT(UserID))" ); string_summary.Cache.AggregatesUpdated += (agg_reader) => { Console.WriteLine(String.Format(" Users: {0}", fmt), agg_reader[1]); using (var reader = new HyenaDataReader(db.Query( @"SELECT COUNT(DISTINCT(UserId)) as users, Value FROM Samples, HyenaCache WHERE MetricId = ? AND HyenaCache.ModelID = ? AND HyenaCache.ItemID = Samples.ID GROUP BY Value ORDER BY users DESC", string_summary.MetricId, string_summary.Cache.CacheId))) { while (reader.Read()) { Console.WriteLine(" {0,-5}: {1,-20}", reader.Get <long> (0), reader.Get <string> (1)); } } Console.WriteLine(); }; var numeric_slice = new MetricSampleModel(latest_samples.Cache, db, @"MIN(CAST(Value as NUMERIC)), MAX(CAST(Value as NUMERIC)), AVG(CAST(Value as NUMERIC)), HYENA_METRICS_MEDIAN_DOUBLE(CAST(Value as NUMERIC)), COUNT(DISTINCT(UserID))" ); numeric_slice.Cache.AggregatesUpdated += (reader) => { Console.WriteLine(String.Format(" Users: {0}", fmt), reader[5]); Console.WriteLine(String.Format(" Min: {0}", fmt), Metric.ToString(numeric_slice.MetricName, reader[1])); Console.WriteLine(String.Format(" Avg: {0}", fmt), Metric.ToString(numeric_slice.MetricName, reader[3])); Console.WriteLine(String.Format(" Median: {0}", fmt), Metric.ToString(numeric_slice.MetricName, reader[4])); Console.WriteLine(String.Format(" Max: {0}", fmt), Metric.ToString(numeric_slice.MetricName, reader[2])); Console.WriteLine(); }; var metrics = db.QueryEnumerable <string> ("SELECT Name FROM Metrics ORDER BY Name ASC"); foreach (var metric in metrics) { switch (GetMetricType(metric)) { case "string": Console.WriteLine("{0}:", metric); string_summary.ChangeMetric(db, metric); break; //case "timespan" : SummarizeNumeric<TimeSpan> (metric); break; //case "datetime" : SummarizeNumeric<DateTime> (metric); break; case "float": Console.WriteLine("{0}:", metric); //SummarizeNumeric<long> (metric_cache); numeric_slice.ChangeMetric(db, metric); break; //case "float": //SummarizeNumeric<double> (metric_cache); //break; } } }
public MetaMetrics(Database db) { var latest_samples = new SampleModel ("GROUP BY UserID, MetricID ORDER BY stamp desc", db, "COUNT(DISTINCT(UserID)), MIN(Stamp), MAX(Stamp)"); latest_samples.Cache.AggregatesUpdated += (reader) => { Console.WriteLine ("Total unique users for this time slice: {0}", reader[1]); Console.WriteLine ("First report was on {0}", SqliteUtils.FromDbFormat (typeof(DateTime), reader[2])); Console.WriteLine ("Last report was on {0}", SqliteUtils.FromDbFormat (typeof(DateTime), reader[3])); Console.WriteLine (); }; latest_samples.Reload (); var string_summary = new MetricSampleModel (latest_samples.Cache, db, @"COUNT(DISTINCT(UserID))" ); string_summary.Cache.AggregatesUpdated += (agg_reader) => { Console.WriteLine (String.Format (" Users: {0}", fmt), agg_reader[1]); using (var reader = new HyenaDataReader (db.Query ( @"SELECT COUNT(DISTINCT(UserId)) as users, Value FROM Samples, HyenaCache WHERE MetricId = ? AND HyenaCache.ModelID = ? AND HyenaCache.ItemID = Samples.ID GROUP BY Value ORDER BY users DESC", string_summary.MetricId, string_summary.Cache.CacheId))) { while (reader.Read ()) { Console.WriteLine (" {0,-5}: {1,-20}", reader.Get<long> (0), reader.Get<string> (1)); } } Console.WriteLine (); }; var numeric_slice = new MetricSampleModel (latest_samples.Cache, db, @"MIN(CAST(Value as NUMERIC)), MAX(CAST(Value as NUMERIC)), AVG(CAST(Value as NUMERIC)), HYENA_METRICS_MEDIAN_DOUBLE(CAST(Value as NUMERIC)), COUNT(DISTINCT(UserID))" ); numeric_slice.Cache.AggregatesUpdated += (reader) => { Console.WriteLine (String.Format (" Users: {0}", fmt), reader[5]); Console.WriteLine (String.Format (" Min: {0}", fmt), Metric.ToString (numeric_slice.MetricName, reader[1])); Console.WriteLine (String.Format (" Avg: {0}", fmt), Metric.ToString (numeric_slice.MetricName, reader[3])); Console.WriteLine (String.Format (" Median: {0}", fmt), Metric.ToString (numeric_slice.MetricName, reader[4])); Console.WriteLine (String.Format (" Max: {0}", fmt), Metric.ToString (numeric_slice.MetricName, reader[2])); Console.WriteLine (); }; var metrics = db.QueryEnumerable<string> ("SELECT Name FROM Metrics ORDER BY Name ASC"); foreach (var metric in metrics) { switch (GetMetricType (metric)) { case "string": Console.WriteLine ("{0}:", metric); string_summary.ChangeMetric (db, metric); break; //case "timespan" : SummarizeNumeric<TimeSpan> (metric); break; //case "datetime" : SummarizeNumeric<DateTime> (metric); break; case "float": Console.WriteLine ("{0}:", metric); //SummarizeNumeric<long> (metric_cache); numeric_slice.ChangeMetric (db, metric); break; //case "float": //SummarizeNumeric<double> (metric_cache); //break; } } }