public async Task <IActionResult> Analyse([Required] string text, bool checkDate = true, int infoLevel = 1) { try { if (string.IsNullOrEmpty(text) || infoLevel < 1 || infoLevel > 3) { _logger.Warning("{@Text} or {@InfoLevel} constraints violated!", text, infoLevel); return(BadRequest(new { message = "Check 'text' and 'infoLevel' restrictions" })); } var item = new ConfiguredAnalysisRequestItem { Id = Guid.NewGuid().ToString(), Text = text, CheckDate = checkDate, Configuration = new SmallTalksPreProcessingConfiguration() { InformationLevel = (InformationLevel)infoLevel } }; using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(1))) { var response = await AnalyseAsync(item, source.Token, '1'); _logger.Information("[{@SmallTalksAnalysisResult}] {@Sentence} analysed with CheckDate={@CheckDate} and InfoLevel={@InfoLevel}. Response: {@AnalysisResponse}", "Success", text, checkDate, infoLevel, response); return(Ok(response)); } } catch (Exception ex) { _logger.Error(ex, "[{@SmallTalksAnalysisResult}] Unexpected fail when analysing sentence: {@Sentence}, {@CheckDate}, {@InfoLevel}", "Error", text, checkDate, infoLevel); return(StatusCode((int)HttpStatusCode.InternalServerError, ex)); } }
private async Task <AnalysisResponseItem> UnsafeAnalyseAsyncv2(ConfiguredAnalysisRequestItem item) { var analysisResponse = new AnalysisResponseItem { Id = item.Id, SmallTalksAnalysis = await _smallTalksDetector.DetectAsyncv2(item.Text, item.Configuration), DateTimeDectecteds = await DetectDateAsync(item, CancellationToken.None), }; return(analysisResponse); }
private async Task <AnalysisResponseItem> AnalyseAsync(ConfiguredAnalysisRequestItem item, CancellationToken cancellationToken, char apiVersion) { var analysisResponse = new AnalysisResponseItem { Id = item.Id, SmallTalksAnalysis = apiVersion == '1' ? await _smallTalksDetector.DetectAsync(item.Text, item.Configuration) : apiVersion == '2' ? await _smallTalksDetector.DetectAsyncv2(item.Text, item.Configuration) : await _smallTalksDetector.DetectAsync(item.Text, item.Configuration), DateTimeDectecteds = await DetectDateAsync(item, cancellationToken), }; return(analysisResponse); }
private async Task <List <DateTimeDectected> > DetectDateAsync(ConfiguredAnalysisRequestItem requestItem, CancellationToken cancellationToken) { var sw = Stopwatch.StartNew(); try { return(requestItem.CheckDate ? await _dateTimeDectector.DetectAsync(requestItem.Text, cancellationToken) : null); } catch (Exception ex) { _logger.Error(ex, "Couldn't check date for {@RequestItem}", requestItem); return(null); } finally { sw.Stop(); _logger.Information("Finish date detect after {@ElapsedMillisecods} for {@RequestItem}", sw.ElapsedMilliseconds, requestItem); } }
public async Task <IActionResult> ConfiguredAnalysev2([FromBody] ConfiguredAnalysisRequestItem requestItem) { try { if (requestItem == null || string.IsNullOrEmpty(requestItem.Text)) { return(BadRequest()); } using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(1))) { var response = await AnalyseAsync(requestItem, source.Token, '2'); _logger.Information(response.ToString()); return(Ok(response)); } } catch (Exception ex) { _logger.Error(ex, "Unexpected fail when analysing sentence: {requestItem}", requestItem); return(StatusCode((int)HttpStatusCode.InternalServerError, ex)); } }