this repo has no description

:sparkles: decreased processor time and removed echos in code

+8 -10
docker-compose.yml
··· 9 9 deploy: 10 10 resources: 11 11 limits: 12 - cpus: "0.1" 12 + cpus: "0.15" 13 13 memory: "30MB" 14 14 volumes: 15 15 - redis-data:/data 16 16 17 - api1: &app 17 + api1: &app # image: pedrohcorrea/rinha-backend-2025-gleam:latest 18 18 build: 19 19 context: . 20 20 container_name: api1 ··· 25 25 environment: 26 26 REDIS_CONN: valkey 27 27 PROVIDERS: "http://payment-processor-default:8080,http://payment-processor-fallback:8080" 28 - PROCESSOR_QTT: 1 29 - PROCESSOR_TIME: 50 28 + PROCESSOR_TIME: 40 30 29 depends_on: 31 30 - valkey 32 31 deploy: 33 32 resources: 34 33 limits: 35 - cpus: "1" 36 - memory: "255MB" 34 + cpus: "0.8" 35 + memory: "235MB" 37 36 38 37 api2: 39 38 <<: *app 40 39 container_name: api2 41 40 environment: 42 41 REDIS_CONN: valkey 43 - PROVIDERS: 44 42 deploy: 45 43 resources: 46 44 limits: 47 - cpus: "0.3" 48 - memory: "55MB" 45 + cpus: "0.4" 46 + memory: "75MB" 49 47 50 48 nginx: 51 49 image: nginx:1.29.0-alpine ··· 61 59 deploy: 62 60 resources: 63 61 limits: 64 - cpus: "0.1" 62 + cpus: "0.15" 65 63 memory: "10MB" 66 64 67 65 volumes:
-2
src/processor.gleam
··· 93 93 actor.continue(state) 94 94 } 95 95 HealthCheck -> { 96 - echo "Healthcheck" 97 96 let provider = 98 97 get_faster_healthcheck(state.providers, state.selected_provider) 99 98 ··· 121 120 122 121 let body_to_send = message |> provider.create_body 123 122 124 - echo "Sending request to " <> processor.selected_provider.url 125 123 case provider.send_request(processor.selected_provider, body_to_send) { 126 124 Ok(_) -> { 127 125 message
+17 -28
src/rinha_2025.gleam
··· 3 3 import gleam/int 4 4 import gleam/list 5 5 import gleam/otp/static_supervisor as supervisor 6 - import gleam/otp/supervision 7 6 import gleam/string 8 7 import integrations/provider 9 8 import processor ··· 18 17 let providers_env = util.get_env_var("PROVIDERS", "") 19 18 let assert Ok(processor_time) = 20 19 util.get_env_var("PROCESSOR_TIME", "100") 21 - |> int.parse 22 - let assert Ok(processor_qtt) = 23 - util.get_env_var("PROCESSOR_QTT", "0") 24 20 |> int.parse 25 21 26 22 let providers = ··· 44 40 redis.create_supervised_pool(redis_host) 45 41 let valky = valkyrie.named_connection(valkey_pool_name) 46 42 43 + let ctx = server.Context(valkye_conn: valky) 44 + 45 + use <- bool.lazy_guard(when: has_providers == False, return: fn() { 46 + let assert Ok(_) = 47 + supervisor.new(supervisor.OneForOne) 48 + |> supervisor.add(valkey_pool) 49 + |> supervisor.add(web.create_server_supervised(ctx)) 50 + |> supervisor.start 51 + 52 + process.sleep_forever() 53 + }) 54 + 47 55 let worker_name = process.new_name("worker_pool") 48 56 let worker_pool_supervised = 49 57 processor.new(valky) 50 58 |> processor.named(worker_name) 51 59 |> processor.providers(providers) 52 60 |> processor.supervised 53 - 54 - let ctx = server.Context(valkye_conn: valky) 55 61 56 62 let assert Ok(_) = 57 63 supervisor.new(supervisor.OneForOne) 58 64 |> supervisor.add(valkey_pool) 59 65 |> supervisor.add(web.create_server_supervised(ctx)) 60 - |> create_supervisor_with_processor(worker_pool_supervised, has_providers) 66 + |> supervisor.add(worker_pool_supervised) 61 67 |> supervisor.start 62 68 63 - use <- bool.lazy_guard(when: !has_providers, return: process.sleep_forever) 64 - 65 - list.repeat(Nil, processor_qtt) 66 - |> list.map(fn(a) { 67 - process.spawn(fn() { 68 - worker_name 69 - |> process.named_subject 70 - |> processor.loop_worker(processor_time) 71 - }) 72 - a 69 + process.spawn(fn() { 70 + worker_name 71 + |> process.named_subject 72 + |> processor.loop_worker(processor_time) 73 73 }) 74 74 75 75 process.spawn(fn() { ··· 80 80 81 81 process.sleep_forever() 82 82 } 83 - 84 - fn create_supervisor_with_processor( 85 - manager: supervisor.Builder, 86 - processor: supervision.ChildSpecification(process.Subject(processor.Message)), 87 - has_processor: Bool, 88 - ) { 89 - use <- bool.guard(when: !has_processor, return: manager) 90 - 91 - manager 92 - |> supervisor.add(processor) 93 - }
+2 -2
src/web/controllers/payment_controller.gleam
··· 51 51 |> list.wrap 52 52 53 53 let assert Ok(_) = 54 - echo ctx.valkye_conn 55 - |> redis.enqueue_payments(data_to_insert) 54 + ctx.valkye_conn 55 + |> redis.enqueue_payments(data_to_insert) 56 56 57 57 wisp.no_content() 58 58 }
+1
src/web/middleware.gleam
··· 6 6 ) -> wisp.Response { 7 7 let req = wisp.method_override(req) 8 8 9 + use <- wisp.log_request(req) 9 10 use <- wisp.rescue_crashes 10 11 use req <- wisp.handle_head(req) 11 12
+3
src/web/web.gleam
··· 1 1 import mist 2 2 import web/router 3 3 import web/server 4 + import wisp 4 5 import wisp/wisp_mist 5 6 6 7 pub fn create_server_supervised(ctx: server.Context) { 8 + wisp.configure_logger() 9 + 7 10 router.handle_request(_, ctx) 8 11 |> wisp_mist.handler("secret") 9 12 |> mist.new