Skip to content

Commit d57723e

Browse files
committed
Added the ability to pass the current configuration version when getting settings
This allows the server to return a not modified status code thus saving bandwidth.
1 parent bb61a0f commit d57723e

File tree

8 files changed

+31
-17
lines changed

8 files changed

+31
-17
lines changed

Source/Extras/Submission/SubmissionClient.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ public SubmissionResponse PostUserDescription(string referenceId, UserDescriptio
6767
return new SubmissionResponse((int)response.StatusCode, GetResponseMessage(response));
6868
}
6969

70-
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
70+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer) {
7171
HttpWebResponse response;
7272
try {
73-
var request = CreateHttpWebRequest(config, String.Format("{0}/projects/config", config.GetServiceEndPoint()));
73+
var request = CreateHttpWebRequest(config, String.Format("{0}/projects/config?v={1}", config.GetServiceEndPoint(), version));
7474
response = request.GetJsonAsync().Result as HttpWebResponse;
7575
} catch (Exception ex) {
7676
var message = String.Concat("Unable to retrieve configuration settings. Exception: ", ex.GetMessage());
7777
return new SettingsResponse(false, message: message);
7878
}
7979

80+
if (response != null && response.StatusCode == HttpStatusCode.NotModified)
81+
return new SettingsResponse(false, message: "Settings have not been modified.");
82+
8083
if (response == null || response.StatusCode != HttpStatusCode.OK)
8184
return new SettingsResponse(false, message: String.Concat("Unable to retrieve configuration settings: ", GetResponseMessage(response)));
8285

Source/Samples/SampleConsole/Submission/InMemorySubmissionClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public SubmissionResponse PostUserDescription(string referenceId, UserDescriptio
2626
return new SubmissionResponse(200);
2727
}
2828

29-
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
29+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer) {
3030
return new SettingsResponse(true);
3131
}
3232

Source/Shared/Configuration/SettingsManager.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,28 @@ private static SettingsDictionary GetSavedServerSettings(ExceptionlessConfigurat
4141
return new SettingsDictionary();
4242
}
4343

44-
public static void CheckVersion(int version, ExceptionlessConfiguration config) {
44+
public static int GetVersion(ExceptionlessConfiguration config) {
4545
if (config == null)
46-
return;
46+
return 0;
4747

4848
if (String.IsNullOrEmpty(config.ApiKey) || String.Equals(config.ApiKey, "API_KEY_HERE", StringComparison.OrdinalIgnoreCase)) {
49-
config.Resolver.GetLog().Error(typeof(SettingsManager), "Unable to check version: ApiKey is not set.");
50-
return;
49+
config.Resolver.GetLog().Error(typeof(SettingsManager), "Unable to get version: ApiKey is not set.");
50+
return 0;
5151
}
5252

5353
var persistedClientData = config.Resolver.Resolve<PersistedDictionary>();
54-
if (version <= persistedClientData.GetInt32(String.Concat(config.GetQueueName(), "-ServerConfigVersion"), -1))
54+
return persistedClientData.GetInt32(String.Concat(config.GetQueueName(), "-ServerConfigVersion"), 0);
55+
}
56+
57+
public static void CheckVersion(int version, ExceptionlessConfiguration config) {
58+
int currentVersion = GetVersion(config);
59+
if (version <= currentVersion)
5560
return;
5661

57-
UpdateSettings(config);
62+
UpdateSettings(config, currentVersion);
5863
}
5964

60-
public static void UpdateSettings(ExceptionlessConfiguration config) {
65+
public static void UpdateSettings(ExceptionlessConfiguration config, int? version = null) {
6166
if (config == null)
6267
return;
6368

@@ -66,10 +71,13 @@ public static void UpdateSettings(ExceptionlessConfiguration config) {
6671
return;
6772
}
6873

74+
if (!version.HasValue || version < 0)
75+
version = GetVersion(config);
76+
6977
var serializer = config.Resolver.GetJsonSerializer();
7078
var client = config.Resolver.GetSubmissionClient();
7179

72-
var response = client.GetSettings(config, serializer);
80+
var response = client.GetSettings(config, version.Value, serializer);
7381
if (!response.Success || response.Settings == null)
7482
return;
7583

Source/Shared/Submission/DefaultSubmissionClient.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,19 @@ public SubmissionResponse PostUserDescription(string referenceId, UserDescriptio
5959
return new SubmissionResponse((int)response.StatusCode, GetResponseMessage(response));
6060
}
6161

62-
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
62+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer) {
6363
HttpWebResponse response;
6464
try {
65-
var request = CreateHttpWebRequest(config, String.Format("{0}/projects/config", config.GetServiceEndPoint()));
65+
var request = CreateHttpWebRequest(config, String.Format("{0}/projects/config?v={1}", config.GetServiceEndPoint(), version));
6666
response = request.GetJsonAsync().Result as HttpWebResponse;
6767
} catch (Exception ex) {
6868
var message = String.Concat("Unable to retrieve configuration settings. Exception: ", ex.GetMessage());
6969
return new SettingsResponse(false, message: message);
7070
}
7171

72+
if (response != null && response.StatusCode == HttpStatusCode.NotModified)
73+
return new SettingsResponse(false, message: "Settings have not been modified.");
74+
7275
if (response == null || response.StatusCode != HttpStatusCode.OK)
7376
return new SettingsResponse(false, message: String.Concat("Unable to retrieve configuration settings: ", GetResponseMessage(response)));
7477

Source/Shared/Submission/ISubmissionClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Exceptionless.Submission {
77
public interface ISubmissionClient {
88
SubmissionResponse PostEvents(IEnumerable<Event> events, ExceptionlessConfiguration config, IJsonSerializer serializer);
99
SubmissionResponse PostUserDescription(string referenceId, UserDescription description, ExceptionlessConfiguration config, IJsonSerializer serializer);
10-
SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer);
10+
SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer);
1111
void SendHeartbeat(string sessionIdOrUserId, bool closeSession, ExceptionlessConfiguration config);
1212
}
1313
}

Source/Tests/Configuration/ConfigurationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public void CanUpdateSettingsFromServer() {
7070
submissionClient.Setup(m => m.PostEvents(It.IsAny<IEnumerable<Event>>(), config, It.IsAny<IJsonSerializer>()))
7171
.Callback(() => SettingsManager.CheckVersion(1, config))
7272
.Returns(() => new SubmissionResponse(202, "Accepted"));
73-
submissionClient.Setup(m => m.GetSettings(config, It.IsAny<IJsonSerializer>()))
73+
submissionClient.Setup(m => m.GetSettings(config, 0, It.IsAny<IJsonSerializer>()))
7474
.Returns(() => new SettingsResponse(true, new SettingsDictionary { { "Test", "Test" }, { "LocalSettingToOverride", "2" } }, 1));
7575

7676
config.Resolver.Register<ISubmissionClient>(submissionClient.Object);

Source/Tests/ExceptionlessClientTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public SubmissionResponse PostUserDescription(string referenceId, UserDescriptio
104104
throw new NotImplementedException();
105105
}
106106

107-
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
107+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer) {
108108
throw new NotImplementedException();
109109
}
110110

Source/Tests/Utility/InMemorySubmissionClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public SubmissionResponse PostUserDescription(string referenceId, UserDescriptio
3737
return new SubmissionResponse(200, "OK");
3838
}
3939

40-
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
40+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, int version, IJsonSerializer serializer) {
4141
return new SettingsResponse(true);
4242
}
4343

0 commit comments

Comments
 (0)