protected virtual async Task OnInitiativeWorkItemCreated(WorkOrderCreatedEventArgs args, CancellationToken token)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            var idea  = args.Initiative;
            var owner = args.Owner;

            if (idea == null)
            {
                throw new ArgumentException("Initiative cannot be null");
            }
            if (owner == null)
            {
                throw new ArgumentNullException("Owner cannot be null");
            }
            var email = owner.GetEmail();

            if (string.IsNullOrWhiteSpace(email))
            {
                throw new ArgumentOutOfRangeException("Initiative Owner Email cannot be empty");
            }

            var watch = new Stopwatch();

            watch.Start();

            using (LogContext.PushProperty("InitiativeId", idea.Id))
            {
                _logger.Information("Received message that a new initiative has been created with id {InitiativeId}");

                var loggerResponse = await LogNewInitiative(idea, owner);
                await SendInitiativeLoggedMessage(idea, owner, loggerResponse, args.SkipEmailNotification);

                watch.Stop();
                _logger.Information("Logger processed message in {ElapsedMilliseconds}ms", watch.ElapsedMilliseconds);
            }
        }
        protected virtual async Task OnInitiativeWorkItemCreated(WorkOrderCreatedEventArgs args, CancellationToken token)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            if (args.Initiative == null)
            {
                throw new ArgumentException("Initiative cannot be null");
            }
            if (string.IsNullOrWhiteSpace(args.WorkOrderId))
            {
                throw new ArgumentException("WorkOrderId cannot be empty");
            }

            using (LogContext.PushProperty("InitiativeId", args.Initiative.Id))
            {
                _logger.Information("Remedy has created a work item for initiative {InitiativeId} with remedy id {WorkOrderId}", args.Initiative.Id, args.WorkOrderId);

                try
                {
                    args.Initiative.SetWorkOrderId(args.WorkOrderId);

                    args.Initiative.UpdateStatus(InitiativeStatus.Submit, args.EtaUtc);

                    _logger.Information("Saving Initiative {InitiativeId} to database", args.Initiative.Id);
                    await _ideaRepository.UpdateInitiativeAsync(args.Initiative);
                }
                catch (Exception err)
                {
                    _logger.Error(err, "Unable to set work item id '{WorkOrderId}' to initiative id {InitiativeId}. Will retry later. Error was: {ErrorMessage}",
                                  args.WorkOrderId, args.Initiative.Id, err.Message);
                    throw;
                }
            }
        }
Exemple #3
0
 public Task SendInitiativeWorkOrderCreatedAsync(WorkOrderCreatedEventArgs args)
 {
     // do nothing
     return(Task.CompletedTask);
 }