Skip to content

Commit

Permalink
fixup: add feature flag for toggling between firebase and s3
Browse files Browse the repository at this point in the history
  • Loading branch information
rudiejd committed Feb 3, 2025
1 parent 6268e2b commit 5b95042
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 7 deletions.
3 changes: 2 additions & 1 deletion apps/state_mediator/config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ config :state_mediator, :commuter_rail_crowding,
"CR_CROWDING_BASE_URL",
"https://keolis-api-development.firebaseio.com/p-kcs-trms-firebase-7dayloading.json"
},
enabled: {:system, "CR_CROWDING_ENABLED", "true"}
enabled: {:system, "CR_CROWDING_ENABLED", "true"},
source: :s3

config :state_mediator, Realtime,
gtfs_url: {:system, "MBTA_GTFS_URL", "https://cdn.mbta.com/MBTA_GTFS.zip"},
Expand Down
38 changes: 33 additions & 5 deletions apps/state_mediator/lib/state_mediator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ defmodule StateMediator do
def start(_type, _args) do
children =
children(Application.get_env(:state_mediator, :start)) ++
crowding_children(app_value(:commuter_rail_crowding, :enabled) == "true")
crowding_children(app_value(:commuter_rail_crowding, :enabled) == "true", app_value(:commuter_rail_crowding, :source))

# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options
Expand Down Expand Up @@ -94,9 +94,9 @@ defmodule StateMediator do
}
end

@spec crowding_children(boolean()) :: [:supervisor.child_spec() | {module(), term()} | module()]
defp crowding_children(true) do
Logger.info("#{__MODULE__} CR_CROWDING_ENABLED=true")
@spec crowding_children(boolean(), :s3 | :firebase) :: [:supervisor.child_spec() | {module(), term()} | module()]
defp crowding_children(true, :s3) do
Logger.info("#{__MODULE__} CR_CROWDING_ENABLED=true, source=s3")

[
{
Expand All @@ -114,7 +114,35 @@ defmodule StateMediator do
]
end

defp crowding_children(false) do
defp crowding_children(true, :firebase) do
Logger.info("#{__MODULE__} CR_CROWDING_ENABLED=true, source=firebase")

credentials = :commuter_rail_crowding |> app_value(:firebase_credentials) |> Jason.decode!()

scopes = [
"https://www.googleapis.com/auth/firebase.database",
"https://www.googleapis.com/auth/userinfo.email"
]

source = {:service_account, credentials, scopes: scopes}
base_url = app_value(:commuter_rail_crowding, :firebase_url)

[
{Goth, [name: StateMediator.Goth, source: source]},
{
StateMediator.Mediator,
[
spec_id: :cr_crowding_mediator,
state: State.CommuterRailOccupancy,
url: {StateMediator.Firebase, :url, [StateMediator.Goth, base_url]},
sync_timeout: 30_000,
interval: 5 * 60 * 1_000,
opts: [timeout: 10_000] ]
}
]
end

defp crowding_children(false, _) do
Logger.info("#{__MODULE__} CR_CROWDING_ENABLED=false")
[]
end
Expand Down
2 changes: 2 additions & 0 deletions apps/state_mediator/lib/state_mediator/s3_mediator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ defmodule StateMediator.S3Mediator do
{:ok, %{body: body}},
%{sync_timeout: sync_timeout, module: state_module} = state
) do
{:ok, json} = Jason.decode(body)
IO.inspect(json)
debug_time("#{state_module} new state", fn -> state_module.new_state(body, sync_timeout) end)

schedule_update(state)
Expand Down
3 changes: 2 additions & 1 deletion config/runtime.exs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ if is_prod? and is_release? do
secret_key_base: System.fetch_env!("SECRET_KEY_BASE")

config :state_mediator, :commuter_rail_crowding,
firebase_credentials: System.fetch_env!("CR_CROWDING_FIREBASE_CREDENTIALS")
s3_bucket: System.fetch_env!("CR_CROWDING_S3_BUCKET"),
s3_object: System.fetch_env!("CR_CROWDING_S3_OBJECT")

config :recaptcha,
enabled: true,
Expand Down

0 comments on commit 5b95042

Please sign in to comment.