From 300eedfe90b15966abe31e765d5f98e5e94834b3 Mon Sep 17 00:00:00 2001 From: brmassa Date: Sat, 29 Mar 2025 23:19:50 -0500 Subject: [PATCH 1/3] feat: veb_brmassa --- frameworks/V/veb_brmassa/README.md | 66 ++++++++ .../V/veb_brmassa/benchmark_config.json | 147 ++++++++++++++++++ frameworks/V/veb_brmassa/run.sh | 7 + frameworks/V/veb_brmassa/veb-my-orm/_setup.v | 49 ++++++ .../V/veb_brmassa/veb-my-orm/fortunes.html | 20 +++ .../V/veb_brmassa/veb-my-orm/index.html | 79 ++++++++++ frameworks/V/veb_brmassa/veb-my-orm/main.v | 25 +++ .../veb-my-orm/requests_db_fortune.v | 68 ++++++++ .../veb-my-orm/requests_db_world.v | 94 +++++++++++ .../V/veb_brmassa/veb-my-orm/requests_plain.v | 17 ++ .../V/veb_brmassa/veb-my-orm/setup_local_db.v | 22 +++ frameworks/V/veb_brmassa/veb-my/_setup.v | 51 ++++++ frameworks/V/veb_brmassa/veb-my/fortunes.html | 20 +++ frameworks/V/veb_brmassa/veb-my/index.html | 79 ++++++++++ frameworks/V/veb_brmassa/veb-my/main.v | 25 +++ .../veb_brmassa/veb-my/requests_db_fortune.v | 68 ++++++++ .../V/veb_brmassa/veb-my/requests_db_world.v | 107 +++++++++++++ .../V/veb_brmassa/veb-my/requests_plain.v | 17 ++ .../V/veb_brmassa/veb-my/setup_local_db.v | 20 +++ frameworks/V/veb_brmassa/veb-pg-orm/_setup.v | 51 ++++++ .../V/veb_brmassa/veb-pg-orm/fortunes.html | 20 +++ .../V/veb_brmassa/veb-pg-orm/index.html | 79 ++++++++++ frameworks/V/veb_brmassa/veb-pg-orm/main.v | 25 +++ .../veb-pg-orm/requests_db_fortune.v | 71 +++++++++ .../veb-pg-orm/requests_db_world.v | 95 +++++++++++ .../V/veb_brmassa/veb-pg-orm/requests_plain.v | 17 ++ .../V/veb_brmassa/veb-pg-orm/setup_local_db.v | 22 +++ frameworks/V/veb_brmassa/veb-pg/_setup.v | 51 ++++++ frameworks/V/veb_brmassa/veb-pg/fortunes.html | 20 +++ frameworks/V/veb_brmassa/veb-pg/index.html | 79 ++++++++++ frameworks/V/veb_brmassa/veb-pg/main.v | 25 +++ .../veb_brmassa/veb-pg/requests_db_fortune.v | 68 ++++++++ .../V/veb_brmassa/veb-pg/requests_db_world.v | 107 +++++++++++++ .../V/veb_brmassa/veb-pg/requests_plain.v | 17 ++ .../V/veb_brmassa/veb-pg/setup_local_db.v | 20 +++ .../V/veb_brmassa/veb_brmassa-my.dockerfile | 10 ++ .../veb_brmassa/veb_brmassa-my_orm.dockerfile | 10 ++ .../V/veb_brmassa/veb_brmassa-pg.dockerfile | 10 ++ .../veb_brmassa/veb_brmassa-pg_orm.dockerfile | 10 ++ .../V/veb_brmassa/veb_brmassa-pure.dockerfile | 10 ++ .../V/veb_brmassa/veb_brmassa-run.dockerfile | 11 ++ .../V/veb_brmassa/veb_brmassa.dockerfile | 10 ++ 42 files changed, 1819 insertions(+) create mode 100644 frameworks/V/veb_brmassa/README.md create mode 100644 frameworks/V/veb_brmassa/benchmark_config.json create mode 100644 frameworks/V/veb_brmassa/run.sh create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/_setup.v create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/fortunes.html create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/index.html create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/main.v create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v create mode 100644 frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v create mode 100644 frameworks/V/veb_brmassa/veb-my/_setup.v create mode 100644 frameworks/V/veb_brmassa/veb-my/fortunes.html create mode 100644 frameworks/V/veb_brmassa/veb-my/index.html create mode 100644 frameworks/V/veb_brmassa/veb-my/main.v create mode 100644 frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v create mode 100644 frameworks/V/veb_brmassa/veb-my/requests_db_world.v create mode 100644 frameworks/V/veb_brmassa/veb-my/requests_plain.v create mode 100644 frameworks/V/veb_brmassa/veb-my/setup_local_db.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/_setup.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/index.html create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/main.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v create mode 100644 frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/_setup.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/fortunes.html create mode 100644 frameworks/V/veb_brmassa/veb-pg/index.html create mode 100644 frameworks/V/veb_brmassa/veb-pg/main.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/requests_db_world.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/requests_plain.v create mode 100644 frameworks/V/veb_brmassa/veb-pg/setup_local_db.v create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile create mode 100644 frameworks/V/veb_brmassa/veb_brmassa.dockerfile diff --git a/frameworks/V/veb_brmassa/README.md b/frameworks/V/veb_brmassa/README.md new file mode 100644 index 00000000000..c2d011a254a --- /dev/null +++ b/frameworks/V/veb_brmassa/README.md @@ -0,0 +1,66 @@ +# V lang example web server + +Server "competition" *Web Framework Benchmarks*: https://www.techempower.com/benchmarks + +It designed to demonstrate how to use Veb's built-in features to create a web application. It's a slightly more complex example due to the fact i tried to reuse code for multiple scenarios. + +> NOTE: Cache test still to be properly implemented + +## Scenarios + +We created some scenarios. One on each folder. All scenarios use **Veb** server, the V lang built-in web framework. + +### Veb with Postgres (veb-pg/) + +``` +v run veb-pg/ +``` + +### Veb with Postgres and ORM (veb-pg-orm/) (TBD) + +``` +v run veb-pg-orm/ +``` + +### Veb with MySQL/MariaDB (veb-my/) (TBD) + +``` +v run veb-my/ +``` + +### Veb with MySQL/MariaDB and ORM (veb-my-orm/) (TBD) + +``` +v run veb-my-orm/ +``` + +## Local Setup + +in order to test the servers locally, you will need a database server and a database client. using container, you can use: + +### Postgres: + +``` +docker run --name benckmark-postgres \ + -e POSTGRES_USER=benchmarkdbuser \ + -e POSTGRES_PASSWORD=benchmarkdbpass \ + -e POSTGRES_DB=hello_world \ + -p 5432:5432 \ + -d techempower/postgres:latest +``` + +### MySQL/MariaDB: + +``` +docker run --name benckmark-mysql \ + -e MYSQL_ROOT_PASSWORD=benchmarkdbpass \ + -e MYSQL_USER=benchmarkdbuser \ + -e MYSQL_PASSWORD=benchmarkdbpass \ + -e MYSQL_DATABASE=hello_world \ + -p 3306:3306 \ + -d techempower/mysql:latest +``` + +--- + +Created by Bruno Massa diff --git a/frameworks/V/veb_brmassa/benchmark_config.json b/frameworks/V/veb_brmassa/benchmark_config.json new file mode 100644 index 00000000000..ec95c8fc74e --- /dev/null +++ b/frameworks/V/veb_brmassa/benchmark_config.json @@ -0,0 +1,147 @@ +{ + "framework": "veb_brmassa", + "authors": ["Bruno Massa"], + "github": "https://github.com/TechEmpower/gemini", + "tests": [ + { + "default": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [pg]", + "notes": "", + "versus": "None" + }, + "pg_orm": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [pg+orm]", + "notes": "", + "versus": "None" + }, + "non-optimized": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [pg] non-optimized", + "notes": "", + "versus": "None" + }, + "run-script": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [pg] run-script", + "notes": "", + "versus": "" + }, + "my": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "MySQL", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [my]", + "notes": "", + "versus": "None" + }, + "my_orm": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "MySQL", + "framework": "veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "", + "os": "Linux", + "database_os": "Linux", + "display_name": "veb [my+orm]", + "notes": "", + "versus": "" + } + } + ] +} diff --git a/frameworks/V/veb_brmassa/run.sh b/frameworks/V/veb_brmassa/run.sh new file mode 100644 index 00000000000..9673d7f1cd3 --- /dev/null +++ b/frameworks/V/veb_brmassa/run.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +for i in $(seq 0 $(($(nproc --all)-1))); do + taskset -c $i ./veb & +done + +wait diff --git a/frameworks/V/veb_brmassa/veb-my-orm/_setup.v b/frameworks/V/veb_brmassa/veb-my-orm/_setup.v new file mode 100644 index 00000000000..3afc27007aa --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/_setup.v @@ -0,0 +1,49 @@ +import veb +import os +import db.mysql as db_module + +const db_connector = 'MySQL' +const db_connector_module = 'db.mysql' +const db_connector_port = 3306 +const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) + +@[heap] +pub struct App { + veb.Middleware[Context] +pub mut: + db db_module.DB +} + +@[inline] +fn db_init(mut app App) { + mut db_host := os.environ()['db_host'] + if db_host == '' { + db_host = 'tfb-database' + } + + config := db_module.Config{ + host: db_host + port: db_connector_port + username: 'benchmarkdbuser' + password: 'benchmarkdbpass' + dbname: 'hello_world' + } + app.db = db_module.connect(config) or { panic(err) } + // or { return ctx.server_error('Database connection failed') } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_option(id int, random_number ?string) World { + return World{ + id: id + randomnumber: random_number or { '' }.int() + } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_fortune(id ?string, random_number ?string) Fortune { + return Fortune{ + id: id or { '' }.int() + message: random_number or { '' } + } +} diff --git a/frameworks/V/veb_brmassa/veb-my-orm/fortunes.html b/frameworks/V/veb_brmassa/veb-my-orm/fortunes.html new file mode 100644 index 00000000000..a6e6162c1f2 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/fortunes.html @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + @for m in fortunes + + + + + @end +
idmessage
@m.id@m.message
+ + diff --git a/frameworks/V/veb_brmassa/veb-my-orm/index.html b/frameworks/V/veb_brmassa/veb-my-orm/index.html new file mode 100644 index 00000000000..473e1db30bd --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/index.html @@ -0,0 +1,79 @@ + + + + V web server + + + +

V web server

+

+ Welcome to V lang example web server + for + + Web Framework Benchmarks + +

+ +

Settings

+ + +

Local Setup

+ + +

Benchmark Tests

+ + + diff --git a/frameworks/V/veb_brmassa/veb-my-orm/main.v b/frameworks/V/veb_brmassa/veb-my-orm/main.v new file mode 100644 index 00000000000..66a1d6578f8 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/main.v @@ -0,0 +1,25 @@ +import veb +import time + +pub struct Context { + veb.Context +} + +// Program entry point +fn main() { + mut app := &App{} + app.use(handler: header) + + db_init(mut app) + defer { + app.db.close() + } + + veb.run[App, Context](mut app, 8080) +} + +pub fn header(mut ctx Context) bool { + ctx.set_header(.date, time.now().utc_string()) + ctx.set_header(.server, 'veb') + return true +} diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v b/frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v new file mode 100644 index 00000000000..9b04cf241ff --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v @@ -0,0 +1,68 @@ +module main + +import veb + +struct Fortune { + id int @[primary; sql: serial] + message string +} + +// Fortunes page. It will automatically output using `fortunes.html` +pub fn (app &App) fortunes(mut ctx Context) veb.Result { + fortunes_map := sql app.db { + select from Fortune + } or { return ctx.server_error('Database query failed') } + + mut fortunes := []Fortune{} + for fortune in fortunes_map { + fortunes << fortune + } + + fortunes << Fortune{ + id: 0 + message: 'Additional fortune added at request time.' + } + + fortunes.sort_with_compare(fn (a &Fortune, b &Fortune) int { + return a.message.compare(b.message) + }) + + ctx.content_type = 'text/html; charset=UTF-8' + // ctx.set_header(.content_type, content_type) // cannot be used since it's removing the "charset=UTF-8" + return $veb.html() +} + +fn db_init_fortune(app App, mut ctx Context) (int, string) { + sql app.db { + create table Fortune + } or { return 1, 'Failed to create Fortune table' } + + sql app.db { + delete from Fortune where id > 0 + } or { return 1, 'Failed to clear Fortune table' } + + mut messages := []string{} + messages << 'fortune: No such file or directory' + messages << 'A computer scientist is someone who fixes things that arent broken.' // TODO: escape the aren't + messages << 'After enough decimal places, nobody gives a damn.' + messages << 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1' + messages << 'A computer program does what you tell it to do, not what you want it to do.' + messages << 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen' + messages << 'Any program that runs right is obsolete.' + messages << 'A list is only as strong as its weakest link. — Donald Knuth' + messages << 'Feature: A bug with seniority.' + messages << 'Computers make very fast, very accurate mistakes.' + messages << '' + messages << 'フレームワークのベンチマーク' + + for message in messages { + fortune := Fortune{ + message: message + } + sql app.db { + insert fortune into Fortune + } or { return 1, 'Failed to insert Fortune message' } + } + + return 0, 'Fortune table reset and filled with default rows' +} diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v b/frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v new file mode 100644 index 00000000000..ceb822003ae --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v @@ -0,0 +1,94 @@ +module main + +import rand +import veb + +// required in ORM scenarios because it tries to lowercase the table name +// @[table: 'World'] +struct World { + id int @[primary; sql: serial] +mut: + randomnumber int +} + +pub fn (app &App) db(mut ctx Context) veb.Result { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + + return ctx.json(world.first()) +} + +pub fn (app &App) queries(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + worlds << world + } + + return ctx.json(worlds) +} + +pub fn (app &App) updates(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + worlds << world + } + + for mut world in worlds { + world.randomnumber = rand.int_in_range(1, 10001) or { panic(err) } + sql app.db { + update World set randomnumber = world.randomnumber where id == world.id + } or { return ctx.server_error('Database update failed') } + } + + return ctx.json(worlds) +} + +@[inline] +fn get_query(ctx Context, index string) int { + mut queries := ctx.query[index].int() + return if queries < 1 { + 1 + } else if queries > 500 { + 500 + } else { + queries + } +} + +fn db_init_world(app App, mut ctx Context) (int, string) { + sql app.db { + create table World + } or { return 1, 'Failed to create World table' } + + sql app.db { + delete from World where id > 0 + } or { return 1, 'Failed to clear World table' } + + for _ in 0 .. 10000 { + world := World{ + randomnumber: rand.int_in_range(1, 10001) or { 1 } + } + + // ORM only insert one at a time + sql app.db { + insert world into World + } or { return 1, 'Failed to insert World values' } + } + + return 0, 'World table reset and filled with 10000 rows' +} diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v b/frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v new file mode 100644 index 00000000000..0a866fc9859 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v @@ -0,0 +1,17 @@ +import veb + +pub fn (app &App) plaintext(mut ctx Context) veb.Result { + return ctx.text('Hello, World!') +} + +pub fn (app &App) json(mut ctx Context) veb.Result { + data := { + 'message': 'Hello, World!' + } + return ctx.json(data) +} + +// Home page. It will automatically output using `index.html` +pub fn (app &App) index(mut ctx Context) veb.Result { + return $veb.html() +} diff --git a/frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v b/frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v new file mode 100644 index 00000000000..2ec6c48b774 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v @@ -0,0 +1,22 @@ +module main + +import veb + +// Populate the local database +pub fn (app &App) db_init(mut ctx Context) veb.Result { + mut messages := []string{} + mut error, mut msg := db_init_world(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + error, msg = db_init_fortune(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + + return ctx.text(messages.join_lines()) +} diff --git a/frameworks/V/veb_brmassa/veb-my/_setup.v b/frameworks/V/veb_brmassa/veb-my/_setup.v new file mode 100644 index 00000000000..ce83389d601 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/_setup.v @@ -0,0 +1,51 @@ +import veb +import os +import db.mysql as db_module + +const db_connector = 'MySQL' +const db_connector_module = 'db.mysql' +const db_connector_port = 3306 +const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) +const db_table_world = '"world"' +const db_table_fortune = '"fortune"' + +@[heap] +pub struct App { + veb.Middleware[Context] +pub mut: + db db_module.DB +} + +@[inline] +fn db_init(mut app App) { + mut db_host := os.environ()['db_host'] + if db_host == '' { + db_host = 'tfb-database' + } + + config := db_module.Config{ + host: db_host + port: db_connector_port + username: 'benchmarkdbuser' + password: 'benchmarkdbpass' + dbname: 'hello_world' + } + app.db = db_module.connect(config) or { panic(err) } + // or { return ctx.server_error('Database connection failed') } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_option(id int, random_number ?string) World { + return World{ + id: id + randomnumber: random_number or { '' }.int() + } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_fortune(id ?string, random_number ?string) Fortune { + return Fortune{ + id: id or { '' }.int() + message: random_number or { '' } + } +} diff --git a/frameworks/V/veb_brmassa/veb-my/fortunes.html b/frameworks/V/veb_brmassa/veb-my/fortunes.html new file mode 100644 index 00000000000..a6e6162c1f2 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/fortunes.html @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + @for m in fortunes + + + + + @end +
idmessage
@m.id@m.message
+ + diff --git a/frameworks/V/veb_brmassa/veb-my/index.html b/frameworks/V/veb_brmassa/veb-my/index.html new file mode 100644 index 00000000000..473e1db30bd --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/index.html @@ -0,0 +1,79 @@ + + + + V web server + + + +

