public static void SaveWhereStats(FeedRegistry fr, Calinfo calinfo) { var id = calinfo.id; GenUtils.LogMsg("status", "SaveWhereStats: " + id, null); NonIcalStats estats = GetNonIcalStats(NonIcalType.eventful, id, calinfo, settings); NonIcalStats ustats = GetNonIcalStats(NonIcalType.upcoming, id, calinfo, settings); NonIcalStats ebstats = GetNonIcalStats(NonIcalType.eventbrite, id, calinfo, settings); NonIcalStats fbstats = GetNonIcalStats(NonIcalType.facebook, id, calinfo, settings); Dictionary<string, IcalStats> istats = GetIcalStats(id); var where = calinfo.where; string[] response = Utils.FindCityOrTownAndStateAbbrev(where); var city_or_town = response[0]; var state_abbrev = response[1]; int pop = Utils.FindPop(id, city_or_town, state_abbrev); var futurecount = 0; futurecount += estats.eventcount; futurecount += ustats.eventcount; futurecount += ebstats.eventcount; var sb_report = new StringBuilder(); sb_report.Append(MakeTableHeader()); var options = new ParallelOptions(); Parallel.ForEach(source: fr.feeds.Keys, parallelOptions: options, body: (feedurl) => // foreach (var feedurl in fr.feeds.Keys) { StatsRow(id, istats, sb_report, ref futurecount, feedurl); } ); sb_report.Append("</table>\n"); var events_per_person = Convert.ToInt32(futurecount) / (float)pop; var report = Utils.EmbedHtmlSnippetInDefaultPageWrapper(calinfo, sb_report.ToString()); bs.PutBlob(id, id + ".stats.html", new Hashtable(), Encoding.UTF8.GetBytes(report), "text/html"); var dict = new Dictionary<string, object>(); dict.Add("events", futurecount.ToString()); dict.Add("events_per_person", string.Format("{0:f}", events_per_person)); TableStorage.UpmergeDictToTableStore(dict, "metadata", id, id); }
private static NonIcalStats GetNonIcalStats(NonIcalType type, string id, Calinfo calinfo, Dictionary<string, string> settings) { var name = type.ToString() + "_stats.json"; var stats = new NonIcalStats(); if (settings["use_" + type.ToString()] != "true" || Utils.UseNonIcalService(type, settings, calinfo) != true) { stats.venuecount = 0; stats.eventcount = 0; stats.whenchecked = DateTime.MinValue; return stats; } try { if (BlobStorage.ExistsBlob(id, name)) stats = Utils.DeserializeObjectFromJson<NonIcalStats>(id, name); } catch (Exception e) { GenUtils.LogMsg("exception", "GetEventAndVenueStats: " + id + " " + name, e.Message + e.StackTrace); } return stats; }