Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions docker/postgres-techempower/create-postgres.sql
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,50 @@ INSERT INTO "Fortune" (id, message) VALUES (10, 'Computers make very fast, very
INSERT INTO "Fortune" (id, message) VALUES (11, '<script>alert("This should not be displayed in a browser alert box.");</script>');
INSERT INTO "Fortune" (id, message) VALUES (12, 'フレームワークのベンチマーク');


CREATE TABLE "RewriteRule" (
id integer NOT NULL,
regex varchar(2048) NOT NULL,
replacement varchar(2048) NOT NULL,
PRIMARY KEY (id)
);

GRANT SELECT ON "RewriteRule" to benchmarkdbuser;

INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (1, 'rewrite1' ,'replacement1');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (2, 'rewrite1' ,'replacement2');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (3, 'rewrite1' ,'replacement3');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (4, 'rewrite1' ,'replacement4');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (5, 'rewrite1' ,'replacement5');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (6, 'rewrite1' ,'replacement6');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (7, 'rewrite1' ,'replacement7');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (8, 'rewrite1' ,'replacement8');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (9, 'rewrite1' ,'replacement9');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (10,'rewrite1' ,'replacement10');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (11,'rewrite1' ,'replacement11');
INSERT INTO "RewriteRule" (id, regex,replacement) VALUES (12,'rewrite1' ,'replacement12');



CREATE TABLE RewriteRule (
id integer NOT NULL,
regex varchar(2048) NOT NULL,
replacement varchar(2048) NOT NULL,
PRIMARY KEY (id)
);
GRANT SELECT ON RewriteRule to benchmarkdbuser;

INSERT INTO RewriteRule (id, regex,replacement) VALUES (1, 'rewrite1' ,'replacement1');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (2, 'rewrite1' ,'replacement2');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (3, 'rewrite1' ,'replacement3');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (4, 'rewrite1' ,'replacement4');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (5, 'rewrite1' ,'replacement5');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (6, 'rewrite1' ,'replacement6');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (7, 'rewrite1' ,'replacement7');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (8, 'rewrite1' ,'replacement8');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (9, 'rewrite1' ,'replacement9');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (10,'rewrite1' ,'replacement10');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (11,'rewrite1' ,'replacement11');
INSERT INTO RewriteRule (id, regex,replacement) VALUES (12,'rewrite1' ,'replacement12');

COMMIT;
2 changes: 1 addition & 1 deletion docker/postgres-techempower/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ docker run \
--log-opt max-size=10m \
--log-opt max-file=3 \
--name postgres-techempower \
--network host \
-p 5432:5432 \
--restart always \
postgres-techempower
39 changes: 39 additions & 0 deletions scenarios/rewrite.benchmarks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
imports:
- https://raw.githubusercontent.com/dotnet/crank/main/src/Microsoft.Crank.Jobs.Wrk/wrk.yml
- https://raw.githubusercontent.com/aspnet/Benchmarks/main/scenarios/aspnet.profiles.yml

variables:
serverPort: 5000
serverScheme: http
scenario: antiforgery
debug: false

jobs:
rewritebenchmarks:
source:
#repository: https://github.com/cdincer/Benchmarks.git
localFolder: ../src/BenchmarksApps
branchOrCommit: main
project: Rewrite/Rewrite.csproj
readyStateText: Application started.
arguments: "--urls {{serverScheme}}://{{serverAddress}}:{{serverPort}} --scenario {{scenario}} --debug {{debug}}"
environmentVariables:
connectionString: Server={{databaseServer}};Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=256;NoResetOnClose=true;Enlist=false;Max Auto Prepare=4

scenarios:

rewrite1:
application:
job: rewritebenchmarks
load:
job: wrk
variables:
path: /rewrite1

rewrite2:
application:
job: rewritebenchmarks
load:
job: wrk
variables:
path: /rewrite2
14 changes: 12 additions & 2 deletions src/BenchmarksApps.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33416.333
# Visual Studio Version 18
VisualStudioVersion = 18.10.12120.281 insiders
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicMinimalApi", "BenchmarksApps\BasicMinimalApi\BasicMinimalApi.csproj", "{D13E5EF8-8DA6-4904-891D-1A8D8AAC04DD}"
EndProject
Expand Down Expand Up @@ -72,6 +72,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpSys", "BenchmarksApps\T
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kestrel", "BenchmarksApps\TLS\Kestrel\Kestrel.csproj", "{291DCDF7-4B7C-D687-A62B-9DF7DF50F2F2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rewrite", "BenchmarksApps\Rewrite\Rewrite.csproj", "{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_Database|Any CPU = Debug_Database|Any CPU
Expand Down Expand Up @@ -280,6 +282,14 @@ Global
{291DCDF7-4B7C-D687-A62B-9DF7DF50F2F2}.Release_Database|Any CPU.Build.0 = Release_Database|Any CPU
{291DCDF7-4B7C-D687-A62B-9DF7DF50F2F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{291DCDF7-4B7C-D687-A62B-9DF7DF50F2F2}.Release|Any CPU.Build.0 = Release|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Debug_Database|Any CPU.ActiveCfg = Debug_Database|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Debug_Database|Any CPU.Build.0 = Debug_Database|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Release_Database|Any CPU.ActiveCfg = Release_Database|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Release_Database|Any CPU.Build.0 = Release_Database|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DDCACECC-62BD-4DE3-AB17-E0A66B25F591}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
8 changes: 8 additions & 0 deletions src/BenchmarksApps/Rewrite/Configuration/AppSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Rewrite.Configuration
{
public class AppSettings
{
public string ConnectionString { get; set; }

}
}
12 changes: 12 additions & 0 deletions src/BenchmarksApps/Rewrite/Configuration/ConsoleArgs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace Rewrite.Configuration
{
public class ConsoleArgs
{
public ConsoleArgs(string[] args)
{
Args = args;
}

public string[] Args { get; }
}
}
22 changes: 22 additions & 0 deletions src/BenchmarksApps/Rewrite/Data/RewriteRule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Runtime.Serialization;

namespace Rewrite.Data
{
[Table("RewriteRule")]
public class RewriteRule
{
[Column("id")]
public int Id { get; set; }


[Column("regex")]
[MaxLength(2048)]
public string? Regex { get; set; }

[Column("replacement")]
[MaxLength(2048)]
public string? Replacement { get; set; }
}
}
89 changes: 89 additions & 0 deletions src/BenchmarksApps/Rewrite/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using System.Data.Common;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Npgsql;
using Rewrite.Configuration;
using Rewrite.Data;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

var hostingConfig = new ConfigurationBuilder()
.AddJsonFile("hosting.json", optional: true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();

string connectionString = hostingConfig["ConnectionString"] ?? "no Connectionstring found";


await using var dataSource = NpgsqlDataSource.Create(connectionString);

await using var command = dataSource.CreateCommand("SELECT id,regex,replacement FROM \"RewriteRule\"");
await using var reader = await command.ExecuteReaderAsync();

List<RewriteRule> rewriteRules = new();

while (await reader.ReadAsync())
{
RewriteRule rule = new RewriteRule
{
Id = reader.GetFieldValue<int>(0),
Regex = reader.GetFieldValue<string>(1),
Replacement = reader.GetFieldValue<string>(2)
};
rewriteRules.Add(rule);
};
var options = new RewriteOptions();

foreach(RewriteRule rewriteRule in rewriteRules)
{
options.AddRewrite(rewriteRule.Regex, rewriteRule.Replacement,skipRemainingRules: false);
}


WebApplication app = builder.Build();

app.UseRewriter(options);



string[] summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapGet("/rewrite1", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
});


app.MapGet("/rewrite2", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
});

app.Run();

internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
12 changes: 12 additions & 0 deletions src/BenchmarksApps/Rewrite/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"profiles": {
"Rewrite": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:55471;http://localhost:55472"
}
}
}
16 changes: 16 additions & 0 deletions src/BenchmarksApps/Rewrite/Rewrite.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.11" />
<PackageReference Include="Npgsql" Version="9.0.4" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
</ItemGroup>

</Project>
8 changes: 8 additions & 0 deletions src/BenchmarksApps/Rewrite/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
18 changes: 18 additions & 0 deletions src/BenchmarksApps/Rewrite/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"ConnectionString": "",
"DatabaseServer": "SqlServer",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
},
"Console": {
"FormatterOptions": {
"TimestampFormat": "HH:mm:ss "

}
}
},
"AllowedHosts": "*"
}