V web server

+

+ Welcome to V lang example web server + for + + Web Framework Benchmarks + +

+ +

Settings

+ + +

Local Setup

+ + +

Benchmark Tests

+ + + diff --git a/frameworks/V/veb_brmassa/veb-my/main.v b/frameworks/V/veb_brmassa/veb-my/main.v new file mode 100644 index 00000000000..66a1d6578f8 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/main.v @@ -0,0 +1,25 @@ +import veb +import time + +pub struct Context { + veb.Context +} + +// Program entry point +fn main() { + mut app := &App{} + app.use(handler: header) + + db_init(mut app) + defer { + app.db.close() + } + + veb.run[App, Context](mut app, 8080) +} + +pub fn header(mut ctx Context) bool { + ctx.set_header(.date, time.now().utc_string()) + ctx.set_header(.server, 'veb') + return true +} diff --git a/frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v b/frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v new file mode 100644 index 00000000000..7005e5c778d --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v @@ -0,0 +1,68 @@ +import veb +import arrays + +struct Fortune { + id int @[primary; sql: serial] + message string +} + +// Fortunes page. It will automatically output using `fortunes.html` +pub fn (app &App) fortunes(mut ctx Context) veb.Result { + fortunes_map := app.db.exec('SELECT id, message FROM ${db_table_fortune}') or { + return ctx.server_error('Failed to fetch ${db_table_fortune}: ${err}') + } + + mut fortunes := []Fortune{} + for fortune in fortunes_map { + id := fortune.vals[0] + message := fortune.vals[1] + fortunes << convert_fortune(id, message) + } + + fortunes << Fortune{ + id: 0 + message: 'Additional fortune added at request time.' + } + + fortunes.sort_with_compare(fn (a &Fortune, b &Fortune) int { + return a.message.compare(b.message) + }) + + ctx.content_type = 'text/html; charset=UTF-8' + // ctx.set_header(.content_type, content_type) // cannot be used since it's removing the "charset=UTF-8" + return $veb.html() +} + +fn db_init_fortune(app App, mut ctx Context) (int, string) { + app.db.exec('DROP TABLE IF EXISTS ${db_table_fortune}') or { + return 1, 'Failed to drop existing Fortune table' + } + app.db.exec('CREATE TABLE ${db_table_fortune} ( + id SERIAL PRIMARY KEY, + message ${db_connector_varchar} NOT NULL + )') or { + return 1, 'Failed to create ${db_table_fortune} table' + } + + mut messages := []string{} + messages << 'fortune: No such file or directory' + messages << 'A computer scientist is someone who fixes things that arent broken.' // TODO: escape the aren't + messages << 'After enough decimal places, nobody gives a damn.' + messages << 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1' + messages << 'A computer program does what you tell it to do, not what you want it to do.' + messages << 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen' + messages << 'Any program that runs right is obsolete.' + messages << 'A list is only as strong as its weakest link. — Donald Knuth' + messages << 'Feature: A bug with seniority.' + messages << 'Computers make very fast, very accurate mistakes.' + messages << '' + messages << 'フレームワークのベンチマーク' + message := arrays.join_to_string(messages, "'),('", fn (it string) string { + return it + }) + app.db.exec('INSERT INTO ${db_table_fortune} (message) VALUES (\'${message}\')') or { + return 1, 'Failed to insert ${db_table_fortune} messages: ${err}' + } + + return 0, 'Fortune table reset and filled with default rows' +} diff --git a/frameworks/V/veb_brmassa/veb-my/requests_db_world.v b/frameworks/V/veb_brmassa/veb-my/requests_db_world.v new file mode 100644 index 00000000000..2eb84aa041c --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/requests_db_world.v @@ -0,0 +1,107 @@ +module main + +import rand +import veb +import arrays + +struct World { + id int @[primary; sql: serial] +mut: + randomnumber int +} + +pub fn (app &App) db(mut ctx Context) veb.Result { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + return ctx.json(world) +} + +pub fn (app &App) queries(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + worlds << world + } + + return ctx.json(worlds) +} + +@[inline] +fn get_world(app &App, id int) !World { + world_map := app.db.exec_one('SELECT id, randomNumber FROM ${db_table_world} WHERE id = ${id}') or { + return error('Failed to fetch world: ${err}') + } + + random_number := world_map.vals[1] + world := convert_option(id, random_number) + + return world +} + +@[inline] +fn get_query(ctx Context, index string) int { + mut queries := ctx.query[index].int() + return if queries < 1 { + 1 + } else if queries > 500 { + 500 + } else { + queries + } +} + +pub fn (app &App) update(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + worlds << world + } + + for mut world in worlds { + world.randomnumber = rand.int_in_range(1, 10001) or { panic(err) } + // MySQL implementation fails to use exec_param_many, so I've opted to interpolate manually + app.db.exec('UPDATE ${db_table_world} SET randomNumber = ${world.randomnumber} WHERE id = ${world.id}') or { + return ctx.server_error('Database update failed: ${err}') + } + // app.db.exec_param_many('UPDATE ${db_table_world} SET randomNumber = $1 WHERE id = $2', + // [ + // world.randomnumber.str(), + // world.id.str(), + // ]) or { return ctx.server_error('Database update failed: ${err}') } + } + + return ctx.json(worlds) +} + +fn db_init_world(app App, mut ctx Context) (int, string) { + app.db.exec('DROP TABLE IF EXISTS ${db_table_world}') or { + return 1, 'Failed to drop existing world table: ${err}' + } + app.db.exec('CREATE TABLE ${db_table_world} ( + id SERIAL PRIMARY KEY, + randomNumber INT NOT NULL + )') or { + return 1, 'Failed to create world table: ${err}' + } + + mut random_numbers := []int{} + for _ in 0 .. 10000 { + random_numbers << rand.int_in_range(1, 10001) or { + return 1, 'Random number generation failed: ${err}' + } + } + numbers := arrays.join_to_string(random_numbers, '),(', fn (it int) string { + return it.str() + }) + app.db.exec('INSERT INTO ${db_table_world} (randomNumber) VALUES (${numbers})') or { + return 1, 'Failed to insert world values: ${err}' + } + + return 0, 'World table reset and filled with 10000 rows' +} diff --git a/frameworks/V/veb_brmassa/veb-my/requests_plain.v b/frameworks/V/veb_brmassa/veb-my/requests_plain.v new file mode 100644 index 00000000000..0a866fc9859 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/requests_plain.v @@ -0,0 +1,17 @@ +import veb + +pub fn (app &App) plaintext(mut ctx Context) veb.Result { + return ctx.text('Hello, World!') +} + +pub fn (app &App) json(mut ctx Context) veb.Result { + data := { + 'message': 'Hello, World!' + } + return ctx.json(data) +} + +// Home page. It will automatically output using `index.html` +pub fn (app &App) index(mut ctx Context) veb.Result { + return $veb.html() +} diff --git a/frameworks/V/veb_brmassa/veb-my/setup_local_db.v b/frameworks/V/veb_brmassa/veb-my/setup_local_db.v new file mode 100644 index 00000000000..a85f813606a --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-my/setup_local_db.v @@ -0,0 +1,20 @@ +import veb + +// Populate the local database +pub fn (app &App) db_init(mut ctx Context) veb.Result { + mut messages := []string{} + mut error, mut msg := db_init_world(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + error, msg = db_init_fortune(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + + return ctx.text(messages.join_lines()) +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/_setup.v b/frameworks/V/veb_brmassa/veb-pg-orm/_setup.v new file mode 100644 index 00000000000..a3334c7eb74 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/_setup.v @@ -0,0 +1,51 @@ +import veb +import os +import db.pg as db_module + +const db_connector = 'PostgreSQL' +const db_connector_module = 'db.pg' +const db_connector_port = 5432 +const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) +const db_table_world = '"world"' +const db_table_fortune = '"fortune"' + +@[heap] +pub struct App { + veb.Middleware[Context] +pub mut: + db db_module.DB +} + +@[inline] +fn db_init(mut app App) { + mut db_host := os.environ()['db_host'] + if db_host == '' { + db_host = 'tfb-database' + } + + config := db_module.Config{ + host: db_host + port: db_connector_port + user: 'benchmarkdbuser' + password: 'benchmarkdbpass' + dbname: 'hello_world' + } + app.db = db_module.connect(config) or { panic(err) } + // or { return ctx.server_error('Database connection failed') } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_option(id int, random_number ?string) World { + return World{ + id: id + randomnumber: random_number or { '' }.int() + } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_fortune(id ?string, random_number ?string) Fortune { + return Fortune{ + id: id or { '' }.int() + message: random_number or { '' } + } +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html b/frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html new file mode 100644 index 00000000000..a6e6162c1f2 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + @for m in fortunes + + + + + @end +
idmessage
@m.id@m.message
+ + diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/index.html b/frameworks/V/veb_brmassa/veb-pg-orm/index.html new file mode 100644 index 00000000000..0c7536f270c --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/index.html @@ -0,0 +1,79 @@ + + + + V web server + + + +

V web server

+

+ Welcome to V lang example web server + for + + Web Framework Benchmarks + +

+ +

Settings

+ + +

Local Setup

+ + +

Benchmark Tests

+ + + diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/main.v b/frameworks/V/veb_brmassa/veb-pg-orm/main.v new file mode 100644 index 00000000000..66a1d6578f8 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/main.v @@ -0,0 +1,25 @@ +import veb +import time + +pub struct Context { + veb.Context +} + +// Program entry point +fn main() { + mut app := &App{} + app.use(handler: header) + + db_init(mut app) + defer { + app.db.close() + } + + veb.run[App, Context](mut app, 8080) +} + +pub fn header(mut ctx Context) bool { + ctx.set_header(.date, time.now().utc_string()) + ctx.set_header(.server, 'veb') + return true +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v b/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v new file mode 100644 index 00000000000..905448b82b6 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v @@ -0,0 +1,71 @@ +module main + +import veb + +struct Fortune { + id int @[primary; sql: serial] + message string +} + +// Fortunes page. It will automatically output using `fortunes.html` +pub fn (app &App) fortunes(mut ctx Context) veb.Result { + fortunes_map := sql app.db { + select from Fortune + } or { return ctx.server_error('Database query failed') } + + mut fortunes := []Fortune{} + for fortune in fortunes_map { + fortunes << fortune + } + + fortunes << Fortune{ + id: 0 + message: 'Additional fortune added at request time.' + } + + fortunes.sort_with_compare(fn (a &Fortune, b &Fortune) int { + return a.message.compare(b.message) + }) + + ctx.content_type = 'text/html; charset=UTF-8' + // ctx.set_header(.content_type, content_type) // cannot be used since it's removing the "charset=UTF-8" + return $veb.html() +} + +fn db_init_fortune(app App, mut ctx Context) (int, string) { + sql app.db { + create table Fortune + } or { return 1, 'Failed to create Fortune table: ${err}' } + + sql app.db { + delete from Fortune where id > 0 + } or { return 1, 'Failed to clear Fortune table: ${err}' } + + mut messages := []string{} + messages << 'fortune: No such file or directory' + messages << 'A computer scientist is someone who fixes things that arent broken.' // TODO: escape the aren't + messages << 'After enough decimal places, nobody gives a damn.' + messages << 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1' + messages << 'A computer program does what you tell it to do, not what you want it to do.' + messages << 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen' + messages << 'Any program that runs right is obsolete.' + messages << 'A list is only as strong as its weakest link. — Donald Knuth' + messages << 'Feature: A bug with seniority.' + messages << 'Computers make very fast, very accurate mistakes.' + messages << '' + messages << 'フレームワークのベンチマーク' + + mut i := 0 + for message in messages { + i = i + 1 + fortune := Fortune{ + id: i // unfortunately, the insertion in ORM will fail if the id is null + message: message + } + sql app.db { + insert fortune into Fortune + } or { return 1, 'Failed to insert Fortune message: ${err}' } + } + + return 0, 'Fortune table reset and filled with default rows' +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v b/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v new file mode 100644 index 00000000000..12dfffdc93c --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v @@ -0,0 +1,95 @@ +module main + +import rand +import veb + +// required in ORM scenarios because it tries to lowercase the table name +// @[table: 'World'] +struct World { + id int @[primary; sql: serial] +mut: + randomnumber int +} + +pub fn (app &App) db(mut ctx Context) veb.Result { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + + return ctx.json(world.first()) +} + +pub fn (app &App) queries(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + worlds << world + } + + return ctx.json(worlds) +} + +pub fn (app &App) update(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := sql app.db { + select from World where id == id + } or { return ctx.server_error('Failed to fetch world') } + worlds << world + } + + for mut world in worlds { + world.randomnumber = rand.int_in_range(1, 10001) or { panic(err) } + sql app.db { + update World set randomnumber = world.randomnumber where id == world.id + } or { return ctx.server_error('Database update failed') } + } + + return ctx.json(worlds) +} + +@[inline] +fn get_query(ctx Context, index string) int { + mut queries := ctx.query[index].int() + return if queries < 1 { + 1 + } else if queries > 500 { + 500 + } else { + queries + } +} + +fn db_init_world(app App, mut ctx Context) (int, string) { + sql app.db { + create table World + } or { return 1, 'Failed to create World table: ${err}' } + + sql app.db { + delete from World where id > 0 + } or { return 1, 'Failed to clear World table: ${err}' } + + for i in 0 .. 10000 { + world := World{ + id: i + 1 // unfortunately, the insertion in ORM will fail if the id is null + randomnumber: rand.int_in_range(1, 10001) or { 1 } + } + + // ORM only insert one at a time + sql app.db { + insert world into World + } or { return 1, 'Failed to insert World values: ${err}' } + } + + return 0, 'World table reset and filled with 10000 rows' +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v b/frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v new file mode 100644 index 00000000000..0a866fc9859 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v @@ -0,0 +1,17 @@ +import veb + +pub fn (app &App) plaintext(mut ctx Context) veb.Result { + return ctx.text('Hello, World!') +} + +pub fn (app &App) json(mut ctx Context) veb.Result { + data := { + 'message': 'Hello, World!' + } + return ctx.json(data) +} + +// Home page. It will automatically output using `index.html` +pub fn (app &App) index(mut ctx Context) veb.Result { + return $veb.html() +} diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v b/frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v new file mode 100644 index 00000000000..2ec6c48b774 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v @@ -0,0 +1,22 @@ +module main + +import veb + +// Populate the local database +pub fn (app &App) db_init(mut ctx Context) veb.Result { + mut messages := []string{} + mut error, mut msg := db_init_world(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + error, msg = db_init_fortune(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + + return ctx.text(messages.join_lines()) +} diff --git a/frameworks/V/veb_brmassa/veb-pg/_setup.v b/frameworks/V/veb_brmassa/veb-pg/_setup.v new file mode 100644 index 00000000000..a3334c7eb74 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/_setup.v @@ -0,0 +1,51 @@ +import veb +import os +import db.pg as db_module + +const db_connector = 'PostgreSQL' +const db_connector_module = 'db.pg' +const db_connector_port = 5432 +const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) +const db_table_world = '"world"' +const db_table_fortune = '"fortune"' + +@[heap] +pub struct App { + veb.Middleware[Context] +pub mut: + db db_module.DB +} + +@[inline] +fn db_init(mut app App) { + mut db_host := os.environ()['db_host'] + if db_host == '' { + db_host = 'tfb-database' + } + + config := db_module.Config{ + host: db_host + port: db_connector_port + user: 'benchmarkdbuser' + password: 'benchmarkdbpass' + dbname: 'hello_world' + } + app.db = db_module.connect(config) or { panic(err) } + // or { return ctx.server_error('Database connection failed') } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_option(id int, random_number ?string) World { + return World{ + id: id + randomnumber: random_number or { '' }.int() + } +} + +// MySQL implementation return values while Postgres return options. Unify all as options +fn convert_fortune(id ?string, random_number ?string) Fortune { + return Fortune{ + id: id or { '' }.int() + message: random_number or { '' } + } +} diff --git a/frameworks/V/veb_brmassa/veb-pg/fortunes.html b/frameworks/V/veb_brmassa/veb-pg/fortunes.html new file mode 100644 index 00000000000..a6e6162c1f2 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/fortunes.html @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + @for m in fortunes + + + + + @end +
idmessage
@m.id@m.message
+ + diff --git a/frameworks/V/veb_brmassa/veb-pg/index.html b/frameworks/V/veb_brmassa/veb-pg/index.html new file mode 100644 index 00000000000..473e1db30bd --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/index.html @@ -0,0 +1,79 @@ + + + + V web server + + + +

