Skip to content

Commit

Permalink
Merge pull request #6 from karabiner-inc/develop
Browse files Browse the repository at this point in the history
ふぉーまったー
  • Loading branch information
KrainNeun committed Dec 13, 2019
2 parents d6d4229 + 30dc6b4 commit 9250850
Show file tree
Hide file tree
Showing 40 changed files with 699 additions and 504 deletions.
5 changes: 5 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Used by "mix format"
[
inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}", "priv/repo/migrations/**/*.{ex,exs}"],
line_length: 120
]
38 changes: 20 additions & 18 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,14 @@
use Mix.Config

# General application configuration
config :materia_batch,
ecto_repos: [MateriaBatch.Test.Repo]
config :materia_batch, ecto_repos: [MateriaBatch.Test.Repo]

# Configures the endpoint
config :materia_batch, MateriaBatchWeb.Endpoint,
url: [host: "localhost"],
secret_key_base: "xAeVCjjYbPDJQW5oou/zXYHs9KpzNG3XOO/zZuEFxKpTCAwc09sEm9REdzlGPqnE",
render_errors: [view: MateriaBatchWeb.ErrorView, accepts: ~w(html json)],
pubsub: [name: MateriaBatch.PubSub,
adapter: Phoenix.PubSub.PG2]
pubsub: [name: MateriaBatch.PubSub, adapter: Phoenix.PubSub.PG2]

# Configures Elixir's Logger
config :logger, :console,
Expand All @@ -24,33 +22,37 @@ config :logger, :console,

# Configures Materia.Authenticator
config :materia, Materia.Authenticator,
access_token_ttl: {10, :minutes}, #必須
refresh_token_ttl: {1, :days}, # refresh_tokenを定義しない場合sign-inはaccess_tokenのみ返す
# 必須
access_token_ttl: {10, :minutes},
# refresh_tokenを定義しない場合sign-inはaccess_tokenのみ返す
refresh_token_ttl: {1, :days},
user_registration_token_ttl: {35, :minutes},
password_reset_token_ttl: {35, :minutes}

# Configures Guardian
config :materia, Materia.UserAuthenticator,
issuer: "Materia",
secret_key: "VlY6rTO8s+oM6/l4tPY0mmpKubd1zLEDSKxOjHA4r90ifZzCOYVY5IBEhdicZStw",
allowed_algos: ["HS256"]
issuer: "Materia",
secret_key: "VlY6rTO8s+oM6/l4tPY0mmpKubd1zLEDSKxOjHA4r90ifZzCOYVY5IBEhdicZStw",
allowed_algos: ["HS256"]

# Configures Guardian
config :materia, Materia.AccountAuthenticator,
issuer: "Materia",
secret_key: "VlY6rTO8s+oM6/l4tPY0mmpKubd1zLEDSKxOjHA4r90ifZzCOYVY5IBEhdicZStw",
allowed_algos: ["HS256"]
issuer: "Materia",
secret_key: "VlY6rTO8s+oM6/l4tPY0mmpKubd1zLEDSKxOjHA4r90ifZzCOYVY5IBEhdicZStw",
allowed_algos: ["HS256"]

config :guardian, Guardian.DB,
repo: MateriaBatch.Test.Repo, #<- mod your app repo
schema_name: "guardian_tokens", # default
#token_types: ["refresh_token"], # store all token types if not set
sweep_interval: 60 # default: 60 minutes
# <- mod your app repo
repo: MateriaBatch.Test.Repo,
# default
schema_name: "guardian_tokens",
# token_types: ["refresh_token"], # store all token types if not set
# default: 60 minutes
sweep_interval: 60

# Configures gettext for Materia
config :materia, :repo, MateriaBatch.Test.Repo

# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env}.exs"

import_config "#{Mix.env()}.exs"
4 changes: 1 addition & 3 deletions config/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,4 @@ config :materia_batch, MateriaBatch.Test.Repo,
hostname: "localhost",
pool_size: 10

config :mateira_batch, MateriaBatch.Schedules.JobScheduleManager,
max_concurrent_jobs: 2

config :mateira_batch, MateriaBatch.Schedules.JobScheduleManager, max_concurrent_jobs: 2
20 changes: 11 additions & 9 deletions config/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use Mix.Config
# you can enable the server option below.
config :materia_batch, MateriaBatchWeb.Test.Endpoint,
http: [port: 4001],
#server: false,
# server: false,
debug_errors: true,
code_reloader: false,
check_origin: false,
Expand All @@ -26,16 +26,18 @@ config :materia_batch, repo: MateriaBatch.Test.Repo

