A lightweight C# client for New Relic Insights
- Upload New Relic Insights events on-demand
- Upload in batches, as a scheduled task
- Minimal CPU usage (1 thread)
- Proxy-aware
Upload a Single Event
Create the Event
Create a class that implements NewRelicInsightsEvent:
public class CustomNewRelicInsightsEvent : NewRelicInsightsEvent { [JilDirective(Name = "name")] public string Name { get; set; } [JilDirective(Name = "count")] public int Count { get; set; } [JilDirective(Name = "unixTimeStamp")] public int UnixTimeStamp => (int) DateTime.UtcNow .Subtract(new DateTime(1970, 1, 1)) .TotalSeconds; /// /// EventType is the New Relic Insights Event Grouping. It determines the /// database to which the event will persist. /// /// /// /// must be serialised /// in Camel case, in order to be correctly interpreted by New Relic /// Insights. /// /// /// Apply the following attribute to the /// /// property in your implementation: /// /// /// [JilDirective(Name = "eventType")] /// /// [JilDirective(Name = "eventType")] public string EventType { get; set; } }
Note: NewRelic.NET leverages Jil for serialisation. Though JilDirective attributes are not required for custom properties, the EventType property requires the specified JilDirective.
Initialise New Relic Metadata
NewRelicInsightsClient.Instance.NewRelicInsightsMetadata.AccountID = "{New Relic Account ID}"; NewRelicInsightsClient.Instance.NewRelicInsightsMetadata.APIKey = "{New Relic API key}"; NewRelicInsightsClient.Instance.NewRelicInsightsMetadata.URI = new Uri("https://insights-collector.newrelic.com/v1/accounts");
Upload the Event
var customNewRelicInsightsEvent = new CustomNewRelicInsightsEvent { Name = "TEST", Count = id, EventType = "Test" };
Synchronously
NewRelicInsightsClient.Instance.UploadEvents( new NewRelicInsightsEvent[] { customNewRelicInsightsEvent }, new HttpClientFactory());
Asynchronously
NewRelicInsightsClient.Instance.UploadEventsAsync( new NewRelicInsightsEvent[] { customNewRelicInsightsEvent }, new HttpClientFactory());
Upload Events in Batches
Start the Event Cache
if (!NewRelicInsightsClient.Instance.HasStarted) { NewRelicInsightsClient.Instance.Initialise(); }
Add Events to the Cache
NewRelicInsightsClient.Instance .AddNewRelicInsightEvent(customNewRelicInsightsEvent);
Event Upload Frequency
Batch-upload occurs every minute, by default, unless a custom frequency is specified. The following example sets the upload-frequency to 10 minutes:
NewRelicInsightsClient.Instance.RecurringTaskInterval = 10;
Proxy Server
The following example indicates that a proxy should be leveraged when invoking HTTP requests to New Relic:
NewRelicInsightsClient.Instance.NewRelicInsightsMetadata .UseWebProxy = true; NewRelicInsightsClient.Instance.NewRelicInsightsMetadata .WebProxy = new WebProxy(“127.0.0.1:8080”);
Custom HTTP Timeout
Outbound HTTP requests to NewRelic are restricted to a specific timeout (5 seconds) as follows:
NewRelicInsightsClient.Instance.NewRelicInsightsMetadata .UseNonDefaultTimeout = true; NewRelicInsightsClient.Instance.NewRelicInsightsMetadata .NonDefaultTimeout = new TimeSpan(0,0,5);
Otherwise, the default C# HttpClient-timeout applies.
Restricting Batch Upload Size
The default batch-upload size is 1,000 events. That is, a batch consisting of no more than 1,000 events will be uploaded upon each cache upload-cycle. The following example indicates that the entire cache should be emptied upon every upload-cycle:
NewRelicInsightsClient.Instance.NewRelicInsightsMetadata .CacheUploadLimit = int.MaxValue;
Connect with me: