Don't use pg pool, too flaky for now

This commit is contained in:
Roberto Alsina 2024-08-21 18:18:35 -03:00
parent dbbf7224b3
commit 9190060c52
5 changed files with 70 additions and 86 deletions

View File

@ -1,5 +1,6 @@
require "json"
require "kemal"
require "db"
require "pg"
require "pool/connection"
@ -11,11 +12,6 @@ DBHOST = File.read("/secrets/dbhost").strip
DBURL = "postgres://#{USER}:#{PASS}@#{DBHOST}:5432/nombres"
puts "Connnecting to #{DBURL}"
# Create a connection pool to the database
pg = ConnectionPool.new(capacity: 25, timeout: 1.seconds) do
PG.connect(DBURL)
end
def normalize(s : String) : String
s.unicode_normalize(:nfkd)
.chars.reject! { |character|
@ -25,6 +21,7 @@ end
# A basic hello world get endpoint
post "/" do |env|
db = DB.open DBURL
prefijo = env.params.json["p"].as(String)
genero = env.params.json["g"].as(String)
year = env.params.json["a"].as(String)
@ -35,16 +32,15 @@ post "/" do |env|
end
datos = [] of Tuple(String, Int32 | String)
# Connect using credentials provided
pg.connection do |cursor|
if prefijo.empty? && year.empty?
result_set = cursor.query("
result_set = db.query("
SELECT nombre, total::integer
FROM totales
ORDER BY total DESC
LIMIT 50")
elsif prefijo.empty? && !year.empty?
# Per-year totals
result_set = cursor.query("
result_set = db.query("
SELECT nombre, contador::integer
FROM nombres
WHERE
@ -53,7 +49,7 @@ post "/" do |env|
LIMIT 50", year)
elsif !prefijo.empty? && year.empty?
# Filter only by prefix
result_set = cursor.query("
result_set = db.query("
SELECT nombre, total::integer
FROM totales
WHERE
@ -62,7 +58,7 @@ post "/" do |env|
LIMIT 50", prefijo + "%")
elsif !prefijo.empty? && !year.empty?
# We have both
result_set = cursor.query("
result_set = db.query("
SELECT nombre, contador::integer
FROM nombres
WHERE
@ -84,7 +80,6 @@ post "/" do |env|
if datos.empty?
raise "No data found"
end
end
# In this context, remove all composite names
datos.reject! { |row|
row[0].to_s.includes? " "
@ -92,7 +87,6 @@ post "/" do |env|
datos.insert(0, {"Nombre", "Cuantos?"})
if genero
pg.connection do |cursor|
datos.reject! { |row|
# How feminine is this name?
# Yes this database is upper case
@ -103,7 +97,7 @@ post "/" do |env|
COALESCE((SELECT frecuencia FROM hombres WHERE nombre='#{row[0]?.to_s.upcase}'), 0) AS hombres
)
puts "SQL: #{sql}"
cursor.query sql do |result_set|
db.query sql do |result_set|
result_set.each do
mujeres = result_set.read(Int32)
hombres = result_set.read(Int32)
@ -125,7 +119,6 @@ post "/" do |env|
}
puts "Data split by gender"
end
end
datos = datos[..10].map { |row|
[row[0].capitalize, row[1]]
}
@ -141,9 +134,14 @@ post "/" do |env|
"title" => title,
"data" => datos,
}.to_json
ensure
db.try &.close
end
get "/ping/" do
pg.connection.exec("SELECT 42")
db = DB.open DBURL
db.exec("SELECT 42")
"OK"
ensure
db.try &.close
end

View File

@ -1,14 +1,14 @@
#!/bin/sh -x
set -e
#export OPENFAAS_URL=http://pinky:8082
#pass faas.ralsina.me | faas-cli login -u admin --password-stdin
export OPENFAAS_URL=http://pinky:8082
pass faas.ralsina.me | faas-cli login -u admin --password-stdin
#pass iol-pass | faas-cli secret create iol-pass
#pass iol-user | faas-cli secret create iol-user
#pass iol-api-secret | faas-cli secret create iol-api-secret
pass iol-pass | faas-cli secret create iol-pass
pass iol-user | faas-cli secret create iol-user
pass iol-api-secret | faas-cli secret create iol-api-secret
#pass nombres-user | faas-cli secret create nombres-user
#pass nombres-pass | faas-cli secret create nombres-pass
#faas-cli deploy -f functions.yml $*
faas-cli deploy -f functions.yml $*
export FAASO_SERVER=http://rocky:8888/admin
pass faaso-rocky | faaso login

View File

@ -3,10 +3,6 @@ provider:
name: openfaas
gateway: http://pinky:8082
functions:
tapas:
lang: python3-flask
handler: ./tapas
image: ralsina/tapas:latest
iol:
lang: python3-fastapi
handler: ./iol

View File

@ -11,11 +11,6 @@ DBHOST = File.read("/secrets/dbhost").strip
DBURL = "postgres://#{USER}:#{PASS}@#{DBHOST}:5432/nombres"
puts "Connnecting to #{DBURL}"
# Create a connection pool to the database
pg = ConnectionPool.new(capacity: 25, timeout: 1.seconds) do
PG.connect(DBURL)
end
# Connect to the database and get information about
# the requested names
get "/" do |env|
@ -31,7 +26,7 @@ get "/" do |env|
results << [anio.to_s]
end
# Connect using credentials provided
pg.connection do |cursor|
db = DB.open DBURL
# Get the information for each name
names.map do |name|
# Normalize: remove diacritics etc.
@ -41,7 +36,7 @@ get "/" do |env|
}.join("").downcase
counter_per_year = {} of Int32 => Int32
cursor.query("
db.query("
SELECT anio::integer, contador::integer
FROM nombres WHERE nombre = $1", name) do |result_set|
result_set.each do
@ -52,15 +47,15 @@ get "/" do |env|
results[anio - 1921] << counter_per_year.fetch(anio, 0).to_s
end
end
end
results.to_json
ensure
db.try &.close
end
# The `/ping/` endpoint is configured in the container as a healthcheck
# You can make it better by checking that your database is responding
# or whatever checks you think are important
#
get "/ping/" do
pg.connection.exec("SELECT 42")
db = DB.open DBURL
db.exec("SELECT 42")
"OK"
ensure
db.try &.close
end

View File

@ -306,12 +306,7 @@
id="nombres"
placeholder="Nombres separados con comas"
aria-label="Search"
<<<<<<< Updated upstream
value="Juan, María"
||||||| Stash base
=======
value="juan,maria"
>>>>>>> Stashed changes
/>
<input type="submit" value="Buscar" onCLick="drawChart2();" />
</form>