using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using newtelligence.DasBlog.Runtime;
using Microsoft.Samples.ServiceHosting.StorageClient;
using Microsoft.ServiceHosting.ServiceRuntime;
namespace newtelligence.DasBlog.Runtime.Azure{
public class LoggingDataServiceAzure : ILoggingDataService
{
private StorageAccountInfo accountInfo;
public LoggingDataServiceAzure(string loggingLocation)
{
if (string.IsNullOrEmpty(loggingLocation)) { throw new ArgumentNullException("loggingLocation"); }
//get accountinfo
this.accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
//ensure the tables exist
TableStorage.CreateTablesFromModel(typeof(EventDataServiceContext), accountInfo);
TableStorage.CreateTablesFromModel(typeof(LogDataServiceContext), accountInfo);
}
public void AddAggregatorBugHit(LogDataItem logItem)
{
AddLogDataItem(logItem, LogCategory.AggregatorBug);
}
public void AddClickThrough(LogDataItem logItem)
{
AddLogDataItem(logItem, LogCategory.ClickThrough);
}
public void AddCrosspostReferrer(LogDataItem logItem)
{
AddLogDataItem(logItem, LogCategory.Crosspost);
}
private void AddLogDataItem(LogDataItem logItem, LogCategory category)
{
if (logItem == null) { throw new ArgumentNullException("logItem"); }
var entity = new LogDataEntity(logItem, category);
var ctx = new LogDataServiceContext(this.accountInfo);
ctx.AddEventData(entity);
}
public void AddEvent(EventDataItem eventData)
{
if (eventData == null) { throw new ArgumentNullException("eventData"); }
var entity = new EventDataEntity(eventData);
EventDataServiceContext ctx = new EventDataServiceContext(this.accountInfo);
ctx.AddEventData(entity);
}
public void AddReferral(LogDataItem logItem)
{
AddLogDataItem(logItem, LogCategory.Referrer);
}
public LogDataItemCollection GetReferralsForDay(DateTime date)
{
return GetLogDataItemsForDay(date, LogCategory.Referrer);
}
public LogDataItemCollection GetClickThroughsForDay(DateTime date)
{
return GetLogDataItemsForDay(date, LogCategory.ClickThrough);
}
public LogDataItemCollection GetAggregatorBugHitsForDay(DateTime date)
{
return GetLogDataItemsForDay(date, LogCategory.AggregatorBug);
}
public LogDataItemCollection GetCrosspostReferrersForDay(DateTime date)
{
return GetLogDataItemsForDay(date, LogCategory.Crosspost);
}
private LogDataItemCollection GetLogDataItemsForDay(DateTime utcDate, LogCategory category)
{
var ctx = new LogDataServiceContext(accountInfo);
string key = utcDate.ToLongDateString();
string categoryName = category.ToString();
try
{
var logs = (from e in ctx.Logs
where e.PartitionKey == key && e.Category == categoryName
select e).ToList();
return new LogDataItemCollection(logs.ConvertAll(x => x.GetLogDataItem()));
}
catch (Exception e)
{
RoleManager.WriteToLog("Error", e.Message);
throw;
}
}
public EventDataItemCollection GetEventsForDay(DateTime utcDate)
{
var ctx = new EventDataServiceContext(accountInfo);
string key = utcDate.ToLongDateString();
try
{
var events = (from e in ctx.Events
where e.PartitionKey == key
select e).ToList();
return new EventDataItemCollection(events.ConvertAll(x => x.GetEventDataItem()));
}
catch (Exception e)
{
RoleManager.WriteToLog("Error", e.Message);
throw;
}
}
}
}
|