/// <summary> /// This method is called by pipeline for each available input item (a batch of events) /// </summary> /// <param name="batch">The input item (a batch of events).</param> protected override void OnNextInputItem(TitleEventBatch batch) { // Send a batch and wait for result var writeEventsRequest = new WriteEventsRequest { Events = batch.Events.Cast <PlayFabEmitEventRequest>().Select(x => x.Event.EventContents).ToList() }; if (!oneDSEventsApi.IsOneDSAuthenticated) { var authResult = OneDSEventsAPI.GetTelemetryIngestionConfigAsync(new TelemetryIngestionConfigRequest()); try { authResult.Wait(cts.Token); var response = authResult.Result.Result; if (response != null) { oneDSEventsApi.SetCredentials("o:" + response.TenantId, response.IngestionKey, response.TelemetryJwtToken, response.TelemetryJwtHeaderKey, response.TelemetryJwtHeaderPrefix); } else { throw new Exception($"Failed to get OneDS authentication token from PlayFab service"); } } catch (Exception e) { // Cancel result promises that will never be fulfilled // and move on to the next batch. foreach (var request in batch.Events) { PlayFabEmitEventRequest eventRequest = (PlayFabEmitEventRequest)request; eventRequest.ResultPromise?.SetCanceled(); } logger.Error($"Exception in OnNextInputItem {e.Source} with message: {e}."); } } Task <PlayFabResult <WriteEventsResponse> > apiTask = oneDSEventsApi.WriteTelemetryEventsAsync(writeEventsRequest); try { apiTask.Wait(cts.Token); FulfillPromises(batch.Events, apiTask.Result); } catch (Exception e) { // Cancel result promises that will never be fulfilled // and move on to the next batch. foreach (var request in batch.Events) { PlayFabEmitEventRequest eventRequest = (PlayFabEmitEventRequest)request; eventRequest.ResultPromise?.SetCanceled(); } logger.Error($"Exception in OnNextInputItem {e.Source} with message: {e}. This was an unhandled exception, please contact the dev team."); } }
/// <summary> /// This method is called by pipeline for each available input item (an event) /// </summary> /// <param name="eventPacket">The input item.</param> protected override void OnNextInputItem(IPlayFabEmitEventRequest request) { PlayFabEmitEventRequest eventRequest = (PlayFabEmitEventRequest)request; if (ValidationCheck(eventRequest)) { //Determine titleId of event string titleId = eventRequest.TitleId; if (string.IsNullOrEmpty(titleId.Trim())) { logger.Error(string.Format("Event {0} has null or empty title id", eventRequest.Event.Name)); } else { this.InitNewBatch(titleId); this.batches[titleId].Add(eventRequest); // Start keeping track of batch's age when it gets // its first element if (this.batches[titleId].Count == 1) { this.stopwatch.Stop(); this.stopwatch.Start(); } if (this.batches[titleId].Count >= this.BatchSize) { this.StoreBatch(titleId); this.CreateNewBatch(titleId); // Stop keeping track of batch's age when it is complete and stored this.stopwatch.Reset(); } } } else { logger.Error(string.Format("Event {0} failed validation check and was ignored", eventRequest.Event.Name)); } }