1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-24 07:39:39 +02:00

Adjust queues to prioritize account syncs (#1682)

This commit is contained in:
Zach Gollwitzer 2025-01-24 13:39:08 -05:00 committed by GitHub
parent 7d04ea1071
commit 3140835f28
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 37 additions and 12 deletions

View file

@ -1,5 +1,5 @@
class AutoUpgradeJob < ApplicationJob
queue_as :default
queue_as :latency_low
def perform(*args)
raise_if_disabled

View file

@ -1,5 +1,5 @@
class DestroyJob < ApplicationJob
queue_as :default
queue_as :latency_low
def perform(model)
model.destroy

View file

@ -1,5 +1,5 @@
class EnrichDataJob < ApplicationJob
queue_as :default
queue_as :latency_high
def perform(account)
account.enrich_data

View file

@ -1,5 +1,5 @@
class FetchSecurityInfoJob < ApplicationJob
queue_as :default
queue_as :latency_low
def perform(security_id)
return unless Security.security_info_provider.present?

View file

@ -1,5 +1,5 @@
class ImportJob < ApplicationJob
queue_as :default
queue_as :latency_medium
def perform(import)
import.publish

View file

@ -1,5 +1,5 @@
class SyncJob < ApplicationJob
queue_as :default
queue_as :latency_medium
def perform(sync)
sync.perform

View file

@ -1,5 +1,5 @@
class UserPurgeJob < ApplicationJob
queue_as :default
queue_as :latency_low
def perform(user)
user.purge

View file

@ -37,6 +37,14 @@ class TimeSeries
series: self
end
def empty?
values.empty?
end
def has_current_day_value?
values.any? { |v| v.date == Date.current }
end
# `as_json` returns the data shape used by D3 charts
def as_json
{

View file

@ -17,15 +17,19 @@
</div>
<div class="h-64">
<% if series %>
<% if series.has_current_day_value? %>
<div
id="lineChart"
class="w-full h-full"
data-controller="time-series-chart"
data-time-series-chart-data-value="<%= series.to_json %>"></div>
<% elsif series.empty? %>
<div class="w-full h-full flex items-center justify-center">
<p class="text-gray-500 text-sm">No data available for the selected period.</p>
</div>
<% else %>
<div class="w-full h-full flex items-center justify-center">
<p class="text-gray-500">No data available for the selected period.</p>
<p class="text-gray-500 text-sm animate-pulse">Calculating latest balance data...</p>
</div>
<% end %>
</div>

View file

@ -1,12 +1,16 @@
<%# locals: (series:) %>
<% if series %>
<% if series.has_current_day_value? %>
<div
id="netWorthChart"
class="w-full flex-1 min-h-52"
data-controller="time-series-chart"
data-time-series-chart-data-value="<%= series.to_json %>"></div>
<% elsif series.empty? %>
<div class="w-full h-full flex items-center justify-center">
<p class="text-gray-500 text-sm">No data available for the selected period.</p>
</div>
<% else %>
<div class="w-full h-full flex items-center justify-center">
<p class="text-gray-500">No data available for the selected period.</p>
<p class="text-gray-500 text-sm animate-pulse">Calculating latest balance data...</p>
</div>
<% end %>

View file

@ -1,7 +1,8 @@
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# 3 connections for Puma, 8 for GoodJob (in async mode, the default for self-hosters) = 11 connections
pool: <%= ENV.fetch("DB_POOL_SIZE") { 11 } %>
host: <%= ENV.fetch("DB_HOST") { "127.0.0.1" } %>
port: <%= ENV.fetch("DB_PORT") { "5432" } %>
user: <%= ENV.fetch("POSTGRES_USER") { nil } %>

View file

@ -11,6 +11,14 @@ Rails.application.configure do
}
end
# 5 queue threads + 3 for job listener, cron, executor = 8 threads allocated
config.queues = {
"latency_low" => { max_threads: 1, priority: 10 }, # ~30s jobs
"latency_low,latency_medium" => { max_threads: 2, priority: 5 }, # ~1-2 min jobs
"latency_low,latency_medium,latency_high" => { max_threads: 1, priority: 1 }, # ~5+ min jobs
"*" => { max_threads: 1, priority: 0 } # fallback queue
}
# Auth for jobs admin dashboard
ActiveSupport.on_load(:good_job_application_controller) do
before_action do