mirror of
https://github.com/Biarity/Sieve.git
synced 2024-11-21 21:12:50 +01:00
Check for duplicate filteers/sorts and performance measurement code for SieveTests
This commit is contained in:
parent
c72175bf4a
commit
254eec529e
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Sieve.Models
|
||||
@ -33,6 +34,8 @@ namespace Sieve.Models
|
||||
var value = new List<TFilterTerm>();
|
||||
foreach (var filter in Filters.Split(','))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(filter)) continue;
|
||||
|
||||
if (filter.StartsWith("("))
|
||||
{
|
||||
var filterOpAndVal = filter.Substring(filter.LastIndexOf(")") + 1);
|
||||
@ -41,8 +44,11 @@ namespace Sieve.Models
|
||||
{
|
||||
Filter = subfilters + filterOpAndVal
|
||||
};
|
||||
if (!value.Any(f => f.Names.Any(n => filterTerm.Names.Any(n2 => n2 == n))))
|
||||
{
|
||||
value.Add(filterTerm);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var filterTerm = new TFilterTerm
|
||||
@ -70,12 +76,17 @@ namespace Sieve.Models
|
||||
var value = new List<TSortTerm>();
|
||||
foreach (var sort in Sorts.Split(','))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(sort)) continue;
|
||||
|
||||
var sortTerm = new TSortTerm()
|
||||
{
|
||||
Sort = sort
|
||||
};
|
||||
if (!value.Any(s => s.Name == sortTerm.Name))
|
||||
{
|
||||
value.Add(sortTerm);
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
else
|
||||
|
@ -6,7 +6,7 @@ namespace SieveTests.Services
|
||||
{
|
||||
public class SieveCustomFilterMethods : ISieveCustomFilterMethods
|
||||
{
|
||||
public IQueryable<Post> IsNew(IQueryable<Post> source)
|
||||
public IQueryable<Post> IsNew(IQueryable<Post> source, string op, string value)
|
||||
=> source.Where(p => p.LikeCount < 100 && p.CommentCount < 5);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,10 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@ -37,6 +42,20 @@ namespace SieveTests
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||
{
|
||||
// TIME MEASUREMENT
|
||||
var times = new List<long>();
|
||||
app.Use(async (context, next) =>
|
||||
{
|
||||
var sw = new Stopwatch();
|
||||
sw.Start();
|
||||
await next.Invoke();
|
||||
sw.Stop();
|
||||
times.Add(sw.ElapsedMilliseconds);
|
||||
var text = $"AVG: {(int)times.Average()}ms; AT {sw.ElapsedMilliseconds}; COUNT: {times.Count()}";
|
||||
Console.WriteLine(text);
|
||||
await context.Response.WriteAsync($"<!-- {text} -->");
|
||||
});
|
||||
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
|
15
SieveTests/pyprofile.py
Normal file
15
SieveTests/pyprofile.py
Normal file
@ -0,0 +1,15 @@
|
||||
import urllib.request
|
||||
import time
|
||||
|
||||
for run in range(500):
|
||||
contents = urllib.request.urlopen("http://localhost:6500/api/posts/getall").read()
|
||||
print(contents[-50:])
|
||||
|
||||
|
||||
#for run in range(50):
|
||||
# contents = urllib.request.urlopen("http://localhost:6500/api/posts/getallWithSieve?filters=IsNew&sorts=popularity").read()
|
||||
# print(contents[-50:])
|
||||
# time.sleep(1)
|
||||
|
||||
print("done baseline")
|
||||
input()
|
Loading…
Reference in New Issue
Block a user