# Configures GuardianDB
config :guardian, Guardian.DB,
repo: MateriaBatch.Test.Repo,
schema_name: "guardian_tokens", # default
#token_types: ["refresh_token"], # store all token types if not set
sweep_interval: 60 # default: 60 minutes
repo: MateriaBatch.Test.Repo,
# default
schema_name: "guardian_tokens",
# token_types: ["refresh_token"], # store all token types if not set
# default: 60 minutes
sweep_interval: 60

# Configures MateriaBatch
config :materia_batch, MateriaBatch.JobSchedules.JobScheduleManager,
config :materia_batch, MateriaBatch.JobSchedules.JobScheduleManager,
max_concurrent_jobs: 3,
job_check_interval: 60000 # default 60000msec
# default 60000msec
job_check_interval: 60000

# Configures MateriUtils
config :materia_utils,
test_base_datetime: "2019-03-03T00:00:00.000Z"
config :materia_utils, test_base_datetime: "2019-03-03T00:00:00.000Z"
22 changes: 12 additions & 10 deletions config/travis.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use Mix.Config
# you can enable the server option below.
config :materia_batch, MateriaBatchWeb.Test.Endpoint,
http: [port: 4001],
#server: false,
# server: false,
debug_errors: true,
code_reloader: false,
check_origin: false,
Expand All @@ -26,16 +26,18 @@ config :materia_batch, repo: MateriaBatch.Test.Repo

# Configures GuardianDB
config :guardian, Guardian.DB,
repo: MateriaBatch.Test.Repo,
schema_name: "guardian_tokens", # default
#token_types: ["refresh_token"], # store all token types if not set
sweep_interval: 60 # default: 60 minutes
repo: MateriaBatch.Test.Repo,
# default
schema_name: "guardian_tokens",
# token_types: ["refresh_token"], # store all token types if not set
# default: 60 minutes
sweep_interval: 60

# Configures MateriaBatch
config :materia_batch, MateriaBatch.JobSchedules.JobScheduleManager,
# Configures MateriaBatch
config :materia_batch, MateriaBatch.JobSchedules.JobScheduleManager,
max_concurrent_jobs: 3,
job_check_interval: 60000 # default 60000msec
# default 60000msec
job_check_interval: 60000

# Configures MateriUtils
config :materia_utils,
test_base_datetime: "2019-03-03T00:00:00.000Z"
config :materia_utils, test_base_datetime: "2019-03-03T00:00:00.000Z"
10 changes: 4 additions & 6 deletions lib/materia_batch/batch_jobs/batch_job_base.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
defmodule MateriBatch.BatchJobs.BatchJobBase do

alias Ecto.Multi
require Logger

Expand All @@ -8,9 +7,10 @@ defmodule MateriBatch.BatchJobs.BatchJobBase do
Logger.debug("#{__MODULE__} single_transaction start. repo:#{inspect(repo)}")

try do
with {:ok, result} <- Multi.new
|> Multi.run(function_atom, module, function_atom, attr)
|> repo.transaction() do
with {:ok, result} <-
Multi.new()
|> Multi.run(function_atom, module, function_atom, attr)
|> repo.transaction() do
{:ok, result}
else
{:error, function, message, _result} ->
Expand All @@ -27,7 +27,5 @@ defmodule MateriBatch.BatchJobs.BatchJobBase do
Logger.info("#{Exception.format_stacktrace(System.stacktrace())}")
{:error, "#{inspect(e)}"}
end

end

end
28 changes: 17 additions & 11 deletions lib/materia_batch/batch_jobs/table_sweeper.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
defmodule MateriaBatch.BatchJobs.TableSweeper do

alias MateriBatch.BatchJobs.BatchJobBase

alias MateriaUtils.Ecto.EctoUtil
Expand All @@ -9,31 +8,38 @@ defmodule MateriaBatch.BatchJobs.TableSweeper do
require Logger

def run(schema_string, base_datetime_column_string, saving_days, params) do

Logger.debug("#{__MODULE__} run start.")

schema = String.to_existing_atom("Elixir." <> schema_string)
base_datetime = CalendarUtil.now()
base_datetime_column = String.to_atom(base_datetime_column_string)
{:ok, result} = BatchJobBase.single_transaction(__MODULE__, :sweep, [schema, base_datetime_column, base_datetime, saving_days, params])

{:ok, result} =
BatchJobBase.single_transaction(__MODULE__, :sweep, [
schema,
base_datetime_column,
base_datetime,
saving_days,
params
])

Logger.debug("#{__MODULE__} run end.")
{:ok, result}

end

def sweep(_result, schema, base_datetime_column, base_datetime, saving_days, params) do
Logger.info(
"#{__MODULE__} sweep start. schema:#{inspect(schema)} base_datetime:#{inspect(base_datetime)} saving_days:#{
saving_days
}"
)

Logger.info("#{__MODULE__} sweep start. schema:#{inspect(schema)} base_datetime:#{inspect(base_datetime)} saving_days:#{saving_days}")
repo = Application.get_env(:materia, :repo)

