summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--README.md16
-rw-r--r--SendGrid/Example/Program.cs75
-rw-r--r--SendGrid/SendGrid/Client.cs2
-rw-r--r--SendGrid/SendGrid/Properties/AssemblyInfo.cs4
-rw-r--r--SendGrid/SendGrid/Resources/GlobalStats.cs48
-rw-r--r--SendGrid/SendGrid/SendGrid.csproj2
-rw-r--r--SendGrid/SendGridMail/Properties/AssemblyInfo.cs4
-rw-r--r--SendGrid/UnitTest/UnitTest.cs33
9 files changed, 167 insertions, 21 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 703800b..dd42d96 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
# Change Log
All notable changes to this project will be documented in this file.
+## [6.3.4] - 2015-12-15
+###Added
+- Implemented the global stats /asm/stats endpoint [GET]
+
## [6.3.3] - 2015-12-14
###Added
- Implemented the global suppressions /asm/suppressions/global endpoint [GET, POST, DELETE]
diff --git a/README.md b/README.md
index 19085d9..0bb4bb7 100644
--- a/README.md
+++ b/README.md
@@ -313,6 +313,22 @@ string email = "example@example.com";
HttpResponseMessage responseDelete1 = client.GlobalSuppressions.Delete(email).Result;
```
+## Global Stats ##
+
+Please refer to [our documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Stats/global.html) for further details.
+
+Global Stats provide all of your user’s email statistics for a given date range. [GET]
+
+```csharp
+String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+var client = new SendGrid.Client(apiKey);
+var startDate = "2015-11-01"; // required
+var endDate = "2015-12-01";
+var aggregatedBy = "day"; // "week" or "month" are also options
+// Leave off .Result for an asyncronous call
+HttpResponseMessage responseGet = client.GlobalStats.Get(startDate, endDate, aggregatedBy).Result;
+```
+
#How to: Testing
* Load the solution (We have tested using the Visual Studio Community Edition)
diff --git a/SendGrid/Example/Program.cs b/SendGrid/Example/Program.cs
index 041e6dd..447bd04 100644
--- a/SendGrid/Example/Program.cs
+++ b/SendGrid/Example/Program.cs
@@ -20,6 +20,7 @@ namespace Example
UnsubscribeGroups();
Suppressions();
GlobalSuppressions();
+ GlobalStats();
}
private static void SendAsync(SendGrid.SendGridMessage message)
@@ -33,13 +34,13 @@ namespace Example
{
transportWeb.DeliverAsync(message).Wait();
Console.WriteLine("Email sent to " + message.To.GetValue(0));
- Console.WriteLine("Press any key to continue.");
+ Console.WriteLine("\n\nPress any key to continue.");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
- Console.WriteLine("Press any key to continue.");
+ Console.WriteLine("\n\nPress any key to continue.");
Console.ReadKey();
}
}
@@ -69,7 +70,7 @@ namespace Example
HttpResponseMessage responseGet = client.ApiKeys.Get().Result;
Console.WriteLine(responseGet.StatusCode);
Console.WriteLine(responseGet.Content.ReadAsStringAsync().Result);
- Console.WriteLine("These are your current API Keys. Press any key to continue.");
+ Console.WriteLine("These are your current API Keys.\n\nPress any key to continue.");
Console.ReadKey();
// POST API KEYS
@@ -79,14 +80,14 @@ namespace Example
var apiKeyId = jsonObject.api_key_id.ToString();
Console.WriteLine(responsePost.StatusCode);
Console.WriteLine(responsePost.Content.ReadAsStringAsync().Result);
- Console.WriteLine("API Key created. Press any key to continue.");
+ Console.WriteLine("API Key created.\n\nPress any key to continue.");
Console.ReadKey();
// PATCH API KEYS
HttpResponseMessage responsePatch = client.ApiKeys.Patch(apiKeyId, "CSharpTestKeyPatched").Result;
Console.WriteLine(responsePatch.StatusCode);
Console.WriteLine(responsePatch.Content.ReadAsStringAsync().Result);
- Console.WriteLine("API Key patched. Press any key to continue.");
+ Console.WriteLine("API Key patched.\n\nPress any key to continue.");
Console.ReadKey();
// DELETE API KEYS
@@ -96,7 +97,7 @@ namespace Example
HttpResponseMessage responseFinal = client.ApiKeys.Get().Result;
Console.WriteLine(responseFinal.StatusCode);
Console.WriteLine(responseFinal.Content.ReadAsStringAsync().Result);
- Console.WriteLine("API Key Deleted, press any key to end.");
+ Console.WriteLine("API Key Deleted.\n\nPress any key to end.");
Console.ReadKey();
}
@@ -117,7 +118,7 @@ namespace Example
HttpResponseMessage responseGetUnique = client.UnsubscribeGroups.Get(unsubscribeGroupID).Result;
Console.WriteLine(responseGetUnique.StatusCode);
Console.WriteLine(responseGetUnique.Content.ReadAsStringAsync().Result);
- Console.WriteLine("This is an Unsubscribe Group with ID: " + unsubscribeGroupID.ToString() + ". Press any key to continue.");
+ Console.WriteLine("This is an Unsubscribe Group with ID: " + unsubscribeGroupID.ToString() + ".\n\nPress any key to continue.");
Console.ReadKey();
// POST UNSUBSCRIBE GROUP
@@ -127,7 +128,7 @@ namespace Example
var unsubscribeGroupId = jsonObject.id.ToString();
Console.WriteLine(responsePost.StatusCode);
Console.WriteLine(responsePost.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Unsubscribe Group created. Press any key to continue.");
+ Console.WriteLine("Unsubscribe Group created.\n\nPress any key to continue.");
Console.ReadKey();
// DELETE UNSUBSCRIBE GROUP
@@ -137,7 +138,7 @@ namespace Example
HttpResponseMessage responseFinal = client.UnsubscribeGroups.Get().Result;
Console.WriteLine(responseFinal.StatusCode);
Console.WriteLine(responseFinal.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Unsubscribe Group Deleted, press any key to end.");
+ Console.WriteLine("Unsubscribe Group Deleted.\n\nPress any key to end.");
Console.ReadKey();
}
@@ -161,7 +162,7 @@ namespace Example
dynamic jsonObject = JObject.Parse(rawString);
Console.WriteLine(responsePost.StatusCode);
Console.WriteLine(responsePost.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Emails added to Suppression Group:" + groupID.ToString() + ". Press any key to continue.");
+ Console.WriteLine("Emails added to Suppression Group:" + groupID.ToString() + ".\n\nPress any key to continue.");
Console.ReadKey();
// DELETE EMAILS FROM A SUPPRESSION GROUP
@@ -173,7 +174,7 @@ namespace Example
HttpResponseMessage responseFinal = client.Suppressions.Get(groupID).Result;
Console.WriteLine(responseFinal.StatusCode);
Console.WriteLine(responseFinal.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Emails removed from Suppression Group" + groupID.ToString() + "Deleted. Press any key to end.");
+ Console.WriteLine("Emails removed from Suppression Group" + groupID.ToString() + "Deleted.\n\nPress any key to end.");
Console.ReadKey();
}
@@ -182,7 +183,7 @@ namespace Example
String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
var client = new SendGrid.Client(apiKey);
- // GET SUPPRESSED ADDRESSES FOR A GIVEN GROUP
+ // CHECK IF EMAIL IS ON THE GLOBAL SUPPRESSION LIST
var email = "elmer.thomas+test_global@gmail.com";
HttpResponseMessage responseGetUnique = client.GlobalSuppressions.Get(email).Result;
Console.WriteLine(responseGetUnique.StatusCode);
@@ -190,17 +191,17 @@ namespace Example
Console.WriteLine("Determines if the given email is listed on the Global Suppressions list. Press any key to continue.");
Console.ReadKey();
- // ADD EMAILS TO A SUPPRESSION GROUP
+ // ADD EMAILS TO THE GLOBAL SUPPRESSION LIST
string[] emails = { "example@example.com", "example2@example.com" };
HttpResponseMessage responsePost = client.GlobalSuppressions.Post(emails).Result;
var rawString = responsePost.Content.ReadAsStringAsync().Result;
dynamic jsonObject = JObject.Parse(rawString);
Console.WriteLine(responsePost.StatusCode);
Console.WriteLine(responsePost.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Emails added to Global Suppression Group. Press any key to continue.");
+ Console.WriteLine("Emails added to Global Suppression Group.\n\nPress any key to continue.");
Console.ReadKey();
- // DELETE EMAILS FROM A SUPPRESSION GROUP
+ // DELETE EMAILS FROM THE GLOBAL SUPPRESSION GROUP
Console.WriteLine("Deleting emails from Global Suppression Group, please wait.");
HttpResponseMessage responseDelete1 = client.GlobalSuppressions.Delete("example@example.com").Result;
Console.WriteLine(responseDelete1.StatusCode);
@@ -212,7 +213,49 @@ namespace Example
HttpResponseMessage responseFinal2 = client.GlobalSuppressions.Get("example2@example.com").Result;
Console.WriteLine(responseFinal2.StatusCode);
Console.WriteLine(responseFinal2.Content.ReadAsStringAsync().Result);
- Console.WriteLine("Emails removed from Global Suppression Group. Press any key to end.");
+ Console.WriteLine("Emails removed from Global Suppression Group.\n\nPress any key to end.");
+ Console.ReadKey();
+ }
+
+ private static void GlobalStats()
+ {
+ String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+ var client = new SendGrid.Client(apiKey);
+
+ // Global Stats provide all of your user’s email statistics for a given date range.
+ var startDate = "2015-11-01";
+ HttpResponseMessage response = client.GlobalStats.Get(startDate).Result;
+ Console.WriteLine(response.StatusCode);
+ Console.WriteLine(response.Content.ReadAsStringAsync().Result);
+ Console.WriteLine("Display global email stats, with start date " + startDate + "and no end date.\n\nPress any key to continue.");
+ Console.ReadKey();
+
+ var endDate = "2015-12-01";
+ response = client.GlobalStats.Get(startDate, endDate).Result;
+ Console.WriteLine(response.StatusCode);
+ Console.WriteLine(response.Content.ReadAsStringAsync().Result);
+ Console.WriteLine("Display global email stats, with start date " + startDate + "and end date " + endDate + ".\n\nPress any key to continue.");
+ Console.ReadKey();
+
+ var aggregatedBy = "day";
+ response = client.GlobalStats.Get(startDate, endDate, aggregatedBy).Result;
+ Console.WriteLine(response.StatusCode);
+ Console.WriteLine(response.Content.ReadAsStringAsync().Result);
+ Console.WriteLine("Display global email stats, with start date " + startDate + "and end date " + endDate + " and aggregated by " + aggregatedBy + ".\n\nPress any key to continue.");
+ Console.ReadKey();
+
+ aggregatedBy = "week";
+ response = client.GlobalStats.Get(startDate, endDate, aggregatedBy).Result;
+ Console.WriteLine(response.StatusCode);
+ Console.WriteLine(response.Content.ReadAsStringAsync().Result);
+ Console.WriteLine("Display global email stats, with start date " + startDate + "and end date " + endDate + " and aggregated by " + aggregatedBy + ".\n\nPress any key to continue.");
+ Console.ReadKey();
+
+ aggregatedBy = "month";
+ response = client.GlobalStats.Get(startDate, endDate, aggregatedBy).Result;
+ Console.WriteLine(response.StatusCode);
+ Console.WriteLine(response.Content.ReadAsStringAsync().Result);
+ Console.WriteLine("Display global email stats, with start date " + startDate + "and end date " + endDate + " and aggregated by " + aggregatedBy + ".\n\nPress any key to continue.");
Console.ReadKey();
}
diff --git a/SendGrid/SendGrid/Client.cs b/SendGrid/SendGrid/Client.cs
index 31d49b5..6e86be1 100644
--- a/SendGrid/SendGrid/Client.cs
+++ b/SendGrid/SendGrid/Client.cs
@@ -17,6 +17,7 @@ namespace SendGrid
public UnsubscribeGroups UnsubscribeGroups;
public Suppressions Suppressions;
public GlobalSuppressions GlobalSuppressions;
+ public GlobalStats GlobalStats;
public string Version;
private Uri _baseUri;
private const string MediaType = "application/json";
@@ -39,6 +40,7 @@ namespace SendGrid
UnsubscribeGroups = new UnsubscribeGroups(this);
Suppressions = new Suppressions(this);
GlobalSuppressions = new GlobalSuppressions(this);
+ GlobalStats = new GlobalStats(this);
}
/// <summary>
diff --git a/SendGrid/SendGrid/Properties/AssemblyInfo.cs b/SendGrid/SendGrid/Properties/AssemblyInfo.cs
index 99eeb46..9bf8337 100644
--- a/SendGrid/SendGrid/Properties/AssemblyInfo.cs
+++ b/SendGrid/SendGrid/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("6.3.3")]
-[assembly: AssemblyFileVersion("6.3.3")]
+[assembly: AssemblyVersion("6.3.4")]
+[assembly: AssemblyFileVersion("6.3.4ss")]
diff --git a/SendGrid/SendGrid/Resources/GlobalStats.cs b/SendGrid/SendGrid/Resources/GlobalStats.cs
new file mode 100644
index 0000000..73f0b33
--- /dev/null
+++ b/SendGrid/SendGrid/Resources/GlobalStats.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Net.Http;
+using System.Threading.Tasks;
+using System.Web;
+
+namespace SendGrid.Resources
+{
+ public class GlobalStats
+ {
+ private string _endpoint;
+ private Client _client;
+
+ /// <summary>
+ /// Constructs the SendGrid GlobalStats object.
+ /// See https://sendgrid.com/docs/API_Reference/Web_API_v3/Stats/global.html
+ /// </summary>
+ /// <param name="client">SendGrid Web API v3 client</param>
+ /// <param name="endpoint">Resource endpoint, do not prepend slash</param>
+ public GlobalStats(Client client, string endpoint = "v3/stats")
+ {
+ _endpoint = endpoint;
+ _client = client;
+ }
+
+ /// <summary>
+ /// https://sendgrid.com/docs/API_Reference/Web_API_v3/Stats/global.html
+ /// </summary>
+ /// <param name="startDate">The starting date of the statistics to retrieve, formatted as YYYY-MM-DD.</param>
+ /// <param name="endDate">The end date of the statistics to retrieve, formatted as YYYY-MM-DD. Defaults to today.</param>
+ /// <param name="aggregatedBy">How to group the statistics, must be day|week|month</param>
+ /// <returns>https://sendgrid.com/docs/API_Reference/Web_API_v3/Stats/global.html</returns>
+ public async Task<HttpResponseMessage> Get(string startDate, string endDate = null, string aggregatedBy = null)
+ {
+ var query = HttpUtility.ParseQueryString(string.Empty);
+ query["start_date"] = startDate;
+ if (endDate != null)
+ {
+ query["end_date"] = endDate;
+ }
+ if (aggregatedBy != null)
+ {
+ query["aggregated_by"] = aggregatedBy;
+ }
+ return await _client.Get(_endpoint + "?" + query);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/SendGrid/SendGrid/SendGrid.csproj b/SendGrid/SendGrid/SendGrid.csproj
index 1ba1fb7..2f5bcf6 100644
--- a/SendGrid/SendGrid/SendGrid.csproj
+++ b/SendGrid/SendGrid/SendGrid.csproj
@@ -53,6 +53,7 @@
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
<Private>True</Private>
</Reference>
+ <Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
@@ -65,6 +66,7 @@
<Compile Include="Client.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\GlobalSuppressions.cs" />
+ <Compile Include="Resources\GlobalStats.cs" />
<Compile Include="Resources\Suppressions.cs" />
<Compile Include="Resources\UnsubscribeGroups.cs" />
<Compile Include="Resources\APIKeys.cs" />
diff --git a/SendGrid/SendGridMail/Properties/AssemblyInfo.cs b/SendGrid/SendGridMail/Properties/AssemblyInfo.cs
index 471a7d7..540b5e9 100644
--- a/SendGrid/SendGridMail/Properties/AssemblyInfo.cs
+++ b/SendGrid/SendGridMail/Properties/AssemblyInfo.cs
@@ -58,5 +58,5 @@ using System.Runtime.InteropServices;
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("6.3.3")]
-[assembly: AssemblyFileVersion("6.3.3")] \ No newline at end of file
+[assembly: AssemblyVersion("6.3.4")]
+[assembly: AssemblyFileVersion("6.3.4")] \ No newline at end of file
diff --git a/SendGrid/UnitTest/UnitTest.cs b/SendGrid/UnitTest/UnitTest.cs
index 4575e3e..11f55cd 100644
--- a/SendGrid/UnitTest/UnitTest.cs
+++ b/SendGrid/UnitTest/UnitTest.cs
@@ -211,7 +211,7 @@ namespace UnitTest
public Client client = new Client(_apiKey, _baseUri);
[Test]
- public void SuppressionsIntegrationTest()
+ public void GlobalSuppressionsIntegrationTest()
{
string email = "example3@example.com";
@@ -246,6 +246,37 @@ namespace UnitTest
HttpResponseMessage response = client.GlobalSuppressions.Delete(email).Result;
Assert.AreEqual(HttpStatusCode.NoContent, response.StatusCode);
}
+ }
+
+ [TestFixture]
+ public class GlobalStats
+ {
+ static string _baseUri = "https://api.sendgrid.com/";
+ static string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY");
+ public Client client = new Client(_apiKey, _baseUri);
+
+ [Test]
+ public void GlobalStatsIntegrationTest()
+ {
+ string startDate = "2015-11-01";
+ string endDate = "2015-12-01";
+ string aggregatedBy = "day";
+ TestGet(startDate);
+ TestGet(startDate, endDate);
+ TestGet(startDate, endDate, aggregatedBy);
+ aggregatedBy = "week";
+ TestGet(startDate, endDate, aggregatedBy);
+ aggregatedBy = "month";
+ TestGet(startDate, endDate, aggregatedBy);
+ }
+ private void TestGet(string startDate, string endDate=null, string aggregatedBy=null)
+ {
+ HttpResponseMessage response = client.GlobalStats.Get(startDate, endDate, aggregatedBy).Result;
+ Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
+ string rawString = response.Content.ReadAsStringAsync().Result;
+ dynamic jsonObject = JsonConvert.DeserializeObject(rawString);
+ Assert.IsNotNull(jsonObject);
+ }
}
}