Skip to content

Commit 44ab03d

Browse files
authored
Merge pull request #43 from muleyprasad/master
When BatchIntervalInMiliseconds is not set Httpclient Timeout throws error
2 parents b31322c + 190fd82 commit 44ab03d

File tree

4 files changed

+117
-46
lines changed

4 files changed

+117
-46
lines changed

src/SplunkLogger/Configurations/HECConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public enum ChannelIdOption
1616
/// <summary>
1717
/// Gets or sets the batch interval in miliseconds.
1818
/// </summary>
19-
public uint BatchIntervalInMiliseconds { get; set; }
19+
public uint BatchIntervalInMilliseconds { get; set; }
2020

2121
/// <summary>
2222
/// Gets or sets the batch size count.
Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,62 @@
11
using System;
2-
using System.Net.Http;
3-
using System.Net.Http.Headers;
4-
using Microsoft.Extensions.Logging;
5-
using Splunk.Configurations;
6-
7-
namespace Splunk.Providers
8-
{
9-
/// <summary>
10-
/// Splunk HECB ase provider.
11-
/// </summary>
12-
public abstract class SplunkHECBaseProvider : ILoggerProvider
2+
using System.Net.Http;
3+
using System.Net.Http.Headers;
4+
using Microsoft.Extensions.Logging;
5+
using Splunk.Configurations;
6+
7+
namespace Splunk.Providers
8+
{
9+
/// <summary>
10+
/// Splunk HECB ase provider.
11+
/// </summary>
12+
public abstract class SplunkHECBaseProvider : ILoggerProvider
1313
{
1414
protected HttpClient httpClient;
15-
16-
/// <summary>
17-
/// Get a <see cref="T:Splunk.Loggers.HECJsonLogger"/> instance to the category name provided.
18-
/// </summary>
19-
/// <returns><see cref="T:Splunk.Loggers.HECJsonLogger"/> instance.</returns>
20-
/// <param name="categoryName">Category name.</param>
21-
public abstract ILogger CreateLogger(string categoryName);
22-
23-
/// <summary>
24-
/// Releases all resource used by the <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> object.
25-
/// </summary>
26-
/// <remarks>Call <see cref="Dispose"/> when you are finished using the
27-
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/>. The <see cref="Dispose"/> method leaves the
28-
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> in an unusable state. After calling
29-
/// <see cref="Dispose"/>, you must release all references to the
30-
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> so the garbage collector can reclaim the memory
31-
/// that the <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> was occupying.</remarks>
15+
16+
/// <summary>
17+
/// Get a <see cref="T:Splunk.Loggers.HECJsonLogger"/> instance to the category name provided.
18+
/// </summary>
19+
/// <returns><see cref="T:Splunk.Loggers.HECJsonLogger"/> instance.</returns>
20+
/// <param name="categoryName">Category name.</param>
21+
public abstract ILogger CreateLogger(string categoryName);
22+
23+
/// <summary>
24+
/// Releases all resource used by the <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> object.
25+
/// </summary>
26+
/// <remarks>Call <see cref="Dispose"/> when you are finished using the
27+
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/>. The <see cref="Dispose"/> method leaves the
28+
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> in an unusable state. After calling
29+
/// <see cref="Dispose"/>, you must release all references to the
30+
/// <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> so the garbage collector can reclaim the memory
31+
/// that the <see cref="T:Splunk.Providers.SplunkHECJsonLoggerProvider"/> was occupying.</remarks>
3232
public abstract void Dispose();
3333

3434
/// <summary>
3535
/// Create a <see cref="T:Splunk.Loggers.HECJsonLogger"/> instance to the category name provided.
3636
/// </summary>
3737
/// <returns>The logger instance.</returns>
3838
/// <param name="categoryName">Category name.</param>
39-
public abstract ILogger CreateLoggerInstance(string categoryName);
39+
public abstract ILogger CreateLoggerInstance(string categoryName);
4040

4141
protected void SetupHttpClient(SplunkLoggerConfiguration configuration, string endPointCustomization)
4242
{
43-
httpClient = new HttpClient
44-
{
45-
BaseAddress = GetSplunkCollectorUrl(configuration, endPointCustomization),
46-
Timeout = TimeSpan.FromMilliseconds(configuration.HecConfiguration.DefaultTimeoutInMiliseconds)
43+
httpClient = new HttpClient
44+
{
45+
BaseAddress = GetSplunkCollectorUrl(configuration, endPointCustomization)
4746
};
47+
48+
if (configuration.HecConfiguration.DefaultTimeoutInMiliseconds > 0)
49+
httpClient.Timeout = TimeSpan.FromMilliseconds(configuration.HecConfiguration.DefaultTimeoutInMiliseconds);
50+
4851
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Splunk", configuration.HecConfiguration.Token);
4952
if (configuration.HecConfiguration.ChannelIdType == HECConfiguration.ChannelIdOption.RequestHeader)
5053
httpClient.DefaultRequestHeaders.Add("x-splunk-request-channel", Guid.NewGuid().ToString());
5154
}
52-
53-
Uri GetSplunkCollectorUrl(SplunkLoggerConfiguration configuration, string endPointCustomization)
54-
{
55-
var splunkCollectorUrl = configuration.HecConfiguration.SplunkCollectorUrl;
56-
if (!splunkCollectorUrl.EndsWith("/", StringComparison.InvariantCulture))
55+
56+
Uri GetSplunkCollectorUrl(SplunkLoggerConfiguration configuration, string endPointCustomization)
57+
{
58+
var splunkCollectorUrl = configuration.HecConfiguration.SplunkCollectorUrl;
59+
if (!splunkCollectorUrl.EndsWith("/", StringComparison.InvariantCulture))
5760
splunkCollectorUrl = splunkCollectorUrl + "/";
5861

5962
if(!string.IsNullOrWhiteSpace(endPointCustomization))
@@ -68,7 +71,7 @@ Uri GetSplunkCollectorUrl(SplunkLoggerConfiguration configuration, string endPoi
6871
splunkCollectorUrl = string.Format("{0}{1}{2}", splunkCollectorUrl, splunkCollectorUrl.Contains("?") ? "&" : "?", tokenParameter);
6972
}
7073

71-
return new Uri(splunkCollectorUrl);
72-
}
73-
}
74+
return new Uri(splunkCollectorUrl);
75+
}
76+
}
7477
}

src/SplunkLogger/Providers/SplunkHECJsonLoggerProvider.cs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public SplunkHECJsonLoggerProvider(SplunkLoggerConfiguration configuration, ILog
3838

3939
SetupHttpClient(configuration, "event");
4040

41-
batchController = new BatchManager(configuration.HecConfiguration.BatchSizeCount, configuration.HecConfiguration.BatchIntervalInMiliseconds, Emit);
41+
batchController = new BatchManager(configuration.HecConfiguration.BatchSizeCount, configuration.HecConfiguration.BatchIntervalInMilliseconds, Emit);
4242
}
4343

4444
/// <summary>
@@ -87,7 +87,41 @@ public void Emit(List<object> events)
8787
httpClient.PostAsync(string.Empty, stringContent)
8888
.ContinueWith(task => {
8989
if (task.IsCompletedSuccessfully)
90-
Debug.WriteLine("Splunk HEC RAW Status: Sucess");
90+
switch (task.Result.StatusCode)
91+
{
92+
case System.Net.HttpStatusCode.OK:
93+
Debug.WriteLine("Splunk HEC JSON Status: Request completed successfully.");
94+
break;
95+
case System.Net.HttpStatusCode.Created:
96+
Debug.WriteLine("Splunk HEC JSON Status: Create request completed successfully.");
97+
break;
98+
case System.Net.HttpStatusCode.BadRequest:
99+
Debug.WriteLine("Splunk HEC JSON Status: Request error. See response body for details.");
100+
break;
101+
case System.Net.HttpStatusCode.Unauthorized:
102+
Debug.WriteLine("Splunk HEC JSON Status: Authentication failure, invalid access credentials.");
103+
break;
104+
case System.Net.HttpStatusCode.PaymentRequired:
105+
Debug.WriteLine("Splunk HEC JSON Status: In-use Splunk Enterprise license disables this feature.");
106+
break;
107+
case System.Net.HttpStatusCode.Forbidden:
108+
Debug.WriteLine("Splunk HEC JSON Status: Insufficient permission.");
109+
break;
110+
case System.Net.HttpStatusCode.NotFound:
111+
Debug.WriteLine("Splunk HEC JSON Status: Requested endpoint does not exist.");
112+
break;
113+
case System.Net.HttpStatusCode.Conflict:
114+
Debug.WriteLine("Splunk HEC JSON Status: Invalid operation for this endpoint. See response body for details.");
115+
break;
116+
case System.Net.HttpStatusCode.InternalServerError:
117+
Debug.WriteLine("Splunk HEC JSON Status: Unspecified internal server error. See response body for details.");
118+
break;
119+
case System.Net.HttpStatusCode.ServiceUnavailable:
120+
Debug.WriteLine("Splunk HEC JSON Status: Feature is disabled in configuration file.");
121+
break;
122+
default:
123+
break;
124+
}
91125
else if (task.IsCanceled)
92126
Debug.WriteLine("Splunk HEC RAW Status: Canceled");
93127
else

src/SplunkLogger/Providers/SplunkHECRawLoggerProvider.cs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public SplunkHECRawLoggerProvider(SplunkLoggerConfiguration configuration, ILogg
3535

3636
SetupHttpClient(configuration, "raw");
3737

38-
batchManager = new BatchManager(configuration.HecConfiguration.BatchSizeCount, configuration.HecConfiguration.BatchIntervalInMiliseconds, Emit);
38+
batchManager = new BatchManager(configuration.HecConfiguration.BatchSizeCount, configuration.HecConfiguration.BatchIntervalInMilliseconds, Emit);
3939
}
4040

4141
/// <summary>
@@ -83,7 +83,41 @@ public void Emit(List<object> events)
8383
httpClient.PostAsync(string.Empty, stringContent)
8484
.ContinueWith(task => {
8585
if (task.IsCompletedSuccessfully)
86-
Debug.WriteLine("Splunk HEC RAW Status: Sucess");
86+
switch (task.Result.StatusCode)
87+
{
88+
case System.Net.HttpStatusCode.OK:
89+
Debug.WriteLine("Splunk HEC RAW Status: Request completed successfully.");
90+
break;
91+
case System.Net.HttpStatusCode.Created:
92+
Debug.WriteLine("Splunk HEC RAW Status: Create request completed successfully.");
93+
break;
94+
case System.Net.HttpStatusCode.BadRequest:
95+
Debug.WriteLine("Splunk HEC RAW Status: Request error. See response body for details.");
96+
break;
97+
case System.Net.HttpStatusCode.Unauthorized:
98+
Debug.WriteLine("Splunk HEC RAW Status: Authentication failure, invalid access credentials.");
99+
break;
100+
case System.Net.HttpStatusCode.PaymentRequired:
101+
Debug.WriteLine("Splunk HEC RAW Status: In-use Splunk Enterprise license disables this feature.");
102+
break;
103+
case System.Net.HttpStatusCode.Forbidden:
104+
Debug.WriteLine("Splunk HEC RAW Status: Insufficient permission.");
105+
break;
106+
case System.Net.HttpStatusCode.NotFound:
107+
Debug.WriteLine("Splunk HEC RAW Status: Requested endpoint does not exist.");
108+
break;
109+
case System.Net.HttpStatusCode.Conflict:
110+
Debug.WriteLine("Splunk HEC RAW Status: Invalid operation for this endpoint. See response body for details.");
111+
break;
112+
case System.Net.HttpStatusCode.InternalServerError:
113+
Debug.WriteLine("Splunk HEC RAW Status: Unspecified internal server error. See response body for details.");
114+
break;
115+
case System.Net.HttpStatusCode.ServiceUnavailable:
116+
Debug.WriteLine("Splunk HEC RAW Status: Feature is disabled in configuration file.");
117+
break;
118+
default:
119+
break;
120+
}
87121
else if (task.IsCanceled)
88122
Debug.WriteLine("Splunk HEC RAW Status: Canceled");
89123
else

0 commit comments

Comments
 (0)