public IEnumerable<IMetricsProvider> GetMetrics(int days)
{
Dictionary<int, ProviderMetrics> dictionary = new Dictionary<int,ProviderMetrics>();
///////////////////////////////////////////////////////////////////
//
// setup variables used throughout the routine
//
///////////////////////////////////////////////////////////////////
ET_Client client = CreateClient();
string[] properties = new string[]
{
"EventDate",
"SendID",
};
DateTime end = DateTime.Now;
DateTime start = end - TimeSpan.FromDays(days);
SimpleFilterPart filter = new SimpleFilterPart();
filter.Property = "EventDate";
filter.SimpleOperator = SimpleOperators.between;
filter.DateValue = new DateTime[] { start, end };
///////////////////////////////////////////////////////////////////
//
// count bounces
//
///////////////////////////////////////////////////////////////////
ET_BounceEvent bounce = new ET_BounceEvent();
bounce.GetSinceLastBatch = false;
bounce.AuthStub = client;
bounce.SearchFilter = filter;
bounce.Props = properties;
GetReturn results = bounce.Get();
foreach (ET_BounceEvent item in results.Results)
{
if (!dictionary.ContainsKey(item.SendID))
{
dictionary[item.SendID] = new ProviderMetrics();
dictionary[item.SendID].Name = GetEmailName(client, item.SendID);
}
dictionary[item.SendID].Bounces++;
}
///////////////////////////////////////////////////////////////////
//
// count clicks
//
///////////////////////////////////////////////////////////////////
ET_ClickEvent click = new ET_ClickEvent();
click.GetSinceLastBatch = false;
click.AuthStub = client;
click.SearchFilter = filter;
click.Props = properties;
results = click.Get();
foreach (ET_ClickEvent item in results.Results)
{
if (!dictionary.ContainsKey(item.SendID))
{
dictionary[item.SendID] = new ProviderMetrics();
dictionary[item.SendID].Name = GetEmailName(client, item.SendID);
}
dictionary[item.SendID].Clicks++;
}
///////////////////////////////////////////////////////////////////
//
// count opens
//
///////////////////////////////////////////////////////////////////
ET_OpenEvent open = new ET_OpenEvent();
open.GetSinceLastBatch = false;
open.AuthStub = client;
open.SearchFilter = filter;
open.Props = properties;
results = open.Get();
foreach (ET_OpenEvent item in results.Results)
{
if (!dictionary.ContainsKey(item.SendID))
{
dictionary[item.SendID] = new ProviderMetrics();
dictionary[item.SendID].Name = GetEmailName(client, item.SendID);
}
dictionary[item.SendID].Opens++;
}
///////////////////////////////////////////////////////////////////
//
// count sends
//
///////////////////////////////////////////////////////////////////
ET_SentEvent send = new ET_SentEvent();
send.GetSinceLastBatch = false;
send.AuthStub = client;
send.SearchFilter = filter;
send.Props = properties;
results = send.Get();
foreach (ET_SentEvent item in results.Results)
{
if (!dictionary.ContainsKey(item.SendID))
{
dictionary[item.SendID] = new ProviderMetrics();
dictionary[item.SendID].Name = GetEmailName(client, item.SendID);
}
dictionary[item.SendID].Sends++;
}
///////////////////////////////////////////////////////////////////
//
// count unsubscribes
//
///////////////////////////////////////////////////////////////////
ET_UnsubEvent unsubscribe = new ET_UnsubEvent();
unsubscribe.GetSinceLastBatch = false;
unsubscribe.AuthStub = client;
unsubscribe.SearchFilter = filter;
unsubscribe.Props = properties;
results = unsubscribe.Get();
foreach (ET_UnsubEvent item in results.Results)
{
if (!dictionary.ContainsKey(item.SendID))
{
dictionary[item.SendID] = new ProviderMetrics();
dictionary[item.SendID].Name = GetEmailName(client, item.SendID);
}
dictionary[item.SendID].Unsubscribes++;
}
return dictionary.Values;
}