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: