From d5b368e3a5854ad84157f42e8e3eaba012dd5239 Mon Sep 17 00:00:00 2001 From: Leefrost Date: Sat, 18 Mar 2023 21:46:15 +0200 Subject: [PATCH 1/5] Bare samples --- HttpClient.Cache.sln | 9 ++++++ samples/ConsoleApp/ConsoleApp.csproj | 14 ++++++++++ samples/ConsoleApp/Program.cs | 41 ++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 samples/ConsoleApp/ConsoleApp.csproj create mode 100644 samples/ConsoleApp/Program.cs diff --git a/HttpClient.Cache.sln b/HttpClient.Cache.sln index 2fbc22c..f87b7bc 100644 --- a/HttpClient.Cache.sln +++ b/HttpClient.Cache.sln @@ -6,6 +6,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{FCC751F0 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClient.Cache.Tests", "tests\HttpClient.Cache.Tests\HttpClient.Cache.Tests.csproj", "{AF0D7A5D-1242-44B1-9584-7D50FF6612DA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{88E718FE-AE0C-4649-A7BC-9D038FC6207A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp", "samples\ConsoleApp\ConsoleApp.csproj", "{2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -20,8 +24,13 @@ Global {AF0D7A5D-1242-44B1-9584-7D50FF6612DA}.Debug|Any CPU.Build.0 = Debug|Any CPU {AF0D7A5D-1242-44B1-9584-7D50FF6612DA}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF0D7A5D-1242-44B1-9584-7D50FF6612DA}.Release|Any CPU.Build.0 = Release|Any CPU + {2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {AF0D7A5D-1242-44B1-9584-7D50FF6612DA} = {FCC751F0-5E00-41CC-BB68-5870C901A75F} + {2F33C2DF-0CA0-418B-9D06-8CDAA2DF41BC} = {88E718FE-AE0C-4649-A7BC-9D038FC6207A} EndGlobalSection EndGlobal diff --git a/samples/ConsoleApp/ConsoleApp.csproj b/samples/ConsoleApp/ConsoleApp.csproj new file mode 100644 index 0000000..5fd66f2 --- /dev/null +++ b/samples/ConsoleApp/ConsoleApp.csproj @@ -0,0 +1,14 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + diff --git a/samples/ConsoleApp/Program.cs b/samples/ConsoleApp/Program.cs new file mode 100644 index 0000000..2cbf9ce --- /dev/null +++ b/samples/ConsoleApp/Program.cs @@ -0,0 +1,41 @@ +// See https://aka.ms/new-console-template for more information + +using System.Diagnostics; +using System.Net; +using HttpClient.Cache.InMemory; + +const string url = "http://worldclockapi.com/api/json/utc/now"; + +var cacheExpiration = new Dictionary() +{ + {HttpStatusCode.OK, TimeSpan.FromSeconds(60)}, + {HttpStatusCode.BadRequest, TimeSpan.FromSeconds(10)}, + {HttpStatusCode.InternalServerError, TimeSpan.FromSeconds(5)} +}; + + +var httpClientHandler = new HttpClientHandler(); +var inMemoryResponseCache = new InMemoryCacheHandler(httpClientHandler, cacheExpiration); +using (var client = new System.Net.Http.HttpClient(inMemoryResponseCache)) +{ + for (int i = 0; i < 5; i++) + { + Console.Write($"Try: {i}: {url}"); + var stopwatch = Stopwatch.StartNew(); + + var result = client.GetAsync(url).GetAwaiter().GetResult(); + + var content = result.Content.ReadAsStringAsync().GetAwaiter().GetResult(); + Console.WriteLine($"Done in: {stopwatch.ElapsedMilliseconds} ms"); + + Thread.Sleep(1000); + } +} + +Console.WriteLine("Stats:"); + +var stats = inMemoryResponseCache.StatsProvider.GetReport(); +Console.WriteLine($"Total: {stats.Total.TotalRequests}"); +Console.WriteLine($"-> Hit: {stats.Total.CacheHit} [{stats.Total.TotalHitsPercent}]"); +Console.WriteLine($"-> Miss: {stats.Total.CacheMiss} [{stats.Total.TotalMissPercent}]"); +Console.ReadLine(); From 544579b0a8cfc92a7157e4ca9b444df0fa35c6a4 Mon Sep 17 00:00:00 2001 From: Leefrost Date: Sat, 18 Mar 2023 21:49:03 +0200 Subject: [PATCH 2/5] Cleanup samples --- samples/ConsoleApp/Program.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/samples/ConsoleApp/Program.cs b/samples/ConsoleApp/Program.cs index 2cbf9ce..221a9ab 100644 --- a/samples/ConsoleApp/Program.cs +++ b/samples/ConsoleApp/Program.cs @@ -1,6 +1,4 @@ -// See https://aka.ms/new-console-template for more information - -using System.Diagnostics; +using System.Diagnostics; using System.Net; using HttpClient.Cache.InMemory; From f759c34f94599523cd212fe7b788f48e973d4094 Mon Sep 17 00:00:00 2001 From: Leefrost Date: Sun, 19 Mar 2023 20:52:06 +0200 Subject: [PATCH 3/5] Update samples --- samples/ConsoleApp/Program.cs | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/samples/ConsoleApp/Program.cs b/samples/ConsoleApp/Program.cs index 221a9ab..b2e8e92 100644 --- a/samples/ConsoleApp/Program.cs +++ b/samples/ConsoleApp/Program.cs @@ -4,36 +4,35 @@ const string url = "http://worldclockapi.com/api/json/utc/now"; -var cacheExpiration = new Dictionary() +//Set the cache time for each required status +var cacheExpiration = new Dictionary { {HttpStatusCode.OK, TimeSpan.FromSeconds(60)}, {HttpStatusCode.BadRequest, TimeSpan.FromSeconds(10)}, {HttpStatusCode.InternalServerError, TimeSpan.FromSeconds(5)} }; - -var httpClientHandler = new HttpClientHandler(); -var inMemoryResponseCache = new InMemoryCacheHandler(httpClientHandler, cacheExpiration); -using (var client = new System.Net.Http.HttpClient(inMemoryResponseCache)) +//Client calls API and caches it +//Report will show 1 Miss (initial) and 4 Hits. +var innerHandler = new HttpClientHandler(); +var cacheHandler = new InMemoryCacheHandler(innerHandler, cacheExpiration); +using (var httpClient = new System.Net.Http.HttpClient(cacheHandler)) { - for (int i = 0; i < 5; i++) + for (int i = 1; i <= 5; ++i) { Console.Write($"Try: {i}: {url}"); - var stopwatch = Stopwatch.StartNew(); - var result = client.GetAsync(url).GetAwaiter().GetResult(); - - var content = result.Content.ReadAsStringAsync().GetAwaiter().GetResult(); - Console.WriteLine($"Done in: {stopwatch.ElapsedMilliseconds} ms"); + var stopwatch = Stopwatch.StartNew(); + await httpClient.GetAsync(url); + stopwatch.Stop(); - Thread.Sleep(1000); + Console.WriteLine($"Done in: {stopwatch.ElapsedMilliseconds} ms"); + await Task.Delay(TimeSpan.FromSeconds(1)); } } -Console.WriteLine("Stats:"); - -var stats = inMemoryResponseCache.StatsProvider.GetReport(); -Console.WriteLine($"Total: {stats.Total.TotalRequests}"); +var stats = cacheHandler.StatsProvider.GetReport(); +Console.WriteLine($"Cache stats - total requests: {stats.Total.TotalRequests}"); Console.WriteLine($"-> Hit: {stats.Total.CacheHit} [{stats.Total.TotalHitsPercent}]"); Console.WriteLine($"-> Miss: {stats.Total.CacheMiss} [{stats.Total.TotalMissPercent}]"); Console.ReadLine(); From d10878d7d5e1bd0c9a73dd5d1c40466e4ef440db Mon Sep 17 00:00:00 2001 From: Leefrost Date: Sun, 19 Mar 2023 21:05:27 +0200 Subject: [PATCH 4/5] Small changes --- samples/ConsoleApp/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/ConsoleApp/Program.cs b/samples/ConsoleApp/Program.cs index b2e8e92..125f4b2 100644 --- a/samples/ConsoleApp/Program.cs +++ b/samples/ConsoleApp/Program.cs @@ -33,6 +33,6 @@ var stats = cacheHandler.StatsProvider.GetReport(); Console.WriteLine($"Cache stats - total requests: {stats.Total.TotalRequests}"); -Console.WriteLine($"-> Hit: {stats.Total.CacheHit} [{stats.Total.TotalHitsPercent}]"); -Console.WriteLine($"-> Miss: {stats.Total.CacheMiss} [{stats.Total.TotalMissPercent}]"); +Console.WriteLine($"--> Hit: {stats.Total.CacheHit} [{stats.Total.TotalHitsPercent}]"); +Console.WriteLine($"--> Miss: {stats.Total.CacheMiss} [{stats.Total.TotalMissPercent}]"); Console.ReadLine(); From 151c61954dc94023a6ee7302be0340d4cf53bc11 Mon Sep 17 00:00:00 2001 From: Leefrost Date: Mon, 20 Mar 2023 21:13:11 +0200 Subject: [PATCH 5/5] Add status code to samples --- samples/ConsoleApp/Program.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/ConsoleApp/Program.cs b/samples/ConsoleApp/Program.cs index 125f4b2..bc824fb 100644 --- a/samples/ConsoleApp/Program.cs +++ b/samples/ConsoleApp/Program.cs @@ -20,10 +20,11 @@ { for (int i = 1; i <= 5; ++i) { - Console.Write($"Try: {i}: {url}"); + Console.Write($"Try: {i}: {url} "); var stopwatch = Stopwatch.StartNew(); - await httpClient.GetAsync(url); + var result = await httpClient.GetAsync(url); + Console.Write($" --> {result.StatusCode} "); stopwatch.Stop(); Console.WriteLine($"Done in: {stopwatch.ElapsedMilliseconds} ms");