repo = Application.get_env(:materia, :repo)

delete_base_datetime = Timex.shift(base_datetime, days: - saving_days)
delete_base_datetime = Timex.shift(base_datetime, days: -saving_days)
{count, result_message} = EctoUtil.delete_by_param(repo, schema, base_datetime_column, delete_base_datetime, params)

Logger.info("#{__MODULE__} sweep end. delete count: #{count}")
{:ok, "delete_count: #{count} result_message: #{inspect(result_message)}" }

{:ok, "delete_count: #{count} result_message: #{inspect(result_message)}"}
end

end
80 changes: 51 additions & 29 deletions lib/materia_batch/batch_managers/job_executer.ex
Original file line number Diff line number Diff line change
@@ -1,57 +1,79 @@
defmodule MateriaBatch.BatchManagers.JobExecuter do

alias MateriaBatch.JobSchedules
alias MateriaBatch.JobSchedules.JobSchedule
alias MateriaUtils.Calendar.CalendarUtil

require Logger

def execute_job(job_schedule, state) do

Logger.debug("#{__MODULE__} execute_job start. state:#{inspect(state)} job_schedule:#{inspect(job_schedule)}")

# 対象ジョブを実行する
module = String.to_existing_atom("Elixir." <> job_schedule.module)
function = String.to_atom(job_schedule.function)

{:ok, params} =
if job_schedule.params == nil do
"[]"
else
"[ " <> job_schedule.params <> " ]"
end
|> Poison.decode()
if job_schedule.params == nil do
"[]"
else
"[ " <> job_schedule.params <> " ]"
end
|> Poison.decode()

Logger.info("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} start.")
before_job_schedule = JobSchedules.get_job_schedule!(job_schedule.id)
{:ok, current_job_schedule} = JobSchedules.update_job_schedule(before_job_schedule, %{start_datetime: CalendarUtil.now()})

{:ok, current_job_schedule} =
JobSchedules.update_job_schedule(before_job_schedule, %{start_datetime: CalendarUtil.now()})

IO.puts("params:#{inspect(params)}")
result = apply(module, function, params)
Logger.info("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} end.#{inspect(result)}")

# 明示的にエラータプルが返った場合
updated_job_schedule =
with {:error, message} <- result do
Logger.error("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with error result.")
Logger.info("-------------- job error message ---------------------------------")
Logger.info("#{inspect(message)}")
{:ok, updated_job_schedule} = JobSchedules.update_job_schedule(current_job_schedule, %{status: JobSchedule.status.error, end_datetime: CalendarUtil.now(), result: inspect(message)})
updated_job_schedule
else
{:ok, ok_result} ->
Logger.info("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with ok result.")
# 明示的にokタプルが返っている場合
{:ok, updated_job_schedule} = JobSchedules.update_job_schedule(current_job_schedule, %{status: JobSchedule.status.success, end_datetime: CalendarUtil.now(), result: inspect(ok_result)})
updated_job_schedule
_ ->
# 明示的にOKタプルが返らない場合
Logger.error("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with other result.")
Logger.info("-------------- job result ---------------------------------")
Logger.info("#{inspect(result)}")
{:ok, updated_job_schedule} = JobSchedules.update_job_schedule(current_job_schedule, %{status: JobSchedule.status.error, end_datetime: CalendarUtil.now(), result: inspect(result)})
with {:error, message} <- result do
Logger.error("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with error result.")
Logger.info("-------------- job error message ---------------------------------")
Logger.info("#{inspect(message)}")

{:ok, updated_job_schedule} =
JobSchedules.update_job_schedule(current_job_schedule, %{
status: JobSchedule.status().error,
end_datetime: CalendarUtil.now(),
result: inspect(message)
})

updated_job_schedule
end
else
{:ok, ok_result} ->
Logger.info("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with ok result.")
# 明示的にokタプルが返っている場合
{:ok, updated_job_schedule} =
JobSchedules.update_job_schedule(current_job_schedule, %{
status: JobSchedule.status().success,
end_datetime: CalendarUtil.now(),
result: inspect(ok_result)
})

updated_job_schedule

_ ->
# 明示的にOKタプルが返らない場合
Logger.error("#{__MODULE__} execute_job job_code:#{job_schedule.job_code} was finished with other result.")
Logger.info("-------------- job result ---------------------------------")
Logger.info("#{inspect(result)}")

{:ok, updated_job_schedule} =
JobSchedules.update_job_schedule(current_job_schedule, %{
status: JobSchedule.status().error,
end_datetime: CalendarUtil.now(),
result: inspect(result)
})

updated_job_schedule
end

{:noreply, updated_job_schedule}
end

end

0 comments on commit 9250850

Please sign in to comment.