Class: JIJI::Process

Inherits:
Object
  • Object
show all
Defined in:
lib/jiji/process.rb

Overview

プロセス

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(info) ⇒ Process

コンストラクタ



17
18
19
20
21
22
23
# File 'lib/jiji/process.rb', line 17

def initialize( info )
  @info = info
  @started_mutex = Mutex.new
  @started_mutex.synchronize {
    @started= false
  }
end

Instance Attribute Details

#agent_managerObject

Returns the value of attribute agent_manager.



112
113
114
# File 'lib/jiji/process.rb', line 112

def agent_manager
  @agent_manager
end

#collectorObject

Returns the value of attribute collector.



110
111
112
# File 'lib/jiji/process.rb', line 110

def collector
  @collector
end

#infoObject

Returns the value of attribute info.



109
110
111
# File 'lib/jiji/process.rb', line 109

def info
  @info
end

#loggerObject

Returns the value of attribute logger.



113
114
115
# File 'lib/jiji/process.rb', line 113

def logger
  @logger
end

#observer_managerObject

Returns the value of attribute observer_manager.



111
112
113
# File 'lib/jiji/process.rb', line 111

def observer_manager
  @observer_manager
end

Instance Method Details

#load_agents(ignore_error) ⇒ Object

エージェントをロードする



26
27
28
29
# File 'lib/jiji/process.rb', line 26

def load_agents( ignore_error )
  info.load_agents( agent_manager,
    agent_manager.agent_registry, logger, ignore_error )
end

#on_finished(state, now) ⇒ Object

コレクターの終了通知を受け取る



94
95
96
97
98
99
100
101
102
# File 'lib/jiji/process.rb', line 94

def on_finished( state, now )
  begin
    info["state"] = state
    agent_manager.flush( now )
  ensure
     logger.close if logger
     @logger = nil
  end
end

#on_progress_changed(progress) ⇒ Object

コレクターからの進捗通知を受け取る



105
106
107
# File 'lib/jiji/process.rb', line 105

def on_progress_changed( progress )
  info.progress = progress
end

#set_agents(agents) ⇒ Object

エージェントの設定を更新する

戻り値

変更に失敗したエージェントの一覧



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/jiji/process.rb', line 68

def set_agents(agents)
  failed = {}
  # エージェントの設定が更新された
  # 削除対象を特定するため、登録済みエージェントのIDのセットを作成
  set = info["agents"] ? info["agents"].inject({}){|s,i| s[i["id"]]=i;s} : {}
  agents.each {|item|
    # プロパティの更新 / 対応するエージェントが存在しなければ作成。
    set_agent_properties( item, agent_manager, failed )
    set.delete item["id"]
  }
  # Mapに含まれていないエージェントは削除
  set.each { |pair|
    info = pair[1]
    begin
      logger.info "remove agent. name=#{info["name"]} id=#{info["id"]}"
      agent_manager.remove( info["id"] )
    rescue Exception
      logger.warn "failed to remove agent. name=#{info["name"]} id=#{info["id"]}"
      logger.warn $!
      failed[info["id"]] = {:cause=>$!.to_s,:info=>info,:operation=>:remove}
    end
  }
  failed
end

#startObject



31
32
33
34
35
36
37
38
39
# File 'lib/jiji/process.rb', line 31

def start
  @started_mutex.synchronize {
    @started= true
    collector.listeners << self
    collector.start
  }
  # 状態を覚えておく
  info["state"] = collector.state
end

#stopObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/jiji/process.rb', line 41

def stop
  @started_mutex.synchronize {
    if @started  # 起動していない場合は何もしない
      observer_manager.stop
      collector.stop

      # 状態を覚えておく
      info["state"] = collector.state
      @started = false
    else
      # 待機中の場合、キャンセル状態にする。
      if info["state"] == :WAITING
       info["state"] = :CANCELED
     end
     logger.close if logger
     @logger = nil
    end
  }
end

#trade_enable=(enable) ⇒ Object

自動取引のon/offを設定する



62
63
64
# File 'lib/jiji/process.rb', line 62

def trade_enable=(enable)
  agent_manager.operator.trade_enable = enable
end