diff --git a/sgx_jmp.rb b/sgx_jmp.rb index d347337f5e420c056b61901fec0a0101735a2b0d..b6a3b938377a833ffbd743e23cde6ab91818d007 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -183,10 +183,17 @@ end EM.error_handler(&method(:panic)) # Infer anything we might have been notified about while we were down -def catchup_notify(db) - db.query("SELECT customer_id FROM balances WHERE balance < 5").each do |c| +def catchup_notify_low_balance(db) + db.query(<<~SQL).each do |c| + SELECT customer_id + FROM balances INNER JOIN customer_plans USING (customer_id) + WHERE balance < 5 AND expires_at > LOCALTIMESTAMP + SQL db.query("SELECT pg_notify('low_balance', $1)", c.values) end +end + +def catchup_notify_possible_renewal db.query(<<~SQL).each do |c| SELECT customer_id FROM customer_plans INNER JOIN balances USING (customer_id) @@ -227,7 +234,8 @@ when_ready do DB.hold do |conn| conn.query("LISTEN low_balance") conn.query("LISTEN possible_renewal") - catchup_notify(conn) + catchup_notify_low_balance(conn) + catchup_notify_possible_renewal(conn) poll_for_notify(conn) end