예제 #1
0
        /// <summary>
        /// Log
        /// </summary>
        /// <param name="apiLogItem"></param>
        /// <returns></returns>
        public async Task Log(ApiLogItem apiLogItem)
        {
            try
            {
                _logger.LogInformation(apiLogItem.RequestBody);
                await _db.ApiLogItems.AddAsync(apiLogItem);

                await _db.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message + " : " + ex.StackTrace);
            }
        }
예제 #2
0
        /// <summary>
        /// Post Data
        /// </summary>
        /// <param name="postDataContent"></param>
        /// <returns></returns>
        public async Task <string> PostData(Models.PostDataContent postDataContent)
        {
            try
            {
                int TimeOutInMsSecs = _config.GetValue <int>("DefaultTimeOutInMiliSeconds");
                int JobDelay        = _config.GetValue <int>("HangFireConfig:JobDelay");
                var idData          = Guid.NewGuid().ToString();
                _context.DataToPosts.Add(new Models.DB.DataToPost()
                {
                    ID = idData, Content = postDataContent.PostData, RequestDate = DateTime.Now
                });
                await _context.SaveChangesAsync();

                List <string> listJobIds  = new List <string>();
                var           eventClient = _context.ClientEvents
                                            .Include(x => x.ClientEventWebhooks)
                                            .Include(x => x.Event)
                                            .FirstOrDefault(x => x.Event.Code == postDataContent.EventCode && x.Client.Code == postDataContent.ClientCode && x.Enable);
                if (eventClient != null)
                {
                    //Get IDS
                    var ID      = "";
                    var IDExtra = "";
                    if (!string.IsNullOrEmpty(eventClient.Event.RegexID))
                    {
                        ID = SearchContentUtil.SearchContent(postDataContent.PostData, eventClient.Event.RegexID);
                    }
                    if (!string.IsNullOrEmpty(eventClient.Event.RegexIDExtra))
                    {
                        IDExtra = SearchContentUtil.SearchContent(postDataContent.PostData, eventClient.Event.RegexIDExtra);
                    }

                    try
                    {
                        if (eventClient.ClientEventWebhooks != null && eventClient.ClientEventWebhooks.Any())
                        {
                            foreach (var item in eventClient.ClientEventWebhooks)
                            {
                                if (postDataContent.DelayMode == Models.DelayMode.Instant)
                                {
                                    listJobIds.Add(EnqueueRequest(postDataContent.ClientCode, postDataContent.EventCode, item.PostUrl, postDataContent.PostData, postDataContent.ContentType, TimeOutInMsSecs, ID, IDExtra, item.HeaderAuthorizationValue, item.ExpectedContentResult, JobDelay, postDataContent.ParentJobID));
                                }
                                else
                                {
                                    var jobId = new BackgroundJobClient().Schedule <NotificationService>(x => x.EnqueueRequest(postDataContent.ClientCode, postDataContent.EventCode, item.PostUrl, postDataContent.PostData, postDataContent.ContentType, TimeOutInMsSecs, ID, IDExtra, item.HeaderAuthorizationValue, item.ExpectedContentResult, JobDelay, postDataContent.ParentJobID), TimeSpan.FromSeconds(postDataContent.DelayValue.Value));
                                    listJobIds.Add(jobId);
                                }

                                _logger.LogInformation(postDataContent.ToString());
                            }
                            if (listJobIds.Count() > 0 && !string.IsNullOrEmpty(postDataContent.CustomJobID))
                            {
                                await _context.CustomJobIDs.AddAsync(new Models.DB.CustomJobID {
                                    ExternalJobID = postDataContent.CustomJobID, InternalJobID = listJobIds.FirstOrDefault()
                                });

                                await _context.SaveChangesAsync();
                            }

                            return(eventClient.ContentReponseOk);
                        }
                        else
                        {
                            _logger.LogInformation("Not Webhooks Configured");
                            return(eventClient.ContentReponseError);
                        }
                    }
                    catch (Exception exevent)
                    {
                        _logger.LogError(exevent.Message);
                        throw new Exception(eventClient.ContentReponseError);
                    }
                }
                else
                {
                    _logger.LogError("Not Webhooks Configured");
                    return("[error][configuration not found]");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message + " : " + ex.StackTrace);
                return("[error][" + ex.Message + " : " + ex.StackTrace + "]");
            }
        }