/// <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) { // необходимо добавить логирование ошибок } } })); }
/// <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())); }