예제 #1
0
        /// <summary>
        /// Отправка веб-хука на uri из настроек
        /// </summary>
        /// <param name="state"></param>
        private void SendHook(object state)
        {
            Task.Run(async() => await _telemetryCollector.WithStopwatch(() =>
            {
                lock (_lock)
                {
                    try
                    {
                        WebHookRecord hookRecord;
                        WebHookInfo hooInfo;
                        if (_webHooks.TryDequeue(out hookRecord) &&//извлекаем хук
                            !WebHookRecord.IsEmpty(hookRecord) &&
                            _webHooksInfo.TryRemove(hookRecord.ResourceId, out hooInfo) &&     //извлекаем его доп инфу
                            !WebHookInfo.IsEmpty(hooInfo) &&
                            hooInfo.MustDieAt >= DateTime.Now)       //проверяем не протух ли веб-хук
                        {
                            var httpClient = new HttpClient();
                            var request    = new HttpRequestMessage(HttpMethod.Post, _options.Value.WebHookUri)
                            {
                                Content =
                                    new StringContent($"{{\"resourceid\":\"{hookRecord.ResourceId}\", \"eventtype\":\"{hookRecord.EventType}\",\"newvalue\":\"{hookRecord.NewValue}\"}}"
                                                      , Encoding.UTF8
                                                      , "application/json")
                            };
                            HttpResponseMessage responce = null;
                            Task.WhenAny(Task.Run(async() => { responce = await httpClient.SendAsync(request); }));

                            if (responce == null || responce.StatusCode != System.Net.HttpStatusCode.OK)
                            {
                                _webHooksInfo.TryAdd(hooInfo.ResourceId, hooInfo);
                                _webHooks.Enqueue(hookRecord);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // необходимо добавить логирование ошибок
                    }
                }
            }));
        }
예제 #2
0
 /// <summary>
 /// Вставка подстроки в начало
 /// </summary>
 /// <param name="newValue"></param>
 /// <returns></returns>
 public async Task <bool> AddToStart(int id, string substring)
 {
     return(await _telemetryCollector.WithStopwatch(async() => await WithWebHook(async() => await _repository.AddToStart(id, substring))));
 }
 public async Task <ActionResult <List <Resource> > > Get()
 {
     return(await _telemetryCollector.WithStopwatch(async() => await _service.Get()));
 }