autonumber

actor 利用者
利用者 -> AnalysisView : 実行ボタン押下

activate AnalysisView
  AnalysisView -> AnalysesController : execute

  activate AnalysesController
    AnalysesController -> AnalysesController : remove_old_files
    AnalysesController -> AnalysesController : check_schema
    AnalysesController -> AnalysesController : check_invalid_file

    create Analysis
    AnalysesController -> Analysis : new

    activate Analysis
      create "Analysis::Result"
      Analysis -> "Analysis::Result" : new

      create "Analysis::Parameter"
      Analysis -> "Analysis::Parameter" : new

      opt 指定方法でファイルを指定した場合
        loop 読み込んだレースIDごとに繰り返し
          create "Analysis::Datum"
          Analysis -> "Analysis::Datum" : new
        end
      end
    deactivate Analysis

    AnalysesController -> Analysis : save
    AnalysesController ->> AnalysisJob : perform_later
    activate AnalysisJob

    autonumber stop
    AnalysisView <-- AnalysesController
  deactivate AnalysesController

  利用者 <-- AnalysisView : ジョブ登録完了通知
deactivate AnalysisView

autonumber resume
AnalysisJob -> Analysis : find
AnalysisJob -> Analysis : start!

activate Analysis
  Analysis -> ActionCable : bloadcast

  activate ActionCable
    autonumber stop
    AnalysisView <<- ActionCable : メッセージ送信
    Analysis <-- ActionCable
  deactivate ActionCable

  AnalysisJob <-- Analysis
deactivate Analysis

autonumber resume
AnalysisJob -> Analysis : dump_parameter
AnalysisJob -> Analysis : dump_training_data

activate Analysis
  opt 指定方法でファイルを選択した場合
    loop レースIDの数だけ繰り返す
      Analysis -> File : puts
    end
  end
deactivate Analysis

AnalysisJob -> AnalysisJob : execute_script
AnalysisJob -> AnalysisJob : check_output

AnalysisJob -> Analysis : import_data!

activate Analysis
  opt 指定方法でランダムを選択した場合
    Analysis -> File : read

    loop 読み込んだレースIDごとに繰り返し
      Analysis -> "Analysis::Datum" : create!
    end
  end
deactivate Analysis

AnalysisJob -> "Analysis::Result" : import!

activate "Analysis::Result"
  "Analysis::Result" -> YAML : load_file
  "Analysis::Result" -> "Analysis::Result::Importance" : insert_all!
  "Analysis::Result" -> "Analysis::Result::DecisionTree" : insert_all!

  loop 決定木の数だけ繰り返し
    "Analysis::Result" -> "Analysis::Result::DecisionTree" : import!

    activate "Analysis::Result::DecisionTree"
      "Analysis::Result::DecisionTree" -> YAML : load_file
      "Analysis::Result::DecisionTree" -> "Analysis::Result::DecisionTree::Node" : insert_all!
    deactivate "Analysis::Result::DecisionTree"
  end
deactivate "Analysis::Result"

AnalysisJob -> Analysis : update!

activate Analysis
  Analysis -> ActionCable : bloadcast

  activate ActionCable
    autonumber stop
    AnalysisView <<- ActionCable : メッセージ送信
    Analysis <-- ActionCable
  deactivate ActionCable

  AnalysisJob <-- Analysis
deactivate Analysis

autonumber resume
AnalysisJob -> YAML : dump
AnalysisJob -> AnalysisJob : create_zip
AnalysisJob -> AnalysisJob : create_zip
AnalysisJob -> AnalysisJob : create_zip

AnalysisJob -> AnalysisMailer : completed

activate AnalysisMailer
  autonumber stop
  利用者 <-- AnalysisMailer : メール通知
deactivate AnalysisMailer

autonumber resume
AnalysisJob -> Analysis : complete!

activate Analysis
  Analysis -> ActionCable : bloadcast

  activate ActionCable
    autonumber stop
    AnalysisView <<- ActionCable : メッセージ送信
    Analysis <-- ActionCable
  deactivate ActionCable

  AnalysisJob <-- Analysis
deactivate Analysis

deactivate AnalysisJob