V web server

+

+ Welcome to V lang example web server + for + + Web Framework Benchmarks + +

+ +

Settings

+ + +

Local Setup

+ + +

Benchmark Tests

+ + + diff --git a/frameworks/V/veb_brmassa/veb-pg/main.v b/frameworks/V/veb_brmassa/veb-pg/main.v new file mode 100644 index 00000000000..66a1d6578f8 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/main.v @@ -0,0 +1,25 @@ +import veb +import time + +pub struct Context { + veb.Context +} + +// Program entry point +fn main() { + mut app := &App{} + app.use(handler: header) + + db_init(mut app) + defer { + app.db.close() + } + + veb.run[App, Context](mut app, 8080) +} + +pub fn header(mut ctx Context) bool { + ctx.set_header(.date, time.now().utc_string()) + ctx.set_header(.server, 'veb') + return true +} diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v b/frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v new file mode 100644 index 00000000000..7005e5c778d --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v @@ -0,0 +1,68 @@ +import veb +import arrays + +struct Fortune { + id int @[primary; sql: serial] + message string +} + +// Fortunes page. It will automatically output using `fortunes.html` +pub fn (app &App) fortunes(mut ctx Context) veb.Result { + fortunes_map := app.db.exec('SELECT id, message FROM ${db_table_fortune}') or { + return ctx.server_error('Failed to fetch ${db_table_fortune}: ${err}') + } + + mut fortunes := []Fortune{} + for fortune in fortunes_map { + id := fortune.vals[0] + message := fortune.vals[1] + fortunes << convert_fortune(id, message) + } + + fortunes << Fortune{ + id: 0 + message: 'Additional fortune added at request time.' + } + + fortunes.sort_with_compare(fn (a &Fortune, b &Fortune) int { + return a.message.compare(b.message) + }) + + ctx.content_type = 'text/html; charset=UTF-8' + // ctx.set_header(.content_type, content_type) // cannot be used since it's removing the "charset=UTF-8" + return $veb.html() +} + +fn db_init_fortune(app App, mut ctx Context) (int, string) { + app.db.exec('DROP TABLE IF EXISTS ${db_table_fortune}') or { + return 1, 'Failed to drop existing Fortune table' + } + app.db.exec('CREATE TABLE ${db_table_fortune} ( + id SERIAL PRIMARY KEY, + message ${db_connector_varchar} NOT NULL + )') or { + return 1, 'Failed to create ${db_table_fortune} table' + } + + mut messages := []string{} + messages << 'fortune: No such file or directory' + messages << 'A computer scientist is someone who fixes things that arent broken.' // TODO: escape the aren't + messages << 'After enough decimal places, nobody gives a damn.' + messages << 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1' + messages << 'A computer program does what you tell it to do, not what you want it to do.' + messages << 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen' + messages << 'Any program that runs right is obsolete.' + messages << 'A list is only as strong as its weakest link. — Donald Knuth' + messages << 'Feature: A bug with seniority.' + messages << 'Computers make very fast, very accurate mistakes.' + messages << '' + messages << 'フレームワークのベンチマーク' + message := arrays.join_to_string(messages, "'),('", fn (it string) string { + return it + }) + app.db.exec('INSERT INTO ${db_table_fortune} (message) VALUES (\'${message}\')') or { + return 1, 'Failed to insert ${db_table_fortune} messages: ${err}' + } + + return 0, 'Fortune table reset and filled with default rows' +} diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_db_world.v b/frameworks/V/veb_brmassa/veb-pg/requests_db_world.v new file mode 100644 index 00000000000..2eb84aa041c --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/requests_db_world.v @@ -0,0 +1,107 @@ +module main + +import rand +import veb +import arrays + +struct World { + id int @[primary; sql: serial] +mut: + randomnumber int +} + +pub fn (app &App) db(mut ctx Context) veb.Result { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + return ctx.json(world) +} + +pub fn (app &App) queries(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + worlds << world + } + + return ctx.json(worlds) +} + +@[inline] +fn get_world(app &App, id int) !World { + world_map := app.db.exec_one('SELECT id, randomNumber FROM ${db_table_world} WHERE id = ${id}') or { + return error('Failed to fetch world: ${err}') + } + + random_number := world_map.vals[1] + world := convert_option(id, random_number) + + return world +} + +@[inline] +fn get_query(ctx Context, index string) int { + mut queries := ctx.query[index].int() + return if queries < 1 { + 1 + } else if queries > 500 { + 500 + } else { + queries + } +} + +pub fn (app &App) update(mut ctx Context) veb.Result { + queries := get_query(ctx, 'q') + + mut worlds := []World{} + for _ in 0 .. queries { + id := rand.int_in_range(1, 10001) or { panic(err) } + world := get_world(app, id) or { return ctx.server_error('${err}') } + worlds << world + } + + for mut world in worlds { + world.randomnumber = rand.int_in_range(1, 10001) or { panic(err) } + // MySQL implementation fails to use exec_param_many, so I've opted to interpolate manually + app.db.exec('UPDATE ${db_table_world} SET randomNumber = ${world.randomnumber} WHERE id = ${world.id}') or { + return ctx.server_error('Database update failed: ${err}') + } + // app.db.exec_param_many('UPDATE ${db_table_world} SET randomNumber = $1 WHERE id = $2', + // [ + // world.randomnumber.str(), + // world.id.str(), + // ]) or { return ctx.server_error('Database update failed: ${err}') } + } + + return ctx.json(worlds) +} + +fn db_init_world(app App, mut ctx Context) (int, string) { + app.db.exec('DROP TABLE IF EXISTS ${db_table_world}') or { + return 1, 'Failed to drop existing world table: ${err}' + } + app.db.exec('CREATE TABLE ${db_table_world} ( + id SERIAL PRIMARY KEY, + randomNumber INT NOT NULL + )') or { + return 1, 'Failed to create world table: ${err}' + } + + mut random_numbers := []int{} + for _ in 0 .. 10000 { + random_numbers << rand.int_in_range(1, 10001) or { + return 1, 'Random number generation failed: ${err}' + } + } + numbers := arrays.join_to_string(random_numbers, '),(', fn (it int) string { + return it.str() + }) + app.db.exec('INSERT INTO ${db_table_world} (randomNumber) VALUES (${numbers})') or { + return 1, 'Failed to insert world values: ${err}' + } + + return 0, 'World table reset and filled with 10000 rows' +} diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_plain.v b/frameworks/V/veb_brmassa/veb-pg/requests_plain.v new file mode 100644 index 00000000000..0a866fc9859 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/requests_plain.v @@ -0,0 +1,17 @@ +import veb + +pub fn (app &App) plaintext(mut ctx Context) veb.Result { + return ctx.text('Hello, World!') +} + +pub fn (app &App) json(mut ctx Context) veb.Result { + data := { + 'message': 'Hello, World!' + } + return ctx.json(data) +} + +// Home page. It will automatically output using `index.html` +pub fn (app &App) index(mut ctx Context) veb.Result { + return $veb.html() +} diff --git a/frameworks/V/veb_brmassa/veb-pg/setup_local_db.v b/frameworks/V/veb_brmassa/veb-pg/setup_local_db.v new file mode 100644 index 00000000000..a85f813606a --- /dev/null +++ b/frameworks/V/veb_brmassa/veb-pg/setup_local_db.v @@ -0,0 +1,20 @@ +import veb + +// Populate the local database +pub fn (app &App) db_init(mut ctx Context) veb.Result { + mut messages := []string{} + mut error, mut msg := db_init_world(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + error, msg = db_init_fortune(app, mut ctx) + if error == 0 { + messages << msg + } else { + return ctx.server_error(msg) + } + + return ctx.text(messages.join_lines()) +} diff --git a/frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile new file mode 100644 index 00000000000..f24a2cc09aa --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-my/* ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile new file mode 100644 index 00000000000..d68d9ea6f78 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-my-orm/* ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile new file mode 100644 index 00000000000..fa761b7d33e --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-pg/* ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile new file mode 100644 index 00000000000..acd8e501fbd --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-pg-orm/* ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile new file mode 100644 index 00000000000..c45d0ee73a3 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-pg/* ./ +RUN v -prod -o veb . + +EXPOSE 8080 +CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile new file mode 100644 index 00000000000..e0f8333b2a1 --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile @@ -0,0 +1,11 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-pg/* ./ +COPY run.sh ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD sh run.sh diff --git a/frameworks/V/veb_brmassa/veb_brmassa.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa.dockerfile new file mode 100644 index 00000000000..fa761b7d33e --- /dev/null +++ b/frameworks/V/veb_brmassa/veb_brmassa.dockerfile @@ -0,0 +1,10 @@ +FROM thevlang/vlang:debian-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev + +WORKDIR /app +COPY ./veb-pg/* ./ +RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . + +EXPOSE 8080 +CMD ./veb From 0b0e3339a27f91e0da78ffa517d87c96edb99723 Mon Sep 17 00:00:00 2001 From: brmassa Date: Tue, 10 Jun 2025 12:42:20 -0500 Subject: [PATCH 2/3] feat: veb --- frameworks/V/pico.v/benchmark_config.json | 19 +++ .../V/pico.v/pico.v-optimized.dockerfile | 15 ++ frameworks/V/pico.v/pico.v.dockerfile | 2 +- frameworks/V/picoev/benchmark_config.json | 45 ++++++ frameworks/V/picoev/main.v | 61 ++++++++ frameworks/V/picoev/picoev | Bin 0 -> 848687 bytes .../V/picoev/picoev-optimized.dockerfile | 9 ++ frameworks/V/picoev/picoev.dockerfile | 9 ++ frameworks/V/{veb_brmassa => picoev}/run.sh | 2 +- frameworks/V/veb/README.md | 58 ++++--- frameworks/V/veb/benchmark_config.json | 119 +++++++++++++- frameworks/V/veb/config.toml | 19 --- frameworks/V/veb/fortunes.html | 12 -- frameworks/V/veb/main.v | 103 ------------ frameworks/V/veb/run.sh | 4 +- .../veb-compilation.dockerfile} | 0 .../veb-my-orm.dockerfile} | 2 +- .../{veb_brmassa => veb}/veb-my-orm/_setup.v | 3 +- .../veb-my-orm/fortunes.html | 0 .../veb-my-orm/index.html | 0 .../veb-pg => veb/veb-my-orm}/main.v | 2 +- .../veb-my-orm}/requests_db_fortune.v | 1 + .../veb-my-orm}/requests_db_world.v | 2 +- .../veb-my-orm/requests_plain.v | 0 .../veb-my-orm/setup_local_db.v | 0 .../veb-my.dockerfile} | 2 +- .../V/{veb_brmassa => veb}/veb-my/_setup.v | 5 +- .../{veb_brmassa => veb}/veb-my/fortunes.html | 0 .../V/{veb_brmassa => veb}/veb-my/index.html | 0 .../veb-my-orm => veb/veb-my}/main.v | 2 +- .../veb-my/requests_db_fortune.v | 0 .../veb-my/requests_db_world.v | 0 .../veb-my/requests_plain.v | 0 .../veb-my/setup_local_db.v | 0 .../veb-optimized.dockerfile} | 2 +- .../veb-pg-orm.dockerfile} | 2 +- .../{veb_brmassa => veb}/veb-pg-orm/_setup.v | 1 - .../veb-pg-orm/fortunes.html | 0 .../veb-pg => veb/veb-pg-orm}/index.html | 0 .../V/{veb_brmassa => veb}/veb-pg-orm/main.v | 2 +- .../veb-pg-orm}/requests_db_fortune.v | 10 +- .../veb-pg-orm}/requests_db_world.v | 13 +- .../veb-pg-orm/requests_plain.v | 0 .../veb-pg-orm/setup_local_db.v | 0 .../veb-pg.dockerfile} | 0 .../V/{veb_brmassa => veb}/veb-pg/_setup.v | 1 - .../{veb_brmassa => veb}/veb-pg/fortunes.html | 0 .../veb-pg-orm => veb/veb-pg}/index.html | 14 +- .../{veb_brmassa/veb-my => veb/veb-pg}/main.v | 2 +- .../veb-pg/requests_db_fortune.v | 0 .../veb-pg/requests_db_world.v | 0 .../veb-pg/requests_plain.v | 0 .../veb-pg/setup_local_db.v | 0 frameworks/V/veb/veb.dockerfile | 9 +- frameworks/V/veb_brmassa/README.md | 66 -------- .../V/veb_brmassa/benchmark_config.json | 147 ------------------ .../V/veb_brmassa/veb_brmassa.dockerfile | 10 -- res4.md | 40 +++++ res_picoev_1.md | 13 ++ res_picov.md | 13 ++ res_total.md | 39 +++++ res_veb_brmassa.md | 35 +++++ res_veb_opt.md | 13 ++ result_merge.py | 110 +++++++++++++ result_parse.py | 120 ++++++++++++++ veb_brmassa_1.md | 35 +++++ veb_brmassa_pg.md | 35 +++++ 67 files changed, 807 insertions(+), 421 deletions(-) create mode 100644 frameworks/V/pico.v/pico.v-optimized.dockerfile create mode 100644 frameworks/V/picoev/benchmark_config.json create mode 100644 frameworks/V/picoev/main.v create mode 100644 frameworks/V/picoev/picoev create mode 100644 frameworks/V/picoev/picoev-optimized.dockerfile create mode 100644 frameworks/V/picoev/picoev.dockerfile rename frameworks/V/{veb_brmassa => picoev}/run.sh (70%) delete mode 100644 frameworks/V/veb/config.toml delete mode 100644 frameworks/V/veb/fortunes.html delete mode 100644 frameworks/V/veb/main.v rename frameworks/V/{veb_brmassa/veb_brmassa-pg.dockerfile => veb/veb-compilation.dockerfile} (100%) rename frameworks/V/{veb_brmassa/veb_brmassa-my_orm.dockerfile => veb/veb-my-orm.dockerfile} (63%) rename frameworks/V/{veb_brmassa => veb}/veb-my-orm/_setup.v (94%) rename frameworks/V/{veb_brmassa => veb}/veb-my-orm/fortunes.html (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my-orm/index.html (100%) rename frameworks/V/{veb_brmassa/veb-pg => veb/veb-my-orm}/main.v (89%) rename frameworks/V/{veb_brmassa/veb-pg-orm => veb/veb-my-orm}/requests_db_fortune.v (99%) rename frameworks/V/{veb_brmassa/veb-pg-orm => veb/veb-my-orm}/requests_db_world.v (99%) rename frameworks/V/{veb_brmassa => veb}/veb-my-orm/requests_plain.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my-orm/setup_local_db.v (100%) rename frameworks/V/{veb_brmassa/veb_brmassa-my.dockerfile => veb/veb-my.dockerfile} (62%) rename frameworks/V/{veb_brmassa => veb}/veb-my/_setup.v (89%) rename frameworks/V/{veb_brmassa => veb}/veb-my/fortunes.html (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my/index.html (100%) rename frameworks/V/{veb_brmassa/veb-my-orm => veb/veb-my}/main.v (89%) rename frameworks/V/{veb_brmassa => veb}/veb-my/requests_db_fortune.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my/requests_db_world.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my/requests_plain.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-my/setup_local_db.v (100%) rename frameworks/V/{veb_brmassa/veb_brmassa-run.dockerfile => veb/veb-optimized.dockerfile} (65%) rename frameworks/V/{veb_brmassa/veb_brmassa-pg_orm.dockerfile => veb/veb-pg-orm.dockerfile} (63%) rename frameworks/V/{veb_brmassa => veb}/veb-pg-orm/_setup.v (94%) rename frameworks/V/{veb_brmassa => veb}/veb-pg-orm/fortunes.html (100%) rename frameworks/V/{veb_brmassa/veb-pg => veb/veb-pg-orm}/index.html (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg-orm/main.v (89%) rename frameworks/V/{veb_brmassa/veb-my-orm => veb/veb-pg-orm}/requests_db_fortune.v (86%) rename frameworks/V/{veb_brmassa/veb-my-orm => veb/veb-pg-orm}/requests_db_world.v (83%) rename frameworks/V/{veb_brmassa => veb}/veb-pg-orm/requests_plain.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg-orm/setup_local_db.v (100%) rename frameworks/V/{veb_brmassa/veb_brmassa-pure.dockerfile => veb/veb-pg.dockerfile} (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/_setup.v (94%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/fortunes.html (100%) rename frameworks/V/{veb_brmassa/veb-pg-orm => veb/veb-pg}/index.html (84%) rename frameworks/V/{veb_brmassa/veb-my => veb/veb-pg}/main.v (89%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/requests_db_fortune.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/requests_db_world.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/requests_plain.v (100%) rename frameworks/V/{veb_brmassa => veb}/veb-pg/setup_local_db.v (100%) delete mode 100644 frameworks/V/veb_brmassa/README.md delete mode 100644 frameworks/V/veb_brmassa/benchmark_config.json delete mode 100644 frameworks/V/veb_brmassa/veb_brmassa.dockerfile create mode 100644 res4.md create mode 100644 res_picoev_1.md create mode 100644 res_picov.md create mode 100644 res_total.md create mode 100644 res_veb_brmassa.md create mode 100644 res_veb_opt.md create mode 100644 result_merge.py create mode 100644 result_parse.py create mode 100644 veb_brmassa_1.md create mode 100644 veb_brmassa_pg.md diff --git a/frameworks/V/pico.v/benchmark_config.json b/frameworks/V/pico.v/benchmark_config.json index a25d7a16ec8..ab705359dc4 100644 --- a/frameworks/V/pico.v/benchmark_config.json +++ b/frameworks/V/pico.v/benchmark_config.json @@ -20,6 +20,25 @@ "display_name": "pico.v", "notes": "", "versus": "None" + }, + "optimized": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "port": 8088, + "approach": "Realistic", + "classification": "Micro", + "database": "None", + "framework": "pico.v", + "language": "V", + "flavor": "None", + "orm": "None", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "pico.v", + "notes": "", + "versus": "None" } } ] diff --git a/frameworks/V/pico.v/pico.v-optimized.dockerfile b/frameworks/V/pico.v/pico.v-optimized.dockerfile new file mode 100644 index 00000000000..c56fd5acb59 --- /dev/null +++ b/frameworks/V/pico.v/pico.v-optimized.dockerfile @@ -0,0 +1,15 @@ +FROM syou/v-dev:0.1 + +WORKDIR /app + +COPY ./main.v run.sh ./ + +RUN git clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0.4 \ + && cd /app/src/picoev && git clone https://github.com/S-YOU/picoev src && cd src && git checkout v0.0.1 \ + && cd /app/src/picohttpparser && git clone https://github.com/S-YOU/picohttpparser src && cd src && git checkout v0.0.1 \ + && ln -s /app/src /root/.vmodules/syou \ + && cd /app && v -prod -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' main.v + +EXPOSE 8088 + +CMD sh run.sh diff --git a/frameworks/V/pico.v/pico.v.dockerfile b/frameworks/V/pico.v/pico.v.dockerfile index c56fd5acb59..1d7ed117f32 100644 --- a/frameworks/V/pico.v/pico.v.dockerfile +++ b/frameworks/V/pico.v/pico.v.dockerfile @@ -12,4 +12,4 @@ RUN git clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0 EXPOSE 8088 -CMD sh run.sh +CMD ./main diff --git a/frameworks/V/picoev/benchmark_config.json b/frameworks/V/picoev/benchmark_config.json new file mode 100644 index 00000000000..54f70474b44 --- /dev/null +++ b/frameworks/V/picoev/benchmark_config.json @@ -0,0 +1,45 @@ +{ + "framework": "picoev", + "tests": [ + { + "default": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "database": "None", + "framework": "picoev", + "language": "V", + "flavor": "None", + "orm": "None", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "picoev", + "notes": "", + "versus": "None" + }, + "optimized": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "database": "None", + "framework": "picoev", + "language": "V", + "flavor": "None", + "orm": "None", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "picoev optimized", + "notes": "", + "versus": "None" + } + } + ] +} diff --git a/frameworks/V/picoev/main.v b/frameworks/V/picoev/main.v new file mode 100644 index 00000000000..926924d9421 --- /dev/null +++ b/frameworks/V/picoev/main.v @@ -0,0 +1,61 @@ +import json +import picoev +import picohttpparser + +struct Message { + message string +} + +@[inline] +fn json_response(mut res picohttpparser.Response) string { + msg := Message{ + message: 'Hello, World!' + } + header_ok(mut res) + res.json() + return json.encode(msg) +} + +@[inline] +fn hello_response(mut res picohttpparser.Response) string { + header_ok(mut res) + res.plain() + return 'Hello, World!' +} + +@[inline] +fn index_response(mut res picohttpparser.Response) string { + header_ok(mut res) + res.html() + return 'Hello!\nplaintext\njson' +} + +fn callback(data voidptr, req picohttpparser.Request, mut res picohttpparser.Response) { + if req.method == 'GET' { + if req.path == '/plaintext' { + res.body(hello_response(mut res)) + } else if req.path == '/json' { + res.body(json_response(mut res)) + } else { + res.body(index_response(mut res)) + } + } else { + res.http_404() + } + res.end() +} + +fn header_ok(mut res picohttpparser.Response) { + res.http_ok() + res.header_server() + res.header_date() +} + +fn main() { + config := picoev.Config{ + cb: callback + } + println('Starting webserver on http://localhost:${config.port}/ ...') + mut server := picoev.new(config)! + server.serve() +} diff --git a/frameworks/V/picoev/picoev b/frameworks/V/picoev/picoev new file mode 100644 index 0000000000000000000000000000000000000000..40f0b1eedc8e034cc04283eb57034596b08f8856 GIT binary patch literal 848687 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 jb@YYo)yVdgNvaoo(1|-C7^yqTw_Veb's built-in features to create a web application. It's a slightly more complex example due to the fact i tried to reuse code for multiple scenarios. -All tests in a 95 lines [main.v] and a html [template](fortunes.html) -### Database +> NOTE: Cache test still to be properly implemented -PostgresQL +## Scenarios -## Test URLs -### JSON +We created some scenarios. One on each folder. All scenarios use **Veb** server, the V lang built-in web framework. -http://localhost:8080/json +Scenario | Run locally | Run inside Benchmark + --- | --- | --- +Veb with Postgres | `db_host="127.0.0.1" v run veb-pg/` | `./tfb --mode veb` +Veb with Postgres and ORM | `db_host="127.0.0.1" v run veb-pg-orm/` | `./tfb --mode veb-pg-orm` +Veb with MySQL/MariaDB | `db_host="127.0.0.1" v run veb-my/` | `./tfb --mode veb-my` +Veb with MySQL/MariaDB and ORM | `db_host="127.0.0.1" v run veb-my-orm/` | `./tfb --mode veb-my-orm` +Veb with Postgres (Optimized) | `db_host="127.0.0.1" v run veb-pg/` | `./tfb --mode veb-pg-optimized` +Veb with Postgres (Compilation flags) | `db_host="127.0.0.1" v run veb-pg/` | `./tfb --mode veb-compilation` -### PLAINTEXT +## Local Setup -http://localhost:8080/plaintext +in order to test the servers locally, you will need a database server and a database client. using container, you can use: -### DB +### Postgres: -http://localhost:8080/db +``` +docker run --name benckmark-postgres \ + -e POSTGRES_USER=benchmarkdbuser \ + -e POSTGRES_PASSWORD=benchmarkdbpass \ + -e POSTGRES_DB=hello_world \ + -p 5432:5432 \ + -d techempower/postgres:latest +``` -### QUERY +### MySQL/MariaDB: -http://localhost:8080/query?q= +``` +docker run --name benckmark-mysql \ + -e MYSQL_ROOT_PASSWORD=benchmarkdbpass \ + -e MYSQL_USER=benchmarkdbuser \ + -e MYSQL_PASSWORD=benchmarkdbpass \ + -e MYSQL_DATABASE=hello_world \ + -p 3306:3306 \ + -d techempower/mysql:latest +``` -### UPDATE +--- -http://localhost:8080/update?queries= - -### FORTUNES - -http://localhost:8080/fortunes +Created by Bruno Massa diff --git a/frameworks/V/veb/benchmark_config.json b/frameworks/V/veb/benchmark_config.json index e5ca19da42c..072c49b5891 100755 --- a/frameworks/V/veb/benchmark_config.json +++ b/frameworks/V/veb/benchmark_config.json @@ -1,5 +1,7 @@ { "framework": "veb", + "authors": ["Bruno Massa"], + "github": "https://github.com/brmassa/VTechEmpowerFrameworkBenchmarks", "tests": [ { "default": { @@ -9,21 +11,130 @@ "query_url": "/queries?q=", "fortune_url": "/fortunes", "update_url": "/update?q=", - "port": 8080, + "port": 8088, "approach": "Realistic", "classification": "Fullstack", "database": "Postgres", - "framework": "veb", + "framework": "Veb", "language": "V", "flavor": "None", "orm": "Micro", - "platform": "None", + "platform": "Veb", "webserver": "None", "os": "Linux", "database_os": "Linux", - "display_name": "veb", + "display_name": "Veb [pg]", "notes": "", "versus": "None" + }, + "pg-orm": { + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8088, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "Veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "Veb", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "Veb [pg-orm]", + "notes": "", + "versus": "None" + }, + "my": { + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8088, + "approach": "Realistic", + "classification": "Fullstack", + "database": "MySQL", + "framework": "Veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "Veb", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "Veb [my]", + "notes": "", + "versus": "None" + }, + "my-orm": { + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8088, + "approach": "Realistic", + "classification": "Fullstack", + "database": "MySQL", + "framework": "Veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "Veb", + "webserver": "", + "os": "Linux", + "database_os": "Linux", + "display_name": "Veb [my-orm]", + "notes": "", + "versus": "" + }, + "compilation": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8088, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "Veb", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "Veb", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "Veb [pg] compilation", + "notes": "", + "versus": "None" + }, + "optimized": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?q=", + "fortune_url": "/fortunes", + "update_url": "/update?q=", + "port": 8088, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "Veb taskset", + "language": "V", + "flavor": "None", + "orm": "Micro", + "platform": "Veb", + "webserver": "", + "os": "Linux", + "database_os": "Linux", + "display_name": "Veb [pg] optimized", + "notes": "", + "versus": "" } } ] diff --git a/frameworks/V/veb/config.toml b/frameworks/V/veb/config.toml deleted file mode 100644 index ea461db93e4..00000000000 --- a/frameworks/V/veb/config.toml +++ /dev/null @@ -1,19 +0,0 @@ -[framework] -name = "veb" - -[main] -urls.plaintext = "/plaintext" -urls.json = "/json" -urls.db = "/db" -urls.query = "/queries?q=" -urls.update = "/update?q=" -urls.fortune = "/fortunes" -approach = "Realistic" -classification = "Fullstack" -database = "Postgres" -database_os = "Linux" -os = "Linux" -orm = "Micro" -platform = "None" -webserver = "None" -versus = "None" diff --git a/frameworks/V/veb/fortunes.html b/frameworks/V/veb/fortunes.html deleted file mode 100644 index 51e1d42989a..00000000000 --- a/frameworks/V/veb/fortunes.html +++ /dev/null @@ -1,12 +0,0 @@ - - -Fortunes - - - -@for m in fortunes - -@end -
    idmessage
    @m.id@m.message
    - - \ No newline at end of file diff --git a/frameworks/V/veb/main.v b/frameworks/V/veb/main.v deleted file mode 100644 index 1fa0b3e5d0f..00000000000 --- a/frameworks/V/veb/main.v +++ /dev/null @@ -1,103 +0,0 @@ -import veb -import time -import rand -import db.pg - -pub fn (app &App) plaintext(mut ctx Context) veb.Result { - s := 'Hello, World!' - return ctx.text(s) -} - -pub fn (app &App) json(mut ctx Context) veb.Result { - obj := {'message': 'Hello, World!'} - return ctx.json(obj) -} - -struct World { - id int @[primary; sql: serial] -mut: - randomnumber int -} - -pub fn (app &App) db(mut ctx Context) veb.Result { - r := rand.int_in_range(1, 10000) or { return ctx.text('rand error') } - mut world := sql app.db { - select from World where id == r - } or { return ctx.text('db error') } - return ctx.json(world.first()) -} - -pub fn (app &App) queries(mut ctx Context) veb.Result { - mut q := ctx.query['q'].int() - if q < 1 { q = 1 } else if q > 500 { q = 500 } - mut world := []World{} - for _ in 0..q { - r := rand.int_in_range(1, 10000) or { return ctx.text('rand error') } - world << sql app.db { - select from World where id == r - } or { return ctx.text('db error') } - } - return ctx.json(world) -} - -pub fn (app &App) update(mut ctx Context) veb.Result { - mut q := ctx.query['q'].int() - if q < 1 { q = 1 } else if q > 500 { q = 500 } - mut world := []World{} - for _ in 0..q { - r := rand.int_in_range(1, 10000) or { return ctx.text('rand error') } - world << sql app.db { - select from World where id == r - } or { return ctx.text('db error') } - world.last().randomnumber = rand.int_in_range(1, 10000) or { return ctx.text('rand error') } - sql app.db { - update World set randomnumber = world.last().randomnumber where id == world.last().id - } or { return ctx.text('db error') } - } - return ctx.json(world) -} - -struct Fortune { - id int @[primary; sql: serial] - message string -} - -pub fn (app &App) fortunes(mut ctx Context) veb.Result { - mut fortunes := sql app.db { - select from Fortune - } or { return ctx.text('db error') } - fortunes.insert(0, Fortune{id: 0, message: 'Additional fortune added at request time.'}) - fortunes.sort(a.message < b.message) - ctx.content_type = 'text/html; charset=utf-8' - return $veb.html() -} - -pub struct Context { - veb.Context -} - -pub struct App { - veb.Middleware[Context] -pub mut: - db pg.DB -} - -pub fn header(mut ctx Context) bool { - ctx.set_header(.date, time.now().as_utc().custom_format('ddd, DD MMM YYYY HH:MM:ss') + ' GMT') - ctx.set_header(.server, 'veb') - return true -} - -fn main() { - mut app := &App{ - db: pg.connect(pg.Config{ - host: 'tfb-database' - port: 5432 - user: 'benchmarkdbuser' - password: 'benchmarkdbpass' - dbname: 'hello_world' - }) ! - } - app.use(handler: header) - veb.run[App, Context](mut app, 8080) -} diff --git a/frameworks/V/veb/run.sh b/frameworks/V/veb/run.sh index 5979570b9dc..9673d7f1cd3 100644 --- a/frameworks/V/veb/run.sh +++ b/frameworks/V/veb/run.sh @@ -1,7 +1,7 @@ #!/bin/sh -for i in $(seq 0 $(nproc)); do - taskset -c $i ./main & +for i in $(seq 0 $(($(nproc --all)-1))); do + taskset -c $i ./veb & done wait diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile b/frameworks/V/veb/veb-compilation.dockerfile similarity index 100% rename from frameworks/V/veb_brmassa/veb_brmassa-pg.dockerfile rename to frameworks/V/veb/veb-compilation.dockerfile diff --git a/frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile b/frameworks/V/veb/veb-my-orm.dockerfile similarity index 63% rename from frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile rename to frameworks/V/veb/veb-my-orm.dockerfile index d68d9ea6f78..b87f9874489 100644 --- a/frameworks/V/veb_brmassa/veb_brmassa-my_orm.dockerfile +++ b/frameworks/V/veb/veb-my-orm.dockerfile @@ -4,7 +4,7 @@ RUN apt update && \ WORKDIR /app COPY ./veb-my-orm/* ./ -RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . +RUN v -prod -o veb . EXPOSE 8080 CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb-my-orm/_setup.v b/frameworks/V/veb/veb-my-orm/_setup.v similarity index 94% rename from frameworks/V/veb_brmassa/veb-my-orm/_setup.v rename to frameworks/V/veb/veb-my-orm/_setup.v index 3afc27007aa..d1c695c435d 100644 --- a/frameworks/V/veb_brmassa/veb-my-orm/_setup.v +++ b/frameworks/V/veb/veb-my-orm/_setup.v @@ -6,6 +6,8 @@ const db_connector = 'MySQL' const db_connector_module = 'db.mysql' const db_connector_port = 3306 const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) +const db_table_world = '`world`' +const db_table_fortune = '`fortune`' @[heap] pub struct App { @@ -29,7 +31,6 @@ fn db_init(mut app App) { dbname: 'hello_world' } app.db = db_module.connect(config) or { panic(err) } - // or { return ctx.server_error('Database connection failed') } } // MySQL implementation return values while Postgres return options. Unify all as options diff --git a/frameworks/V/veb_brmassa/veb-my-orm/fortunes.html b/frameworks/V/veb/veb-my-orm/fortunes.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-my-orm/fortunes.html rename to frameworks/V/veb/veb-my-orm/fortunes.html diff --git a/frameworks/V/veb_brmassa/veb-my-orm/index.html b/frameworks/V/veb/veb-my-orm/index.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-my-orm/index.html rename to frameworks/V/veb/veb-my-orm/index.html diff --git a/frameworks/V/veb_brmassa/veb-pg/main.v b/frameworks/V/veb/veb-my-orm/main.v similarity index 89% rename from frameworks/V/veb_brmassa/veb-pg/main.v rename to frameworks/V/veb/veb-my-orm/main.v index 66a1d6578f8..873cf5054bf 100644 --- a/frameworks/V/veb_brmassa/veb-pg/main.v +++ b/frameworks/V/veb/veb-my-orm/main.v @@ -15,7 +15,7 @@ fn main() { app.db.close() } - veb.run[App, Context](mut app, 8080) + veb.run[App, Context](mut app, 8088) } pub fn header(mut ctx Context) bool { diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v b/frameworks/V/veb/veb-my-orm/requests_db_fortune.v similarity index 99% rename from frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v rename to frameworks/V/veb/veb-my-orm/requests_db_fortune.v index 905448b82b6..a40d493e836 100644 --- a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_fortune.v +++ b/frameworks/V/veb/veb-my-orm/requests_db_fortune.v @@ -2,6 +2,7 @@ module main import veb +@[table: 'fortune'] struct Fortune { id int @[primary; sql: serial] message string diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v b/frameworks/V/veb/veb-my-orm/requests_db_world.v similarity index 99% rename from frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v rename to frameworks/V/veb/veb-my-orm/requests_db_world.v index 12dfffdc93c..eb1e574d15d 100644 --- a/frameworks/V/veb_brmassa/veb-pg-orm/requests_db_world.v +++ b/frameworks/V/veb/veb-my-orm/requests_db_world.v @@ -4,7 +4,7 @@ import rand import veb // required in ORM scenarios because it tries to lowercase the table name -// @[table: 'World'] +@[table: 'world'] struct World { id int @[primary; sql: serial] mut: diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v b/frameworks/V/veb/veb-my-orm/requests_plain.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my-orm/requests_plain.v rename to frameworks/V/veb/veb-my-orm/requests_plain.v diff --git a/frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v b/frameworks/V/veb/veb-my-orm/setup_local_db.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my-orm/setup_local_db.v rename to frameworks/V/veb/veb-my-orm/setup_local_db.v diff --git a/frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile b/frameworks/V/veb/veb-my.dockerfile similarity index 62% rename from frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile rename to frameworks/V/veb/veb-my.dockerfile index f24a2cc09aa..f7595d76e20 100644 --- a/frameworks/V/veb_brmassa/veb_brmassa-my.dockerfile +++ b/frameworks/V/veb/veb-my.dockerfile @@ -4,7 +4,7 @@ RUN apt update && \ WORKDIR /app COPY ./veb-my/* ./ -RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . +RUN v -prod -o veb . EXPOSE 8080 CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb-my/_setup.v b/frameworks/V/veb/veb-my/_setup.v similarity index 89% rename from frameworks/V/veb_brmassa/veb-my/_setup.v rename to frameworks/V/veb/veb-my/_setup.v index ce83389d601..d1c695c435d 100644 --- a/frameworks/V/veb_brmassa/veb-my/_setup.v +++ b/frameworks/V/veb/veb-my/_setup.v @@ -6,8 +6,8 @@ const db_connector = 'MySQL' const db_connector_module = 'db.mysql' const db_connector_port = 3306 const db_connector_varchar = 'TEXT' // Postgres and MySQL differ the text field (used in fortune) -const db_table_world = '"world"' -const db_table_fortune = '"fortune"' +const db_table_world = '`world`' +const db_table_fortune = '`fortune`' @[heap] pub struct App { @@ -31,7 +31,6 @@ fn db_init(mut app App) { dbname: 'hello_world' } app.db = db_module.connect(config) or { panic(err) } - // or { return ctx.server_error('Database connection failed') } } // MySQL implementation return values while Postgres return options. Unify all as options diff --git a/frameworks/V/veb_brmassa/veb-my/fortunes.html b/frameworks/V/veb/veb-my/fortunes.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/fortunes.html rename to frameworks/V/veb/veb-my/fortunes.html diff --git a/frameworks/V/veb_brmassa/veb-my/index.html b/frameworks/V/veb/veb-my/index.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/index.html rename to frameworks/V/veb/veb-my/index.html diff --git a/frameworks/V/veb_brmassa/veb-my-orm/main.v b/frameworks/V/veb/veb-my/main.v similarity index 89% rename from frameworks/V/veb_brmassa/veb-my-orm/main.v rename to frameworks/V/veb/veb-my/main.v index 66a1d6578f8..873cf5054bf 100644 --- a/frameworks/V/veb_brmassa/veb-my-orm/main.v +++ b/frameworks/V/veb/veb-my/main.v @@ -15,7 +15,7 @@ fn main() { app.db.close() } - veb.run[App, Context](mut app, 8080) + veb.run[App, Context](mut app, 8088) } pub fn header(mut ctx Context) bool { diff --git a/frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v b/frameworks/V/veb/veb-my/requests_db_fortune.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/requests_db_fortune.v rename to frameworks/V/veb/veb-my/requests_db_fortune.v diff --git a/frameworks/V/veb_brmassa/veb-my/requests_db_world.v b/frameworks/V/veb/veb-my/requests_db_world.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/requests_db_world.v rename to frameworks/V/veb/veb-my/requests_db_world.v diff --git a/frameworks/V/veb_brmassa/veb-my/requests_plain.v b/frameworks/V/veb/veb-my/requests_plain.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/requests_plain.v rename to frameworks/V/veb/veb-my/requests_plain.v diff --git a/frameworks/V/veb_brmassa/veb-my/setup_local_db.v b/frameworks/V/veb/veb-my/setup_local_db.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-my/setup_local_db.v rename to frameworks/V/veb/veb-my/setup_local_db.v diff --git a/frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile b/frameworks/V/veb/veb-optimized.dockerfile similarity index 65% rename from frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile rename to frameworks/V/veb/veb-optimized.dockerfile index e0f8333b2a1..6a3b6961218 100644 --- a/frameworks/V/veb_brmassa/veb_brmassa-run.dockerfile +++ b/frameworks/V/veb/veb-optimized.dockerfile @@ -5,7 +5,7 @@ RUN apt update && \ WORKDIR /app COPY ./veb-pg/* ./ COPY run.sh ./ -RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . +RUN v -prod -o veb . EXPOSE 8080 CMD sh run.sh diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile b/frameworks/V/veb/veb-pg-orm.dockerfile similarity index 63% rename from frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile rename to frameworks/V/veb/veb-pg-orm.dockerfile index acd8e501fbd..64337e514d0 100644 --- a/frameworks/V/veb_brmassa/veb_brmassa-pg_orm.dockerfile +++ b/frameworks/V/veb/veb-pg-orm.dockerfile @@ -4,7 +4,7 @@ RUN apt update && \ WORKDIR /app COPY ./veb-pg-orm/* ./ -RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . +RUN v -prod -o veb . EXPOSE 8080 CMD ./veb diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/_setup.v b/frameworks/V/veb/veb-pg-orm/_setup.v similarity index 94% rename from frameworks/V/veb_brmassa/veb-pg-orm/_setup.v rename to frameworks/V/veb/veb-pg-orm/_setup.v index a3334c7eb74..117b8979ca8 100644 --- a/frameworks/V/veb_brmassa/veb-pg-orm/_setup.v +++ b/frameworks/V/veb/veb-pg-orm/_setup.v @@ -31,7 +31,6 @@ fn db_init(mut app App) { dbname: 'hello_world' } app.db = db_module.connect(config) or { panic(err) } - // or { return ctx.server_error('Database connection failed') } } // MySQL implementation return values while Postgres return options. Unify all as options diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html b/frameworks/V/veb/veb-pg-orm/fortunes.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg-orm/fortunes.html rename to frameworks/V/veb/veb-pg-orm/fortunes.html diff --git a/frameworks/V/veb_brmassa/veb-pg/index.html b/frameworks/V/veb/veb-pg-orm/index.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/index.html rename to frameworks/V/veb/veb-pg-orm/index.html diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/main.v b/frameworks/V/veb/veb-pg-orm/main.v similarity index 89% rename from frameworks/V/veb_brmassa/veb-pg-orm/main.v rename to frameworks/V/veb/veb-pg-orm/main.v index 66a1d6578f8..873cf5054bf 100644 --- a/frameworks/V/veb_brmassa/veb-pg-orm/main.v +++ b/frameworks/V/veb/veb-pg-orm/main.v @@ -15,7 +15,7 @@ fn main() { app.db.close() } - veb.run[App, Context](mut app, 8080) + veb.run[App, Context](mut app, 8088) } pub fn header(mut ctx Context) bool { diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v b/frameworks/V/veb/veb-pg-orm/requests_db_fortune.v similarity index 86% rename from frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v rename to frameworks/V/veb/veb-pg-orm/requests_db_fortune.v index 9b04cf241ff..a40d493e836 100644 --- a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_fortune.v +++ b/frameworks/V/veb/veb-pg-orm/requests_db_fortune.v @@ -2,6 +2,7 @@ module main import veb +@[table: 'fortune'] struct Fortune { id int @[primary; sql: serial] message string @@ -35,11 +36,11 @@ pub fn (app &App) fortunes(mut ctx Context) veb.Result { fn db_init_fortune(app App, mut ctx Context) (int, string) { sql app.db { create table Fortune - } or { return 1, 'Failed to create Fortune table' } + } or { return 1, 'Failed to create Fortune table: ${err}' } sql app.db { delete from Fortune where id > 0 - } or { return 1, 'Failed to clear Fortune table' } + } or { return 1, 'Failed to clear Fortune table: ${err}' } mut messages := []string{} messages << 'fortune: No such file or directory' @@ -55,13 +56,16 @@ fn db_init_fortune(app App, mut ctx Context) (int, string) { messages << '' messages << 'フレームワークのベンチマーク' + mut i := 0 for message in messages { + i = i + 1 fortune := Fortune{ + id: i // unfortunately, the insertion in ORM will fail if the id is null message: message } sql app.db { insert fortune into Fortune - } or { return 1, 'Failed to insert Fortune message' } + } or { return 1, 'Failed to insert Fortune message: ${err}' } } return 0, 'Fortune table reset and filled with default rows' diff --git a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v b/frameworks/V/veb/veb-pg-orm/requests_db_world.v similarity index 83% rename from frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v rename to frameworks/V/veb/veb-pg-orm/requests_db_world.v index ceb822003ae..eb1e574d15d 100644 --- a/frameworks/V/veb_brmassa/veb-my-orm/requests_db_world.v +++ b/frameworks/V/veb/veb-pg-orm/requests_db_world.v @@ -4,7 +4,7 @@ import rand import veb // required in ORM scenarios because it tries to lowercase the table name -// @[table: 'World'] +@[table: 'world'] struct World { id int @[primary; sql: serial] mut: @@ -36,7 +36,7 @@ pub fn (app &App) queries(mut ctx Context) veb.Result { return ctx.json(worlds) } -pub fn (app &App) updates(mut ctx Context) veb.Result { +pub fn (app &App) update(mut ctx Context) veb.Result { queries := get_query(ctx, 'q') mut worlds := []World{} @@ -73,21 +73,22 @@ fn get_query(ctx Context, index string) int { fn db_init_world(app App, mut ctx Context) (int, string) { sql app.db { create table World - } or { return 1, 'Failed to create World table' } + } or { return 1, 'Failed to create World table: ${err}' } sql app.db { delete from World where id > 0 - } or { return 1, 'Failed to clear World table' } + } or { return 1, 'Failed to clear World table: ${err}' } - for _ in 0 .. 10000 { + for i in 0 .. 10000 { world := World{ + id: i + 1 // unfortunately, the insertion in ORM will fail if the id is null randomnumber: rand.int_in_range(1, 10001) or { 1 } } // ORM only insert one at a time sql app.db { insert world into World - } or { return 1, 'Failed to insert World values' } + } or { return 1, 'Failed to insert World values: ${err}' } } return 0, 'World table reset and filled with 10000 rows' diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v b/frameworks/V/veb/veb-pg-orm/requests_plain.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg-orm/requests_plain.v rename to frameworks/V/veb/veb-pg-orm/requests_plain.v diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v b/frameworks/V/veb/veb-pg-orm/setup_local_db.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg-orm/setup_local_db.v rename to frameworks/V/veb/veb-pg-orm/setup_local_db.v diff --git a/frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile b/frameworks/V/veb/veb-pg.dockerfile similarity index 100% rename from frameworks/V/veb_brmassa/veb_brmassa-pure.dockerfile rename to frameworks/V/veb/veb-pg.dockerfile diff --git a/frameworks/V/veb_brmassa/veb-pg/_setup.v b/frameworks/V/veb/veb-pg/_setup.v similarity index 94% rename from frameworks/V/veb_brmassa/veb-pg/_setup.v rename to frameworks/V/veb/veb-pg/_setup.v index a3334c7eb74..117b8979ca8 100644 --- a/frameworks/V/veb_brmassa/veb-pg/_setup.v +++ b/frameworks/V/veb/veb-pg/_setup.v @@ -31,7 +31,6 @@ fn db_init(mut app App) { dbname: 'hello_world' } app.db = db_module.connect(config) or { panic(err) } - // or { return ctx.server_error('Database connection failed') } } // MySQL implementation return values while Postgres return options. Unify all as options diff --git a/frameworks/V/veb_brmassa/veb-pg/fortunes.html b/frameworks/V/veb/veb-pg/fortunes.html similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/fortunes.html rename to frameworks/V/veb/veb-pg/fortunes.html diff --git a/frameworks/V/veb_brmassa/veb-pg-orm/index.html b/frameworks/V/veb/veb-pg/index.html similarity index 84% rename from frameworks/V/veb_brmassa/veb-pg-orm/index.html rename to frameworks/V/veb/veb-pg/index.html index 0c7536f270c..473e1db30bd 100644 --- a/frameworks/V/veb_brmassa/veb-pg-orm/index.html +++ b/frameworks/V/veb/veb-pg/index.html @@ -63,14 +63,14 @@

    Benchmark Tests

  1. Fortunes
  2. - Data updates + Data updates
  3. Plaintext
  4. diff --git a/frameworks/V/veb_brmassa/veb-my/main.v b/frameworks/V/veb/veb-pg/main.v similarity index 89% rename from frameworks/V/veb_brmassa/veb-my/main.v rename to frameworks/V/veb/veb-pg/main.v index 66a1d6578f8..873cf5054bf 100644 --- a/frameworks/V/veb_brmassa/veb-my/main.v +++ b/frameworks/V/veb/veb-pg/main.v @@ -15,7 +15,7 @@ fn main() { app.db.close() } - veb.run[App, Context](mut app, 8080) + veb.run[App, Context](mut app, 8088) } pub fn header(mut ctx Context) bool { diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v b/frameworks/V/veb/veb-pg/requests_db_fortune.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/requests_db_fortune.v rename to frameworks/V/veb/veb-pg/requests_db_fortune.v diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_db_world.v b/frameworks/V/veb/veb-pg/requests_db_world.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/requests_db_world.v rename to frameworks/V/veb/veb-pg/requests_db_world.v diff --git a/frameworks/V/veb_brmassa/veb-pg/requests_plain.v b/frameworks/V/veb/veb-pg/requests_plain.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/requests_plain.v rename to frameworks/V/veb/veb-pg/requests_plain.v diff --git a/frameworks/V/veb_brmassa/veb-pg/setup_local_db.v b/frameworks/V/veb/veb-pg/setup_local_db.v similarity index 100% rename from frameworks/V/veb_brmassa/veb-pg/setup_local_db.v rename to frameworks/V/veb/veb-pg/setup_local_db.v diff --git a/frameworks/V/veb/veb.dockerfile b/frameworks/V/veb/veb.dockerfile index d3313b4515e..c45d0ee73a3 100644 --- a/frameworks/V/veb/veb.dockerfile +++ b/frameworks/V/veb/veb.dockerfile @@ -1,9 +1,10 @@ FROM thevlang/vlang:debian-dev -RUN apt update && apt install -y libpq-dev +RUN apt update && \ + apt install -y libpq-dev default-libmysqlclient-dev WORKDIR /app -COPY ./main.v run.sh fortunes.html ./ -RUN v -prod -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' main.v +COPY ./veb-pg/* ./ +RUN v -prod -o veb . EXPOSE 8080 -CMD sh run.sh +CMD ./veb diff --git a/frameworks/V/veb_brmassa/README.md b/frameworks/V/veb_brmassa/README.md deleted file mode 100644 index c2d011a254a..00000000000 --- a/frameworks/V/veb_brmassa/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# V lang example web server - -Server "competition" *Web Framework Benchmarks*: https://www.techempower.com/benchmarks - -It designed to demonstrate how to use Veb's built-in features to create a web application. It's a slightly more complex example due to the fact i tried to reuse code for multiple scenarios. - -> NOTE: Cache test still to be properly implemented - -## Scenarios - -We created some scenarios. One on each folder. All scenarios use **Veb** server, the V lang built-in web framework. - -### Veb with Postgres (veb-pg/) - -``` -v run veb-pg/ -``` - -### Veb with Postgres and ORM (veb-pg-orm/) (TBD) - -``` -v run veb-pg-orm/ -``` - -### Veb with MySQL/MariaDB (veb-my/) (TBD) - -``` -v run veb-my/ -``` - -### Veb with MySQL/MariaDB and ORM (veb-my-orm/) (TBD) - -``` -v run veb-my-orm/ -``` - -## Local Setup - -in order to test the servers locally, you will need a database server and a database client. using container, you can use: - -### Postgres: - -``` -docker run --name benckmark-postgres \ - -e POSTGRES_USER=benchmarkdbuser \ - -e POSTGRES_PASSWORD=benchmarkdbpass \ - -e POSTGRES_DB=hello_world \ - -p 5432:5432 \ - -d techempower/postgres:latest -``` - -### MySQL/MariaDB: - -``` -docker run --name benckmark-mysql \ - -e MYSQL_ROOT_PASSWORD=benchmarkdbpass \ - -e MYSQL_USER=benchmarkdbuser \ - -e MYSQL_PASSWORD=benchmarkdbpass \ - -e MYSQL_DATABASE=hello_world \ - -p 3306:3306 \ - -d techempower/mysql:latest -``` - ---- - -Created by Bruno Massa diff --git a/frameworks/V/veb_brmassa/benchmark_config.json b/frameworks/V/veb_brmassa/benchmark_config.json deleted file mode 100644 index ec95c8fc74e..00000000000 --- a/frameworks/V/veb_brmassa/benchmark_config.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "framework": "veb_brmassa", - "authors": ["Bruno Massa"], - "github": "https://github.com/TechEmpower/gemini", - "tests": [ - { - "default": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "Postgres", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "None", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [pg]", - "notes": "", - "versus": "None" - }, - "pg_orm": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "Postgres", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "None", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [pg+orm]", - "notes": "", - "versus": "None" - }, - "non-optimized": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "Postgres", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "None", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [pg] non-optimized", - "notes": "", - "versus": "None" - }, - "run-script": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "Postgres", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [pg] run-script", - "notes": "", - "versus": "" - }, - "my": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "MySQL", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "None", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [my]", - "notes": "", - "versus": "None" - }, - "my_orm": { - "json_url": "/json", - "plaintext_url": "/plaintext", - "db_url": "/db", - "query_url": "/queries?q=", - "fortune_url": "/fortunes", - "update_url": "/update?q=", - "port": 8080, - "approach": "Realistic", - "classification": "Fullstack", - "database": "MySQL", - "framework": "veb", - "language": "V", - "flavor": "None", - "orm": "Micro", - "platform": "None", - "webserver": "", - "os": "Linux", - "database_os": "Linux", - "display_name": "veb [my+orm]", - "notes": "", - "versus": "" - } - } - ] -} diff --git a/frameworks/V/veb_brmassa/veb_brmassa.dockerfile b/frameworks/V/veb_brmassa/veb_brmassa.dockerfile deleted file mode 100644 index fa761b7d33e..00000000000 --- a/frameworks/V/veb_brmassa/veb_brmassa.dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM thevlang/vlang:debian-dev -RUN apt update && \ - apt install -y libpq-dev default-libmysqlclient-dev - -WORKDIR /app -COPY ./veb-pg/* ./ -RUN v -prod -cc clang -cflags '-std=gnu11 -Wall -O3 -march=native -mtune=native -flto' -o veb . - -EXPOSE 8080 -CMD ./veb diff --git a/res4.md b/res4.md new file mode 100644 index 00000000000..0ffe76bec80 --- /dev/null +++ b/res4.md @@ -0,0 +1,40 @@ +| Test Name | Parameter | h2o | pico.v | veb | +| --- | --- | --- | --- | --- | +| cached-query | 1 | 8,390,848 | - | - | +| cached-query | 10 | 7,940,732 | - | - | +| cached-query | 20 | 7,414,285 | - | - | +| cached-query | 50 | 4,971,790 | - | - | +| cached-query | 100 | 4,067,494 | - | - | +| db | 16 | 2,005,309 | - | 764,114 | +| db | 32 | 2,582,701 | - | 1,019,224 | +| db | 64 | 3,208,533 | - | 1,181,013 | +| db | 128 | 3,554,495 | - | 1,183,047 | +| db | 256 | 3,995,039 | - | 1,210,602 | +| db | 512 | 4,182,292 | - | 1,192,207 | +| fortune | 16 | 2,043,143 | - | 849,001 | +| fortune | 32 | 2,599,302 | - | 1,124,590 | +| fortune | 64 | 3,104,106 | - | 1,169,592 | +| fortune | 128 | 3,602,634 | - | 1,168,337 | +| fortune | 256 | 3,904,273 | - | 1,166,060 | +| fortune | 512 | 4,125,815 | - | 1,137,132 | +| json | 16 | 6,013,156 | 6,246,700 | 2,559,335 | +| json | 32 | 6,729,767 | 7,229,221 | 3,007,447 | +| json | 64 | 7,673,903 | 7,922,773 | 3,286,791 | +| json | 128 | 7,929,046 | 8,397,069 | 3,314,099 | +| json | 256 | 8,093,027 | 6,391,806 | 3,341,491 | +| json | 512 | 8,276,644 | 2,123,336 | 3,403,816 | +| plaintext | 256 | 13,942,678 | 73,871,184 | 252 | +| plaintext | 1024 | 13,998,770 | 74,252,688 | 1,020 | +| plaintext | 4096 | 13,638,048 | 63,782,384 | 4,092 | +| plaintext | 16384 | 15,149,226 | 58,123,648 | 12,216 | +| query | 1 | 4,144,811 | - | 1,173,840 | +| query | 5 | 1,310,959 | - | 319,793 | +| query | 10 | 698,518 | - | 173,051 | +| query | 15 | 472,026 | - | 126,349 | +| query | 20 | 359,862 | - | 103,081 | +| update | 1 | 2,268,008 | - | 651,970 | +| update | 5 | 866,615 | - | 169,460 | +| update | 10 | 520,634 | - | 99,612 | +| update | 15 | 371,870 | - | 68,980 | +| update | 20 | 288,195 | - | 51,766 | + diff --git a/res_picoev_1.md b/res_picoev_1.md new file mode 100644 index 00000000000..acb45aa6980 --- /dev/null +++ b/res_picoev_1.md @@ -0,0 +1,13 @@ +| Test Name | Parameter | picoev | picoev-optimized | +| --- | --- | --- | --- | +| json | 16 | 2,243,410 | 6,105,958 | +| json | 32 | 2,255,334 | 7,060,124 | +| json | 64 | 2,283,806 | 7,828,496 | +| json | 128 | 2,275,415 | 8,090,793 | +| json | 256 | 2,231,578 | 8,331,815 | +| json | 512 | 2,211,809 | 8,400,509 | +| plaintext | 256 | 504 | 504 | +| plaintext | 1024 | 2,038 | 2,040 | +| plaintext | 4096 | 2,038 | 8,184 | +| plaintext | 16384 | 2,038 | 24,456 | + diff --git a/res_picov.md b/res_picov.md new file mode 100644 index 00000000000..513ac4044c5 --- /dev/null +++ b/res_picov.md @@ -0,0 +1,13 @@ +| Test Name | Parameter | pico.v | pico.v-optimized | +| --- | --- | --- | --- | +| json | 16 | 2,221,350 | 6,290,867 | +| json | 32 | 2,242,464 | 6,996,772 | +| json | 64 | 2,253,675 | 7,866,492 | +| json | 128 | 2,242,673 | 8,094,886 | +| json | 256 | 2,219,851 | 8,390,891 | +| json | 512 | 2,218,001 | 8,482,685 | +| plaintext | 256 | 20,609,488 | 74,460,352 | +| plaintext | 1024 | 19,209,936 | 73,739,808 | +| plaintext | 4096 | 18,998,880 | 63,747,984 | +| plaintext | 16384 | 18,249,952 | 57,245,568 | + diff --git a/res_total.md b/res_total.md new file mode 100644 index 00000000000..ae929bc739e --- /dev/null +++ b/res_total.md @@ -0,0 +1,39 @@ +| Test Name | Parameter | h2o | pico.v | veb | veb_brmassa | +| --- | --- | --- | --- | --- | --- | +| cached-query | 1 | 8,390,848 | - | - | - | +| cached-query | 10 | 7,940,732 | - | - | - | +| cached-query | 20 | 7,414,285 | - | - | - | +| cached-query | 50 | 4,971,790 | - | - | - | +| cached-query | 100 | 4,067,494 | - | - | - | +| db | 16 | 2,005,309 | - | 764,114 | 248,040 | +| db | 32 | 2,582,701 | - | 1,019,224 | 240,706 | +| db | 64 | 3,208,533 | - | 1,181,013 | 253,749 | +| db | 128 | 3,554,495 | - | 1,183,047 | 251,223 | +| db | 256 | 3,995,039 | - | 1,210,602 | 248,724 | +| db | 512 | 4,182,292 | - | 1,192,207 | 244,595 | +| fortune | 16 | 2,043,143 | - | 849,001 | 252,709 | +| fortune | 32 | 2,599,302 | - | 1,124,590 | 246,152 | +| fortune | 64 | 3,104,106 | - | 1,169,592 | 247,007 | +| fortune | 128 | 3,602,634 | - | 1,168,337 | 246,034 | +| fortune | 256 | 3,904,273 | - | 1,166,060 | 250,410 | +| fortune | 512 | 4,125,815 | - | 1,137,132 | 246,615 | +| json | 16 | 6,013,156 | 6,246,700 | 2,559,335 | 864,420 | +| json | 32 | 6,729,767 | 7,229,221 | 3,007,447 | 873,514 | +| json | 64 | 7,673,903 | 7,922,773 | 3,286,791 | 879,956 | +| json | 128 | 7,929,046 | 8,397,069 | 3,314,099 | 872,138 | +| json | 256 | 8,093,027 | 6,391,806 | 3,341,491 | 854,114 | +| json | 512 | 8,276,644 | 2,123,336 | 3,403,816 | 846,195 | +| plaintext | 256 | 13,942,678 | 73,871,184 | 252 | 252 | +| plaintext | 1024 | 13,998,770 | 74,252,688 | 1,020 | 1,018 | +| plaintext | 4096 | 13,638,048 | 63,782,384 | 4,092 | 1,018 | +| plaintext | 16384 | 15,149,226 | 58,123,648 | 12,216 | 1,018 | +| query | 1 | 4,144,811 | - | 1,173,840 | 241,626 | +| query | 5 | 1,310,959 | - | 319,793 | 71,652 | +| query | 10 | 698,518 | - | 173,051 | 37,805 | +| query | 15 | 472,026 | - | 126,349 | 25,441 | +| query | 20 | 359,862 | - | 103,081 | 19,668 | +| update | 1 | 2,268,008 | - | 651,970 | 120,450 | +| update | 5 | 866,615 | - | 169,460 | 30,370 | +| update | 10 | 520,634 | - | 99,612 | 16,212 | +| update | 15 | 371,870 | - | 68,980 | 10,952 | +| update | 20 | 288,195 | - | 51,766 | 8,334 | diff --git a/res_veb_brmassa.md b/res_veb_brmassa.md new file mode 100644 index 00000000000..7ace3ea2c21 --- /dev/null +++ b/res_veb_brmassa.md @@ -0,0 +1,35 @@ +| Test Name | Parameter | veb_brmassa | +| --- | --- | --- | +| db | 16 | 248,040 | +| db | 32 | 240,706 | +| db | 64 | 253,749 | +| db | 128 | 251,223 | +| db | 256 | 248,724 | +| db | 512 | 244,595 | +| fortune | 16 | 252,709 | +| fortune | 32 | 246,152 | +| fortune | 64 | 247,007 | +| fortune | 128 | 246,034 | +| fortune | 256 | 250,410 | +| fortune | 512 | 246,615 | +| json | 16 | 864,420 | +| json | 32 | 873,514 | +| json | 64 | 879,956 | +| json | 128 | 872,138 | +| json | 256 | 854,114 | +| json | 512 | 846,195 | +| plaintext | 256 | 252 | +| plaintext | 1024 | 1,018 | +| plaintext | 4096 | 1,018 | +| plaintext | 16384 | 1,018 | +| query | 1 | 241,626 | +| query | 5 | 71,652 | +| query | 10 | 37,805 | +| query | 15 | 25,441 | +| query | 20 | 19,668 | +| update | 1 | 120,450 | +| update | 5 | 30,370 | +| update | 10 | 16,212 | +| update | 15 | 10,952 | +| update | 20 | 8,334 | + diff --git a/res_veb_opt.md b/res_veb_opt.md new file mode 100644 index 00000000000..0bdf11f4bf5 --- /dev/null +++ b/res_veb_opt.md @@ -0,0 +1,13 @@ +| Test Name | Parameter | veb | veb-optimized | +| --- | --- | --- | --- | +| json | 16 | 878,951 | 2,795,705 | +| json | 32 | 876,177 | 3,131,641 | +| json | 64 | 899,322 | 3,346,261 | +| json | 128 | 869,572 | 3,371,843 | +| json | 256 | 844,901 | 3,354,998 | +| json | 512 | 840,076 | 3,418,235 | +| plaintext | 256 | - | 252 | +| plaintext | 1024 | - | 1,020 | +| plaintext | 4096 | - | 4,092 | +| plaintext | 16384 | - | 12,216 | + diff --git a/result_merge.py b/result_merge.py new file mode 100644 index 00000000000..06fe5803434 --- /dev/null +++ b/result_merge.py @@ -0,0 +1,110 @@ +import sys +import re + +def parse_markdown_table(content): + """Parse a markdown table into a list of dictionaries""" + lines = [line.strip() for line in content.split('\n') if line.strip()] + if not lines: + return [] + + # Extract headers + headers = [h.strip() for h in lines[0].strip('|').split('|')] + + # Process rows + rows = [] + for line in lines[2:]: # Skip header and separator lines + values = [v.strip() for v in line.strip('|').split('|')] + if len(values) == len(headers): + rows.append(dict(zip(headers, values))) + + return headers, rows + +def merge_tables(table1, table2): + """Merge two tables based on Test Name and Parameter""" + headers1, rows1 = table1 + headers2, rows2 = table2 + + # Create a dictionary for table2 for easy lookup + table2_dict = {} + for row in rows2: + key = (row['Test Name'], row['Parameter']) + table2_dict[key] = row + + # Prepare merged headers (all headers from table1 + new headers from table2) + new_headers = [h for h in headers2 if h not in ['Test Name', 'Parameter']] + merged_headers = headers1 + new_headers + + # Merge rows + merged_rows = [] + for row1 in rows1: + key = (row1['Test Name'], row1['Parameter']) + merged_row = row1.copy() + + if key in table2_dict: + for header in new_headers: + merged_row[header] = table2_dict[key].get(header, '-') + else: + for header in new_headers: + merged_row[header] = '-' + + merged_rows.append(merged_row) + + # Add any rows from table2 that weren't in table1 + table1_keys = {(row['Test Name'], row['Parameter']) for row in rows1} + for row2 in rows2: + key = (row2['Test Name'], row2['Parameter']) + if key not in table1_keys: + merged_row = {'Test Name': row2['Test Name'], 'Parameter': row2['Parameter']} + for header in headers1[2:]: # Skip Test Name and Parameter + merged_row[header] = '-' + for header in new_headers: + merged_row[header] = row2.get(header, '-') + merged_rows.append(merged_row) + + return merged_headers, merged_rows + +def write_markdown_table(headers, rows, output_file): + """Write a markdown table to a file""" + # Write headers + output_file.write('| ' + ' | '.join(headers) + ' |\n') + + # Write separator + output_file.write('| ' + ' | '.join(['---'] * len(headers)) + ' |\n') + + # Write rows + for row in rows: + output_file.write('| ' + ' | '.join(row.get(h, '-') for h in headers) + ' |\n') + +def main(): + if len(sys.argv) != 4: + print("Usage: python merge_markdown_tables.py ") + sys.exit(1) + + file1_path, file2_path, output_path = sys.argv[1], sys.argv[2], sys.argv[3] + + try: + with open(file1_path, 'r') as f: + table1_content = f.read() + with open(file2_path, 'r') as f: + table2_content = f.read() + + table1 = parse_markdown_table(table1_content) + table2 = parse_markdown_table(table2_content) + + if not table1 or not table2: + print("Error: One or both input files don't contain valid markdown tables") + sys.exit(1) + + merged_headers, merged_rows = merge_tables(table1, table2) + + with open(output_path, 'w') as f: + write_markdown_table(merged_headers, merged_rows, f) + + print(f"Merged table written to {output_path}") + + except Exception as e: + print(f"Error: {e}") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/result_parse.py b/result_parse.py new file mode 100644 index 00000000000..98caacf2512 --- /dev/null +++ b/result_parse.py @@ -0,0 +1,120 @@ +import json +import sys + +def load_json(file_path): + """Load JSON data from a file.""" + try: + with open(file_path, 'r') as file: + return json.load(file) + except FileNotFoundError: + print(f"Error: File '{file_path}' not found.") + sys.exit(1) + except json.JSONDecodeError: + print(f"Error: Invalid JSON format in file '{file_path}'.") + sys.exit(1) + +def extract_data(json_data): + """Extract the required data from the JSON structure.""" + if 'rawData' not in json_data: + print("Error: 'rawData' key not found in the JSON file.") + sys.exit(1) + + rawData = json_data['rawData'] + results = [] + + # Define mapping for test names to their respective arrays + test_array_mapping = { + "db": json_data.get("concurrencyLevels", []), + "fortune": json_data.get("concurrencyLevels", []), + "json": json_data.get("concurrencyLevels", []), + "plaintext": json_data.get("pipelineConcurrencyLevels", []), + "query": json_data.get("queryIntervals", []), + "update": json_data.get("queryIntervals", []), + "cached-query": json_data.get("cachedQueryIntervals", []) + } + + # Extract all frameworks dynamically + frameworks = set() + for test_name, test_data in rawData.items(): + # Skip tests not in test_array_mapping + if test_name not in test_array_mapping: + continue + for framework in test_data.keys(): + frameworks.add(framework) + + frameworks = sorted(list(frameworks)) # Sort frameworks alphabetically + + # Process each test_name and test_array_index + for test_name, test_data in rawData.items(): + # Skip tests not in test_array_mapping + if test_name not in test_array_mapping: + continue + + # Get the corresponding array for this test_name + test_array = test_array_mapping[test_name] + + for framework in frameworks: + if framework in test_data: + # Ensure test_data[framework] is a list + if isinstance(test_data[framework], list): + for test_array_index, test_info in enumerate(test_data[framework]): + total_requests = test_info.get('totalRequests', None) + + # Use the value from the mapped array instead of the raw index + if test_array_index < len(test_array): + test_value = test_array[test_array_index] + else: + test_value = f"Index {test_array_index} out of bounds" + + # Format totalRequests with thousand separators + formatted_total_requests = f"{total_requests:,}" if isinstance(total_requests, int) else '-' + + results.append({ + 'test_name': test_name, + 'test_value': test_value, + 'framework': framework, + 'totalRequests': formatted_total_requests + }) + + return frameworks, results + +def generate_markdown_table(frameworks, results): + """Generate a markdown table from the extracted data.""" + headers = ['Test Name', 'Parameter'] + frameworks + rows = [] + + # Organize data by test_name and test_value + organized_data = {} + for result in results: + key = (result['test_name'], result['test_value']) + if key not in organized_data: + organized_data[key] = {framework: '-' for framework in frameworks} + organized_data[key][result['framework']] = result['totalRequests'] + + # Generate rows + for (test_name, test_value), values in organized_data.items(): + row = [test_name, str(test_value)] + [str(values[framework]) for framework in frameworks] + rows.append(row) + + # Format the markdown table + markdown = '| ' + ' | '.join(headers) + ' |\n' + markdown += '| ' + ' | '.join(['---'] * len(headers)) + ' |\n' + for row in rows: + markdown += '| ' + ' | '.join(row) + ' |\n' + + return markdown + +def main(): + if len(sys.argv) != 2: + print("Usage: python script.py ") + sys.exit(1) + + file_path = sys.argv[1] + json_data = load_json(file_path) + frameworks, results = extract_data(json_data) + markdown_table = generate_markdown_table(frameworks, results) + + print(markdown_table) + +if __name__ == '__main__': + main() diff --git a/veb_brmassa_1.md b/veb_brmassa_1.md new file mode 100644 index 00000000000..26f2be16d4e --- /dev/null +++ b/veb_brmassa_1.md @@ -0,0 +1,35 @@ +| Test Name | Parameter | veb_brmassa | +| --- | --- | --- | +| db | 16 | 251,739 | +| db | 32 | 247,660 | +| db | 64 | 249,265 | +| db | 128 | 245,800 | +| db | 256 | 246,718 | +| db | 512 | 243,696 | +| fortune | 16 | 249,866 | +| fortune | 32 | 248,079 | +| fortune | 64 | 248,076 | +| fortune | 128 | 246,647 | +| fortune | 256 | 247,433 | +| fortune | 512 | 248,132 | +| json | 16 | 879,708 | +| json | 32 | 885,328 | +| json | 64 | 891,888 | +| json | 128 | 892,383 | +| json | 256 | 875,942 | +| json | 512 | 863,578 | +| plaintext | 256 | 252 | +| plaintext | 1024 | 1,018 | +| plaintext | 4096 | 1,018 | +| plaintext | 16384 | 1,018 | +| query | 1 | 236,494 | +| query | 5 | 70,724 | +| query | 10 | 37,889 | +| query | 15 | 25,545 | +| query | 20 | 19,294 | +| update | 1 | 132,322 | +| update | 5 | 33,719 | +| update | 10 | 17,513 | +| update | 15 | 11,813 | +| update | 20 | 8,922 | + diff --git a/veb_brmassa_pg.md b/veb_brmassa_pg.md new file mode 100644 index 00000000000..cab34dea283 --- /dev/null +++ b/veb_brmassa_pg.md @@ -0,0 +1,35 @@ +| Test Name | Parameter | veb_brmassa | veb_brmassa-pg_orm | veb_brmassa-pure | veb_brmassa-run | +| --- | --- | --- | --- | --- | --- | +| db | 16 | 251,303 | 222,056 | 250,211 | 969,312 | +| db | 32 | 251,834 | 222,852 | 244,302 | 1,082,666 | +| db | 64 | 250,073 | 221,053 | 248,050 | 1,290,204 | +| db | 128 | 248,702 | 219,919 | 249,013 | 1,323,779 | +| db | 256 | 248,046 | 218,752 | 247,258 | 1,328,911 | +| db | 512 | 247,794 | 217,044 | 247,522 | 1,303,981 | +| fortune | 16 | 252,144 | 227,706 | 246,093 | 910,254 | +| fortune | 32 | 251,201 | 225,544 | 247,043 | 1,146,077 | +| fortune | 64 | 250,692 | 224,981 | 245,589 | 1,222,037 | +| fortune | 128 | 247,680 | 224,572 | 243,259 | 1,245,039 | +| fortune | 256 | 248,101 | 223,015 | 243,573 | 1,233,299 | +| fortune | 512 | 246,154 | 219,963 | 244,023 | 1,205,231 | +| json | 16 | 875,621 | 871,501 | 874,893 | 2,614,082 | +| json | 32 | 873,514 | 881,079 | 878,880 | 3,115,502 | +| json | 64 | 899,823 | 900,664 | 888,969 | 3,309,067 | +| json | 128 | 893,217 | 885,784 | 888,698 | 3,359,048 | +| json | 256 | 872,403 | 869,308 | 859,932 | 3,429,851 | +| json | 512 | 856,434 | 855,121 | 855,800 | 3,443,567 | +| plaintext | 256 | 252 | 252 | 252 | 252 | +| plaintext | 1024 | 1,018 | 1,018 | 1,018 | 1,020 | +| plaintext | 4096 | 1,018 | 1,018 | 1,018 | 4,092 | +| plaintext | 16384 | 1,018 | 1,018 | 1,018 | 12,216 | +| query | 1 | 237,420 | 212,948 | 237,554 | 1,250,395 | +| query | 5 | 70,232 | 60,403 | 70,599 | 354,368 | +| query | 10 | 37,190 | 31,919 | 37,302 | 196,479 | +| query | 15 | 24,958 | 21,444 | 25,117 | 141,661 | +| query | 20 | 19,319 | 16,583 | 19,284 | 113,068 | +| update | 1 | 132,773 | 113,912 | 125,451 | 672,965 | +| update | 5 | 33,143 | 28,385 | 31,581 | 191,829 | +| update | 10 | 17,293 | 14,692 | 17,103 | 115,140 | +| update | 15 | 11,730 | 10,029 | 11,549 | 78,993 | +| update | 20 | 8,945 | 7,567 | 8,812 | 59,998 | + From 006cea6ac6b5b92456ce6cfde89cbd6dadfde64d Mon Sep 17 00:00:00 2001 From: brmassa Date: Wed, 11 Jun 2025 09:07:16 -0500 Subject: [PATCH 3/3] fix: removal of local test results and depth=1 when cloning --- .../V/pico.v/pico.v-optimized.dockerfile | 2 +- frameworks/V/pico.v/pico.v.dockerfile | 2 +- res4.md | 40 ------------------- res_picoev_1.md | 13 ------ res_picov.md | 13 ------ res_total.md | 39 ------------------ res_veb_brmassa.md | 35 ---------------- res_veb_opt.md | 13 ------ veb_brmassa_1.md | 35 ---------------- veb_brmassa_pg.md | 35 ---------------- 10 files changed, 2 insertions(+), 225 deletions(-) delete mode 100644 res4.md delete mode 100644 res_picoev_1.md delete mode 100644 res_picov.md delete mode 100644 res_total.md delete mode 100644 res_veb_brmassa.md delete mode 100644 res_veb_opt.md delete mode 100644 veb_brmassa_1.md delete mode 100644 veb_brmassa_pg.md diff --git a/frameworks/V/pico.v/pico.v-optimized.dockerfile b/frameworks/V/pico.v/pico.v-optimized.dockerfile index c56fd5acb59..d43a1cf6846 100644 --- a/frameworks/V/pico.v/pico.v-optimized.dockerfile +++ b/frameworks/V/pico.v/pico.v-optimized.dockerfile @@ -4,7 +4,7 @@ WORKDIR /app COPY ./main.v run.sh ./ -RUN git clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0.4 \ +RUN git -b v0.0.1 --single-branch --depth 1 clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0.4 \ && cd /app/src/picoev && git clone https://github.com/S-YOU/picoev src && cd src && git checkout v0.0.1 \ && cd /app/src/picohttpparser && git clone https://github.com/S-YOU/picohttpparser src && cd src && git checkout v0.0.1 \ && ln -s /app/src /root/.vmodules/syou \ diff --git a/frameworks/V/pico.v/pico.v.dockerfile b/frameworks/V/pico.v/pico.v.dockerfile index 1d7ed117f32..6e0f7c84c55 100644 --- a/frameworks/V/pico.v/pico.v.dockerfile +++ b/frameworks/V/pico.v/pico.v.dockerfile @@ -4,7 +4,7 @@ WORKDIR /app COPY ./main.v run.sh ./ -RUN git clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0.4 \ +RUN git -b v0.0.1 --single-branch --depth 1 clone https://github.com/S-YOU/pico.v src && cd src && git checkout v0.0.4 \ && cd /app/src/picoev && git clone https://github.com/S-YOU/picoev src && cd src && git checkout v0.0.1 \ && cd /app/src/picohttpparser && git clone https://github.com/S-YOU/picohttpparser src && cd src && git checkout v0.0.1 \ && ln -s /app/src /root/.vmodules/syou \ diff --git a/res4.md b/res4.md deleted file mode 100644 index 0ffe76bec80..00000000000 --- a/res4.md +++ /dev/null @@ -1,40 +0,0 @@ -| Test Name | Parameter | h2o | pico.v | veb | -| --- | --- | --- | --- | --- | -| cached-query | 1 | 8,390,848 | - | - | -| cached-query | 10 | 7,940,732 | - | - | -| cached-query | 20 | 7,414,285 | - | - | -| cached-query | 50 | 4,971,790 | - | - | -| cached-query | 100 | 4,067,494 | - | - | -| db | 16 | 2,005,309 | - | 764,114 | -| db | 32 | 2,582,701 | - | 1,019,224 | -| db | 64 | 3,208,533 | - | 1,181,013 | -| db | 128 | 3,554,495 | - | 1,183,047 | -| db | 256 | 3,995,039 | - | 1,210,602 | -| db | 512 | 4,182,292 | - | 1,192,207 | -| fortune | 16 | 2,043,143 | - | 849,001 | -| fortune | 32 | 2,599,302 | - | 1,124,590 | -| fortune | 64 | 3,104,106 | - | 1,169,592 | -| fortune | 128 | 3,602,634 | - | 1,168,337 | -| fortune | 256 | 3,904,273 | - | 1,166,060 | -| fortune | 512 | 4,125,815 | - | 1,137,132 | -| json | 16 | 6,013,156 | 6,246,700 | 2,559,335 | -| json | 32 | 6,729,767 | 7,229,221 | 3,007,447 | -| json | 64 | 7,673,903 | 7,922,773 | 3,286,791 | -| json | 128 | 7,929,046 | 8,397,069 | 3,314,099 | -| json | 256 | 8,093,027 | 6,391,806 | 3,341,491 | -| json | 512 | 8,276,644 | 2,123,336 | 3,403,816 | -| plaintext | 256 | 13,942,678 | 73,871,184 | 252 | -| plaintext | 1024 | 13,998,770 | 74,252,688 | 1,020 | -| plaintext | 4096 | 13,638,048 | 63,782,384 | 4,092 | -| plaintext | 16384 | 15,149,226 | 58,123,648 | 12,216 | -| query | 1 | 4,144,811 | - | 1,173,840 | -| query | 5 | 1,310,959 | - | 319,793 | -| query | 10 | 698,518 | - | 173,051 | -| query | 15 | 472,026 | - | 126,349 | -| query | 20 | 359,862 | - | 103,081 | -| update | 1 | 2,268,008 | - | 651,970 | -| update | 5 | 866,615 | - | 169,460 | -| update | 10 | 520,634 | - | 99,612 | -| update | 15 | 371,870 | - | 68,980 | -| update | 20 | 288,195 | - | 51,766 | - diff --git a/res_picoev_1.md b/res_picoev_1.md deleted file mode 100644 index acb45aa6980..00000000000 --- a/res_picoev_1.md +++ /dev/null @@ -1,13 +0,0 @@ -| Test Name | Parameter | picoev | picoev-optimized | -| --- | --- | --- | --- | -| json | 16 | 2,243,410 | 6,105,958 | -| json | 32 | 2,255,334 | 7,060,124 | -| json | 64 | 2,283,806 | 7,828,496 | -| json | 128 | 2,275,415 | 8,090,793 | -| json | 256 | 2,231,578 | 8,331,815 | -| json | 512 | 2,211,809 | 8,400,509 | -| plaintext | 256 | 504 | 504 | -| plaintext | 1024 | 2,038 | 2,040 | -| plaintext | 4096 | 2,038 | 8,184 | -| plaintext | 16384 | 2,038 | 24,456 | - diff --git a/res_picov.md b/res_picov.md deleted file mode 100644 index 513ac4044c5..00000000000 --- a/res_picov.md +++ /dev/null @@ -1,13 +0,0 @@ -| Test Name | Parameter | pico.v | pico.v-optimized | -| --- | --- | --- | --- | -| json | 16 | 2,221,350 | 6,290,867 | -| json | 32 | 2,242,464 | 6,996,772 | -| json | 64 | 2,253,675 | 7,866,492 | -| json | 128 | 2,242,673 | 8,094,886 | -| json | 256 | 2,219,851 | 8,390,891 | -| json | 512 | 2,218,001 | 8,482,685 | -| plaintext | 256 | 20,609,488 | 74,460,352 | -| plaintext | 1024 | 19,209,936 | 73,739,808 | -| plaintext | 4096 | 18,998,880 | 63,747,984 | -| plaintext | 16384 | 18,249,952 | 57,245,568 | - diff --git a/res_total.md b/res_total.md deleted file mode 100644 index ae929bc739e..00000000000 --- a/res_total.md +++ /dev/null @@ -1,39 +0,0 @@ -| Test Name | Parameter | h2o | pico.v | veb | veb_brmassa | -| --- | --- | --- | --- | --- | --- | -| cached-query | 1 | 8,390,848 | - | - | - | -| cached-query | 10 | 7,940,732 | - | - | - | -| cached-query | 20 | 7,414,285 | - | - | - | -| cached-query | 50 | 4,971,790 | - | - | - | -| cached-query | 100 | 4,067,494 | - | - | - | -| db | 16 | 2,005,309 | - | 764,114 | 248,040 | -| db | 32 | 2,582,701 | - | 1,019,224 | 240,706 | -| db | 64 | 3,208,533 | - | 1,181,013 | 253,749 | -| db | 128 | 3,554,495 | - | 1,183,047 | 251,223 | -| db | 256 | 3,995,039 | - | 1,210,602 | 248,724 | -| db | 512 | 4,182,292 | - | 1,192,207 | 244,595 | -| fortune | 16 | 2,043,143 | - | 849,001 | 252,709 | -| fortune | 32 | 2,599,302 | - | 1,124,590 | 246,152 | -| fortune | 64 | 3,104,106 | - | 1,169,592 | 247,007 | -| fortune | 128 | 3,602,634 | - | 1,168,337 | 246,034 | -| fortune | 256 | 3,904,273 | - | 1,166,060 | 250,410 | -| fortune | 512 | 4,125,815 | - | 1,137,132 | 246,615 | -| json | 16 | 6,013,156 | 6,246,700 | 2,559,335 | 864,420 | -| json | 32 | 6,729,767 | 7,229,221 | 3,007,447 | 873,514 | -| json | 64 | 7,673,903 | 7,922,773 | 3,286,791 | 879,956 | -| json | 128 | 7,929,046 | 8,397,069 | 3,314,099 | 872,138 | -| json | 256 | 8,093,027 | 6,391,806 | 3,341,491 | 854,114 | -| json | 512 | 8,276,644 | 2,123,336 | 3,403,816 | 846,195 | -| plaintext | 256 | 13,942,678 | 73,871,184 | 252 | 252 | -| plaintext | 1024 | 13,998,770 | 74,252,688 | 1,020 | 1,018 | -| plaintext | 4096 | 13,638,048 | 63,782,384 | 4,092 | 1,018 | -| plaintext | 16384 | 15,149,226 | 58,123,648 | 12,216 | 1,018 | -| query | 1 | 4,144,811 | - | 1,173,840 | 241,626 | -| query | 5 | 1,310,959 | - | 319,793 | 71,652 | -| query | 10 | 698,518 | - | 173,051 | 37,805 | -| query | 15 | 472,026 | - | 126,349 | 25,441 | -| query | 20 | 359,862 | - | 103,081 | 19,668 | -| update | 1 | 2,268,008 | - | 651,970 | 120,450 | -| update | 5 | 866,615 | - | 169,460 | 30,370 | -| update | 10 | 520,634 | - | 99,612 | 16,212 | -| update | 15 | 371,870 | - | 68,980 | 10,952 | -| update | 20 | 288,195 | - | 51,766 | 8,334 | diff --git a/res_veb_brmassa.md b/res_veb_brmassa.md deleted file mode 100644 index 7ace3ea2c21..00000000000 --- a/res_veb_brmassa.md +++ /dev/null @@ -1,35 +0,0 @@ -| Test Name | Parameter | veb_brmassa | -| --- | --- | --- | -| db | 16 | 248,040 | -| db | 32 | 240,706 | -| db | 64 | 253,749 | -| db | 128 | 251,223 | -| db | 256 | 248,724 | -| db | 512 | 244,595 | -| fortune | 16 | 252,709 | -| fortune | 32 | 246,152 | -| fortune | 64 | 247,007 | -| fortune | 128 | 246,034 | -| fortune | 256 | 250,410 | -| fortune | 512 | 246,615 | -| json | 16 | 864,420 | -| json | 32 | 873,514 | -| json | 64 | 879,956 | -| json | 128 | 872,138 | -| json | 256 | 854,114 | -| json | 512 | 846,195 | -| plaintext | 256 | 252 | -| plaintext | 1024 | 1,018 | -| plaintext | 4096 | 1,018 | -| plaintext | 16384 | 1,018 | -| query | 1 | 241,626 | -| query | 5 | 71,652 | -| query | 10 | 37,805 | -| query | 15 | 25,441 | -| query | 20 | 19,668 | -| update | 1 | 120,450 | -| update | 5 | 30,370 | -| update | 10 | 16,212 | -| update | 15 | 10,952 | -| update | 20 | 8,334 | - diff --git a/res_veb_opt.md b/res_veb_opt.md deleted file mode 100644 index 0bdf11f4bf5..00000000000 --- a/res_veb_opt.md +++ /dev/null @@ -1,13 +0,0 @@ -| Test Name | Parameter | veb | veb-optimized | -| --- | --- | --- | --- | -| json | 16 | 878,951 | 2,795,705 | -| json | 32 | 876,177 | 3,131,641 | -| json | 64 | 899,322 | 3,346,261 | -| json | 128 | 869,572 | 3,371,843 | -| json | 256 | 844,901 | 3,354,998 | -| json | 512 | 840,076 | 3,418,235 | -| plaintext | 256 | - | 252 | -| plaintext | 1024 | - | 1,020 | -| plaintext | 4096 | - | 4,092 | -| plaintext | 16384 | - | 12,216 | - diff --git a/veb_brmassa_1.md b/veb_brmassa_1.md deleted file mode 100644 index 26f2be16d4e..00000000000 --- a/veb_brmassa_1.md +++ /dev/null @@ -1,35 +0,0 @@ -| Test Name | Parameter | veb_brmassa | -| --- | --- | --- | -| db | 16 | 251,739 | -| db | 32 | 247,660 | -| db | 64 | 249,265 | -| db | 128 | 245,800 | -| db | 256 | 246,718 | -| db | 512 | 243,696 | -| fortune | 16 | 249,866 | -| fortune | 32 | 248,079 | -| fortune | 64 | 248,076 | -| fortune | 128 | 246,647 | -| fortune | 256 | 247,433 | -| fortune | 512 | 248,132 | -| json | 16 | 879,708 | -| json | 32 | 885,328 | -| json | 64 | 891,888 | -| json | 128 | 892,383 | -| json | 256 | 875,942 | -| json | 512 | 863,578 | -| plaintext | 256 | 252 | -| plaintext | 1024 | 1,018 | -| plaintext | 4096 | 1,018 | -| plaintext | 16384 | 1,018 | -| query | 1 | 236,494 | -| query | 5 | 70,724 | -| query | 10 | 37,889 | -| query | 15 | 25,545 | -| query | 20 | 19,294 | -| update | 1 | 132,322 | -| update | 5 | 33,719 | -| update | 10 | 17,513 | -| update | 15 | 11,813 | -| update | 20 | 8,922 | - diff --git a/veb_brmassa_pg.md b/veb_brmassa_pg.md deleted file mode 100644 index cab34dea283..00000000000 --- a/veb_brmassa_pg.md +++ /dev/null @@ -1,35 +0,0 @@ -| Test Name | Parameter | veb_brmassa | veb_brmassa-pg_orm | veb_brmassa-pure | veb_brmassa-run | -| --- | --- | --- | --- | --- | --- | -| db | 16 | 251,303 | 222,056 | 250,211 | 969,312 | -| db | 32 | 251,834 | 222,852 | 244,302 | 1,082,666 | -| db | 64 | 250,073 | 221,053 | 248,050 | 1,290,204 | -| db | 128 | 248,702 | 219,919 | 249,013 | 1,323,779 | -| db | 256 | 248,046 | 218,752 | 247,258 | 1,328,911 | -| db | 512 | 247,794 | 217,044 | 247,522 | 1,303,981 | -| fortune | 16 | 252,144 | 227,706 | 246,093 | 910,254 | -| fortune | 32 | 251,201 | 225,544 | 247,043 | 1,146,077 | -| fortune | 64 | 250,692 | 224,981 | 245,589 | 1,222,037 | -| fortune | 128 | 247,680 | 224,572 | 243,259 | 1,245,039 | -| fortune | 256 | 248,101 | 223,015 | 243,573 | 1,233,299 | -| fortune | 512 | 246,154 | 219,963 | 244,023 | 1,205,231 | -| json | 16 | 875,621 | 871,501 | 874,893 | 2,614,082 | -| json | 32 | 873,514 | 881,079 | 878,880 | 3,115,502 | -| json | 64 | 899,823 | 900,664 | 888,969 | 3,309,067 | -| json | 128 | 893,217 | 885,784 | 888,698 | 3,359,048 | -| json | 256 | 872,403 | 869,308 | 859,932 | 3,429,851 | -| json | 512 | 856,434 | 855,121 | 855,800 | 3,443,567 | -| plaintext | 256 | 252 | 252 | 252 | 252 | -| plaintext | 1024 | 1,018 | 1,018 | 1,018 | 1,020 | -| plaintext | 4096 | 1,018 | 1,018 | 1,018 | 4,092 | -| plaintext | 16384 | 1,018 | 1,018 | 1,018 | 12,216 | -| query | 1 | 237,420 | 212,948 | 237,554 | 1,250,395 | -| query | 5 | 70,232 | 60,403 | 70,599 | 354,368 | -| query | 10 | 37,190 | 31,919 | 37,302 | 196,479 | -| query | 15 | 24,958 | 21,444 | 25,117 | 141,661 | -| query | 20 | 19,319 | 16,583 | 19,284 | 113,068 | -| update | 1 | 132,773 | 113,912 | 125,451 | 672,965 | -| update | 5 | 33,143 | 28,385 | 31,581 | 191,829 | -| update | 10 | 17,293 | 14,692 | 17,103 | 115,140 | -| update | 15 | 11,730 | 10,029 | 11,549 | 78,993 | -| update | 20 | 8,945 | 7,567 | 8,812 | 59,998 | -