diff --git a/apps/state_mediator/config/config.exs b/apps/state_mediator/config/config.exs index 4824cd1a..9b450a37 100644 --- a/apps/state_mediator/config/config.exs +++ b/apps/state_mediator/config/config.exs @@ -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"}, diff --git a/apps/state_mediator/lib/state_mediator.ex b/apps/state_mediator/lib/state_mediator.ex index 66c75fb3..380aaec9 100644 --- a/apps/state_mediator/lib/state_mediator.ex +++ b/apps/state_mediator/lib/state_mediator.ex @@ -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 @@ -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") [ { @@ -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 diff --git a/apps/state_mediator/lib/state_mediator/s3_mediator.ex b/apps/state_mediator/lib/state_mediator/s3_mediator.ex index 11427f17..8a9ed3f6 100644 --- a/apps/state_mediator/lib/state_mediator/s3_mediator.ex +++ b/apps/state_mediator/lib/state_mediator/s3_mediator.ex @@ -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) diff --git a/config/runtime.exs b/config/runtime.exs index 84c61c0d..dd7b502e 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -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,