Skip to content

Commit 4b90c74

Browse files
committed
Updated to latest repositories
1 parent 03f047b commit 4b90c74

35 files changed

+230
-240
lines changed

src/Exceptionless.Api/Controllers/Base/ExceptionlessApiController.cs

-24
Original file line numberDiff line numberDiff line change
@@ -62,30 +62,6 @@ protected virtual TimeInfo GetTimeInfo(string time, string offset, DateTime? min
6262
return timeInfo;
6363
}
6464

65-
protected virtual SortingOptions GetSort(string sort) {
66-
var sortingOptions = new SortingOptions();
67-
68-
if (!String.IsNullOrEmpty(sort)) {
69-
var fields = sort.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
70-
foreach (var field in fields) {
71-
string name = field.Trim();
72-
if (String.IsNullOrEmpty(name))
73-
continue;
74-
75-
var order = SortOrder.Ascending;
76-
if (!String.IsNullOrEmpty(sort) && sort.StartsWith("-")) {
77-
name = name.Substring(1);
78-
order = SortOrder.Descending;
79-
}
80-
81-
if (AllowedFields.Contains(name))
82-
sortingOptions.Fields.Add(new FieldSort { Field = name, Order = order });
83-
}
84-
}
85-
86-
return sortingOptions;
87-
}
88-
8965
protected int GetLimit(int limit) {
9066
if (limit < 1)
9167
limit = DEFAULT_LIMIT;

src/Exceptionless.Api/Controllers/EventController.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public async Task<IHttpActionResult> GetByIdAsync(string id, string filter = nul
9999
if (!String.IsNullOrEmpty(filter))
100100
filter = filter.ReplaceFirst("stack:current", $"stack:{model.StackId}");
101101

102-
var pr = QueryProcessor.Process(filter);
102+
var pr = await QueryProcessor.ProcessAsync(filter);
103103
if (!pr.IsValid)
104104
return OkWithLinks(model, GetEntityResourceLink<Stack>(model.StackId, "parent"));
105105

@@ -140,18 +140,16 @@ private async Task<IHttpActionResult> GetInternalAsync(IExceptionlessSystemFilte
140140
if (skip > MAXIMUM_SKIP)
141141
return Ok(EmptyModels);
142142

143-
var sortBy = GetSort(sort);
144-
var options = new PagingOptions { Page = page, Limit = limit };
145-
146-
var pr = QueryProcessor.Process(filter);
143+
var pr = await QueryProcessor.ProcessAsync(filter);
147144
if (!pr.IsValid)
148145
return BadRequest(pr.Message);
149146

150147
sf.UsesPremiumFeatures = pr.UsesPremiumFeatures || usesPremiumFeatures;
148+
var options = new PagingOptions { Page = page, Limit = limit };
151149

152150
FindResults<PersistentEvent> events;
153151
try {
154-
events = await _repository.GetByFilterAsync(ShouldApplySystemFilter(sf, filter) ? sf : null, pr.ExpandedQuery, sortBy, ti.Field, ti.UtcRange.Start, ti.UtcRange.End, options);
152+
events = await _repository.GetByFilterAsync(ShouldApplySystemFilter(sf, filter) ? sf : null, pr.ExpandedQuery, sort, ti.Field, ti.UtcRange.Start, ti.UtcRange.End, options);
155153
} catch (ApplicationException ex) {
156154
_logger.Error().Exception(ex)
157155
.Message("An error has occurred. Please check your search filter.")

src/Exceptionless.Api/Controllers/StackController.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class StackController : RepositoryApiController<IStackRepository, Stack,
4545
private readonly BillingManager _billingManager;
4646
private readonly FormattingPluginManager _formattingPluginManager;
4747
private readonly List<FieldAggregation> _distinctUsersFields = new List<FieldAggregation> { new FieldAggregation { Field = "user.keyword", Type = FieldAggregationType.Distinct } };
48-
private readonly List<FieldAggregation> _distinctUsersFieldsWithSort = new List<FieldAggregation> { new FieldAggregation { Field = "user.keyword", Type = FieldAggregationType.Distinct, SortOrder = SortOrder.Descending } };
48+
private readonly List<FieldAggregation> _distinctUsersFieldsWithSort = new List<FieldAggregation> { new FieldAggregation { Field = "user.keyword", Type = FieldAggregationType.Distinct, SortOrder = "-" } };
4949

5050
public StackController(IStackRepository stackRepository, IOrganizationRepository organizationRepository, IProjectRepository projectRepository, IQueue<WorkItemData> workItemQueue, IWebHookRepository webHookRepository, WebHookDataPluginManager webHookDataPluginManager, IQueue<WebHookNotification> webHookNotificationQueue, ICacheClient cacheClient, EventStats eventStats, BillingManager billingManager, FormattingPluginManager formattingPluginManager, ILoggerFactory loggerFactory, IMapper mapper) : base(stackRepository, loggerFactory, mapper) {
5151
_stackRepository = stackRepository;
@@ -517,17 +517,15 @@ private async Task<IHttpActionResult> GetInternalAsync(IExceptionlessSystemFilte
517517
if (skip > MAXIMUM_SKIP)
518518
return Ok(EmptyModels);
519519

520-
var pr = QueryProcessor.Process(filter);
520+
var pr = await QueryProcessor.ProcessAsync(filter);
521521
if (!pr.IsValid)
522522
return BadRequest(pr.Message);
523523

524524
sf.UsesPremiumFeatures = pr.UsesPremiumFeatures;
525-
526-
var sortBy = GetSort(sort);
527525
var options = new PagingOptions { Page = page, Limit = limit };
528526

529527
try {
530-
var results = await _repository.GetByFilterAsync(ShouldApplySystemFilter(sf, filter) ? sf : null, filter, sortBy, ti.Field, ti.UtcRange.Start, ti.UtcRange.End, options);
528+
var results = await _repository.GetByFilterAsync(ShouldApplySystemFilter(sf, filter) ? sf : null, filter, sort, ti.Field, ti.UtcRange.Start, ti.UtcRange.End, options);
531529

532530
var stacks = results.Documents.Select(s => s.ApplyOffset(ti.Offset)).ToList();
533531
if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.OrdinalIgnoreCase))
@@ -809,7 +807,7 @@ private async Task<IHttpActionResult> GetAllByTermsAsync(ICollection<FieldAggreg
809807
if (skip > MAXIMUM_SKIP)
810808
return Ok(EmptyModels);
811809

812-
var pr = QueryProcessor.Process(filter);
810+
var pr = await QueryProcessor.ProcessAsync(filter);
813811
if (!pr.IsValid)
814812
return BadRequest(pr.Message);
815813

src/Exceptionless.Api/Controllers/StatsController.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public async Task<IHttpActionResult> GetAsync(string fields = null, string filte
4040
if (!far.IsValid)
4141
return BadRequest(far.Message);
4242

43-
var pr = QueryProcessor.Process(filter);
43+
var pr = await QueryProcessor.ProcessAsync(filter);
4444
if (!pr.IsValid)
4545
return BadRequest(pr.Message);
4646

@@ -86,8 +86,8 @@ public async Task<IHttpActionResult> GetTimelineAsync(string fields = null, stri
8686
var far = FieldAggregationProcessor.Process(fields);
8787
if (!far.IsValid)
8888
return BadRequest(far.Message);
89-
90-
var pr = QueryProcessor.Process(filter);
89+
90+
var pr = await QueryProcessor.ProcessAsync(filter);
9191
if (!pr.IsValid)
9292
return BadRequest(pr.Message);
9393

src/Exceptionless.Api/Controllers/UtilityController.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Threading.Tasks;
23
using System.Web.Http;
34
using System.Web.Http.Description;
45
using Exceptionless.Core.Authorization;
@@ -19,8 +20,8 @@ public class UtilityController : ExceptionlessApiController {
1920
[Route("search/validate")]
2021
[Authorize(Roles = AuthorizationRoles.User)]
2122
[ResponseType(typeof(QueryProcessResult))]
22-
public IHttpActionResult Validate(string query) {
23-
return Ok(QueryProcessor.Validate(query));
23+
public async Task<IHttpActionResult> ValidateAsync(string query) {
24+
return Ok(await QueryProcessor.ValidateAsync(query));
2425
}
2526

2627
[Route("notfound")]

src/Exceptionless.Api/Exceptionless.Api.csproj

+8-8
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,20 @@
6666
<HintPath>..\..\packages\Foundatio.4.2.1183\lib\net46\Foundatio.dll</HintPath>
6767
<Private>True</Private>
6868
</Reference>
69-
<Reference Include="Foundatio.Parsers.ElasticQueries, Version=2.0.135.0, Culture=neutral, processorArchitecture=MSIL">
70-
<HintPath>..\..\packages\Foundatio.Parsers.ElasticQueries.2.0.135-pre\lib\net46\Foundatio.Parsers.ElasticQueries.dll</HintPath>
69+
<Reference Include="Foundatio.Parsers.ElasticQueries, Version=5.0.167.0, Culture=neutral, processorArchitecture=MSIL">
70+
<HintPath>..\..\packages\Foundatio.Parsers.ElasticQueries.5.0.167-pre\lib\net46\Foundatio.Parsers.ElasticQueries.dll</HintPath>
7171
<Private>True</Private>
7272
</Reference>
73-
<Reference Include="Foundatio.Parsers.LuceneQueries, Version=2.0.135.0, Culture=neutral, processorArchitecture=MSIL">
74-
<HintPath>..\..\packages\Foundatio.Parsers.LuceneQueries.2.0.135-pre\lib\net46\Foundatio.Parsers.LuceneQueries.dll</HintPath>
73+
<Reference Include="Foundatio.Parsers.LuceneQueries, Version=5.0.167.0, Culture=neutral, processorArchitecture=MSIL">
74+
<HintPath>..\..\packages\Foundatio.Parsers.LuceneQueries.5.0.167-pre\lib\net46\Foundatio.Parsers.LuceneQueries.dll</HintPath>
7575
<Private>True</Private>
7676
</Reference>
77-
<Reference Include="Foundatio.Repositories, Version=5.0.306.0, Culture=neutral, processorArchitecture=MSIL">
78-
<HintPath>..\..\packages\Foundatio.Repositories.5.0.306-pre\lib\net46\Foundatio.Repositories.dll</HintPath>
77+
<Reference Include="Foundatio.Repositories, Version=5.0.324.0, Culture=neutral, processorArchitecture=MSIL">
78+
<HintPath>..\..\packages\Foundatio.Repositories.5.0.324-pre\lib\net46\Foundatio.Repositories.dll</HintPath>
7979
<Private>True</Private>
8080
</Reference>
81-
<Reference Include="Foundatio.Repositories.Elasticsearch, Version=5.0.306.0, Culture=neutral, processorArchitecture=MSIL">
82-
<HintPath>..\..\packages\Foundatio.Repositories.Elasticsearch.5.0.306-pre\lib\net46\Foundatio.Repositories.Elasticsearch.dll</HintPath>
81+
<Reference Include="Foundatio.Repositories.Elasticsearch, Version=5.0.324.0, Culture=neutral, processorArchitecture=MSIL">
82+
<HintPath>..\..\packages\Foundatio.Repositories.Elasticsearch.5.0.324-pre\lib\net46\Foundatio.Repositories.Elasticsearch.dll</HintPath>
8383
<Private>True</Private>
8484
</Reference>
8585
<Reference Include="McSherry.SemanticVersioning, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL">

src/Exceptionless.Api/packages.config

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
<package id="Exceptionless.DateTimeExtensions" version="3.2.55" targetFramework="net461" />
66
<package id="FluentValidation" version="6.2.1.0" targetFramework="net461" />
77
<package id="Foundatio" version="4.2.1183" targetFramework="net461" />
8-
<package id="Foundatio.Parsers.ElasticQueries" version="2.0.135-pre" targetFramework="net461" />
9-
<package id="Foundatio.Parsers.LuceneQueries" version="2.0.135-pre" targetFramework="net461" />
10-
<package id="Foundatio.Repositories" version="5.0.306-pre" targetFramework="net461" />
11-
<package id="Foundatio.Repositories.Elasticsearch" version="5.0.306-pre" targetFramework="net461" />
8+
<package id="Foundatio.Parsers.ElasticQueries" version="5.0.167-pre" targetFramework="net461" />
9+
<package id="Foundatio.Parsers.LuceneQueries" version="5.0.167-pre" targetFramework="net461" />
10+
<package id="Foundatio.Repositories" version="5.0.324-pre" targetFramework="net461" />
11+
<package id="Foundatio.Repositories.Elasticsearch" version="5.0.324-pre" targetFramework="net461" />
1212
<package id="McSherry.SemanticVersioning" version="1.2.0" targetFramework="net461" />
1313
<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net461" />
1414
<package id="Microsoft.AspNet.SignalR.Core" version="2.2.1" targetFramework="net461" />

src/Exceptionless.Core/Exceptionless.Core.csproj

+8-8
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,20 @@
6161
<HintPath>..\..\packages\Foundatio.4.2.1183\lib\net46\Foundatio.dll</HintPath>
6262
<Private>True</Private>
6363
</Reference>
64-
<Reference Include="Foundatio.Parsers.ElasticQueries, Version=2.0.135.0, Culture=neutral, processorArchitecture=MSIL">
65-
<HintPath>..\..\packages\Foundatio.Parsers.ElasticQueries.2.0.135-pre\lib\net46\Foundatio.Parsers.ElasticQueries.dll</HintPath>
64+
<Reference Include="Foundatio.Parsers.ElasticQueries, Version=5.0.167.0, Culture=neutral, processorArchitecture=MSIL">
65+
<HintPath>..\..\packages\Foundatio.Parsers.ElasticQueries.5.0.167-pre\lib\net46\Foundatio.Parsers.ElasticQueries.dll</HintPath>
6666
<Private>True</Private>
6767
</Reference>
68-
<Reference Include="Foundatio.Parsers.LuceneQueries, Version=2.0.135.0, Culture=neutral, processorArchitecture=MSIL">
69-
<HintPath>..\..\packages\Foundatio.Parsers.LuceneQueries.2.0.135-pre\lib\net46\Foundatio.Parsers.LuceneQueries.dll</HintPath>
68+
<Reference Include="Foundatio.Parsers.LuceneQueries, Version=5.0.167.0, Culture=neutral, processorArchitecture=MSIL">
69+
<HintPath>..\..\packages\Foundatio.Parsers.LuceneQueries.5.0.167-pre\lib\net46\Foundatio.Parsers.LuceneQueries.dll</HintPath>
7070
<Private>True</Private>
7171
</Reference>
72-
<Reference Include="Foundatio.Repositories, Version=5.0.306.0, Culture=neutral, processorArchitecture=MSIL">
73-
<HintPath>..\..\packages\Foundatio.Repositories.5.0.306-pre\lib\net46\Foundatio.Repositories.dll</HintPath>
72+
<Reference Include="Foundatio.Repositories, Version=5.0.324.0, Culture=neutral, processorArchitecture=MSIL">
73+
<HintPath>..\..\packages\Foundatio.Repositories.5.0.324-pre\lib\net46\Foundatio.Repositories.dll</HintPath>
7474
<Private>True</Private>
7575
</Reference>
76-
<Reference Include="Foundatio.Repositories.Elasticsearch, Version=5.0.306.0, Culture=neutral, processorArchitecture=MSIL">
77-
<HintPath>..\..\packages\Foundatio.Repositories.Elasticsearch.5.0.306-pre\lib\net46\Foundatio.Repositories.Elasticsearch.dll</HintPath>
76+
<Reference Include="Foundatio.Repositories.Elasticsearch, Version=5.0.324.0, Culture=neutral, processorArchitecture=MSIL">
77+
<HintPath>..\..\packages\Foundatio.Repositories.Elasticsearch.5.0.324-pre\lib\net46\Foundatio.Repositories.Elasticsearch.dll</HintPath>
7878
<Private>True</Private>
7979
</Reference>
8080
<Reference Include="MaxMind.Db, Version=2.0.0.0, Culture=neutral, PublicKeyToken=66afa4cc5ae853ac, processorArchitecture=MSIL">

src/Exceptionless.Core/Extensions/ElasticExtensions.cs

-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,5 @@ public static class ElasticExtensions {
66
public static TextPropertyDescriptor<T> AddKeywordField<T>(this TextPropertyDescriptor<T> descriptor) where T : class {
77
return descriptor.Fields(f => f.Keyword(s => s.Name("keyword").IgnoreAbove(256)));
88
}
9-
10-
public static TDescriptor Alias<TDescriptor>(this TDescriptor descriptor, string alias) where TDescriptor : IDescriptor {
11-
return descriptor;
12-
}
139
}
1410
}

src/Exceptionless.Core/Filter/FieldAggregationProcessor.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Linq;
44
using Foundatio.Repositories.Models;
@@ -154,7 +154,7 @@ public enum FieldAggregationType {
154154
public class FieldAggregation {
155155
public FieldAggregationType Type { get; set; }
156156
public string Field { get; set; }
157-
public SortOrder? SortOrder { get; set; }
157+
public string SortOrder { get; set; }
158158

159159
public string Key {
160160
get {

src/Exceptionless.Core/Filter/QueryProcessorVisitor.cs

+16-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Foundatio.Parsers.LuceneQueries;
77
using Foundatio.Parsers.LuceneQueries.Nodes;
88
using Foundatio.Parsers.LuceneQueries.Visitors;
9+
using System.Threading.Tasks;
910

1011
namespace Exceptionless.Core.Processors {
1112
public class QueryProcessor {
@@ -19,7 +20,7 @@ public class QueryProcessor {
1920
"stack"
2021
};
2122

22-
public static QueryProcessResult Process(string query) {
23+
public static async Task<QueryProcessResult> ProcessAsync(string query) {
2324
if (String.IsNullOrWhiteSpace(query))
2425
return new QueryProcessResult { IsValid = true };
2526

@@ -33,7 +34,7 @@ public static QueryProcessResult Process(string query) {
3334

3435
var validator = new QueryProcessorVisitor(_freeFields);
3536
var context = new ElasticQueryVisitorContext();
36-
result.Accept(validator, context);
37+
await result.AcceptAsync(validator, context).AnyContext();
3738

3839
var expandedQuery = validator.UsesDataFields ? GenerateQueryVisitor.Run(result) : query;
3940
return new QueryProcessResult {
@@ -43,7 +44,7 @@ public static QueryProcessResult Process(string query) {
4344
};
4445
}
4546

46-
public static QueryProcessResult Validate(string query) {
47+
public static async Task<QueryProcessResult> ValidateAsync(string query) {
4748
if (String.IsNullOrEmpty(query))
4849
return new QueryProcessResult { IsValid = true };
4950

@@ -57,7 +58,7 @@ public static QueryProcessResult Validate(string query) {
5758

5859
var validator = new QueryProcessorVisitor(_freeFields);
5960
var context = new ElasticQueryVisitorContext();
60-
result.Accept(validator, context);
61+
await result.AcceptAsync(validator, context).AnyContext();
6162

6263
return new QueryProcessResult {
6364
IsValid = true,
@@ -73,7 +74,7 @@ public QueryProcessorVisitor(HashSet<string> freeFields) {
7374
_freeFields = freeFields ?? new HashSet<string>();
7475
}
7576

76-
public void Visit(GroupNode node, IQueryVisitorContext context) {
77+
public async Task VisitAsync(GroupNode node, IQueryVisitorContext context) {
7778
var childTerms = new List<string>();
7879
var leftTermNode = node.Left as TermNode;
7980
if (leftTermNode != null && leftTermNode.Field == null)
@@ -97,29 +98,33 @@ public void Visit(GroupNode node, IQueryVisitorContext context) {
9798

9899
node.Field = GetCustomFieldName(node.Field, childTerms.ToArray()) ?? node.Field;
99100
foreach (var child in node.Children)
100-
child.Accept(this, context);
101+
await child.AcceptAsync(this, context).AnyContext();
101102
}
102103

103-
public void Visit(TermNode node, IQueryVisitorContext context) {
104+
public Task VisitAsync(TermNode node, IQueryVisitorContext context) {
104105
// using all fields search
105106
if (String.IsNullOrEmpty(node.Field)) {
106107
UsesPremiumFeatures = true;
107-
return;
108+
return Task.CompletedTask;
108109
}
109110

110111
node.Field = GetCustomFieldName(node.Field, node.Term) ?? node.Field;
112+
return Task.CompletedTask;
111113
}
112114

113-
public void Visit(TermRangeNode node, IQueryVisitorContext context) {
115+
public Task VisitAsync(TermRangeNode node, IQueryVisitorContext context) {
114116
node.Field = GetCustomFieldName(node.Field, node.Min, node.Max) ?? node.Field;
117+
return Task.CompletedTask;
115118
}
116119

117-
public void Visit(ExistsNode node, IQueryVisitorContext context) {
120+
public Task VisitAsync(ExistsNode node, IQueryVisitorContext context) {
118121
node.Field = GetCustomFieldName(node.Field) ?? node.Field;
122+
return Task.CompletedTask;
119123
}
120124

121-
public void Visit(MissingNode node, IQueryVisitorContext context) {
125+
public Task VisitAsync(MissingNode node, IQueryVisitorContext context) {
122126
node.Field = GetCustomFieldName(node.Field) ?? node.Field;
127+
return Task.CompletedTask;
123128
}
124129

125130
private string GetCustomFieldName(string field, params string[] terms) {

0 commit comments

Comments
 (0)