Class: JIJI::AgentManager
- Inherits:
-
Object
- Object
- JIJI::AgentManager
- Includes:
- Enumerable, AgentUtil
- Defined in:
- lib/jiji/agent/agent_manager.rb
Defined Under Namespace
Classes: State
Instance Attribute Summary collapse
-
#agent_registry ⇒ Object
Returns the value of attribute agent_registry.
-
#conf ⇒ Object
Returns the value of attribute conf.
-
#operator ⇒ Object
Returns the value of attribute operator.
-
#output_manager ⇒ Object
Returns the value of attribute output_manager.
-
#trade_result_dao ⇒ Object
Returns the value of attribute trade_result_dao.
Instance Method Summary collapse
-
#add(agent_id, agent, agent_name = "") ⇒ Object
エージェントを追加する.
-
#clear ⇒ Object
エージェントをすべて破棄する.
-
#each(&block) ⇒ Object
エージェントの一覧を得る.
-
#flush(time) ⇒ Object
取引結果データを強制的にファイルに出力する。.
-
#get(name) ⇒ Object
エージェントを得る.
-
#initialize(process_id, agent_registry, logger, failsafe = true) ⇒ AgentManager
constructor
- コンストラクタ process_id
- プロセスID agent_registry
- エージェントレジストリ logger
- ロガー failsafe
-
レートを通知した際にエージェントで発生したエラーを無視するかどうか?.
-
#next_rates(rates) ⇒ Object
レートを受け取ってエージェントに通知する。.
-
#off(agent_name) ⇒ Object
エージェントへのイベント通知を停止する.
-
#on(agent_name) ⇒ Object
エージェントへのイベント通知を開始する.
-
#on?(agent_name) ⇒ Boolean
エージェントへのイベント通知状態を取得する.
-
#remove(name) ⇒ Object
エージェントを破棄する.
Methods included from AgentUtil
Constructor Details
#initialize(process_id, agent_registry, logger, failsafe = true) ⇒ AgentManager
コンストラクタ
- process_id
-
プロセスID
- agent_registry
-
エージェントレジストリ
- logger
-
ロガー
- failsafe
-
レートを通知した際にエージェントで発生したエラーを無視するかどうか?
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/jiji/agent/agent_manager.rb', line 25 def initialize( process_id, agent_registry, logger, failsafe=true ) @process_id = process_id @agents = {} @agent_registry = agent_registry @logger = logger # エージェントでエラーが発生した場合にエラーを無視し実行を継続するか # true の場合、ログ出力後エラーを握って処理を継続(RMTはこちらで動作する) # false の場合、ログ出力後エラーを再スロー(バックテストはこちらで動作する) @failsafe = failsafe end |
Instance Attribute Details
#agent_registry ⇒ Object
Returns the value of attribute agent_registry.
131 132 133 |
# File 'lib/jiji/agent/agent_manager.rb', line 131 def agent_registry @agent_registry end |
#conf ⇒ Object
Returns the value of attribute conf.
134 135 136 |
# File 'lib/jiji/agent/agent_manager.rb', line 134 def conf @conf end |
#operator ⇒ Object
Returns the value of attribute operator.
133 134 135 |
# File 'lib/jiji/agent/agent_manager.rb', line 133 def operator @operator end |
#output_manager ⇒ Object
Returns the value of attribute output_manager.
135 136 137 |
# File 'lib/jiji/agent/agent_manager.rb', line 135 def output_manager @output_manager end |
#trade_result_dao ⇒ Object
Returns the value of attribute trade_result_dao.
132 133 134 |
# File 'lib/jiji/agent/agent_manager.rb', line 132 def trade_result_dao @trade_result_dao end |
Instance Method Details
#add(agent_id, agent, agent_name = "") ⇒ Object
エージェントを追加する
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/jiji/agent/agent_manager.rb', line 37 def add( agent_id, agent, agent_name="" ) if @agents.key? agent_id raise UserError.new( JIJI::ERROR_ALREADY_EXIST, "agent is already exist. id=#{agent_id}") end output = @output_manager.create( @process_id, agent_id ) output.agent_name = agent_name op = AgentOperator.new( @operator, agent_name ) safe( conf.get( [:agent,:safe_level], 4) ){ agent.operator = op agent.logger = @logger agent.output = output agent.init } @agents[agent_id] = State.new( agent, output, op, true ) end |
#clear ⇒ Object
エージェントをすべて破棄する
72 73 74 |
# File 'lib/jiji/agent/agent_manager.rb', line 72 def clear @agents.clear end |
#each(&block) ⇒ Object
エージェントの一覧を得る
62 63 64 |
# File 'lib/jiji/agent/agent_manager.rb', line 62 def each( &block ) @agents.each( &block ) end |
#flush(time) ⇒ Object
取引結果データを強制的にファイルに出力する。
126 127 128 129 |
# File 'lib/jiji/agent/agent_manager.rb', line 126 def flush( time ) @trade_result_dao.flush( time ) @operator.flush end |
#get(name) ⇒ Object
エージェントを得る
67 68 69 |
# File 'lib/jiji/agent/agent_manager.rb', line 67 def get( name ) @agents[name] end |
#next_rates(rates) ⇒ Object
レートを受け取ってエージェントに通知する。
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/jiji/agent/agent_manager.rb', line 101 def next_rates( rates ) @operator.next_rates( rates ) @agents.each_pair {|n,a| a.output.time = rates.time } safe( conf.get( [:agent,:safe_level], 4) ){ @agents.each_pair {|n,a| next unless a.active if @failsafe JIJI::Util.log_if_error( @logger ) { next unless a.active a.agent.next_rates( rates ) } else JIJI::Util.log_if_error_and_throw( @logger ) { a.agent.next_rates( rates ) } end } } # 取引結果の集計 @trade_result_dao.next( operator, rates.time ) end |
#off(agent_name) ⇒ Object
エージェントへのイベント通知を停止する
85 86 87 88 89 90 |
# File 'lib/jiji/agent/agent_manager.rb', line 85 def off( agent_name ) unless @agents.key? agent_name raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent not found. name=#{agent_name}") end @agents[agent_name].active = false end |
#on(agent_name) ⇒ Object
エージェントへのイベント通知を開始する
77 78 79 80 81 82 |
# File 'lib/jiji/agent/agent_manager.rb', line 77 def on( agent_name ) unless @agents.key? agent_name raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent not found. name=#{agent_name}") end @agents[agent_name].active = true end |
#on?(agent_name) ⇒ Boolean
エージェントへのイベント通知状態を取得する
93 94 95 96 97 98 |
# File 'lib/jiji/agent/agent_manager.rb', line 93 def on?( agent_name ) unless @agents.key? agent_name raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent not found. name=#{agent_name}") end @agents[agent_name].active end |
#remove(name) ⇒ Object
エージェントを破棄する
54 55 56 57 58 59 |
# File 'lib/jiji/agent/agent_manager.rb', line 54 def remove( name ) unless @agents.key? name raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent not found. name=#{name}") end @agents.delete name end |