public static Task TrackEventAsync(
string category,
string action,
long eventId,
TimePrecision precision = TimePrecision.OneDay,
DateTime now = default(DateTime))
{
if (now == default(DateTime))
{
now = DateTime.UtcNow;
}
string time;
switch (precision)
{
case TimePrecision.FifteenMinutes:
{
time = DateTimeUtil.FifteenMinutes(now);
break;
}
case TimePrecision.OneHour:
{
time = DateTimeUtil.OneHour(now);
break;
}
case TimePrecision.OneDay:
{
time = DateTimeUtil.OneDay(now);
break;
}
case TimePrecision.OneMonth:
{
time = DateTimeUtil.OneMonth(now);
break;
}
default:
{
throw new Exception(string.Format("unsupported precision encountered\n\t{0}", precision));
}
}
RedisKey key = EventKey(category, action, time);
return SharedCache.Instance.GetAnalyticsWriteConnection()
.GetDatabase(SharedCache.Instance.Db)
.StringSetBitAsync(key, eventId, true);
}