mirror of
				https://github.com/Biarity/Sieve.git
				synced 2025-11-04 02:39:00 +01:00 
			
		
		
		
	Check for duplicate filteers/sorts and performance measurement code for SieveTests
This commit is contained in:
		@@ -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,7 +44,10 @@ namespace Sieve.Models
 | 
			
		||||
                            {
 | 
			
		||||
                                Filter = subfilters + filterOpAndVal
 | 
			
		||||
                            };
 | 
			
		||||
                            value.Add(filterTerm);
 | 
			
		||||
                            if (!value.Any(f => f.Names.Any(n => filterTerm.Names.Any(n2 => n2 == n))))
 | 
			
		||||
                            {
 | 
			
		||||
                                value.Add(filterTerm);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
@@ -70,11 +76,16 @@ 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
 | 
			
		||||
                        };
 | 
			
		||||
                        value.Add(sortTerm);
 | 
			
		||||
                        if (!value.Any(s => s.Name == sortTerm.Name))
 | 
			
		||||
                        {
 | 
			
		||||
                            value.Add(sortTerm);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    return value;
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
		Reference in New Issue
	
	Block a user