Class: JIJI::AgentRegistry
- Inherits:
-
Object
- Object
- JIJI::AgentRegistry
- Includes:
- Enumerable, AgentUtil
- Defined in:
- lib/jiji/agent/agent_registry.rb
Overview
エージェントレジストリ
Instance Attribute Summary collapse
-
#conf ⇒ Object
Returns the value of attribute conf.
-
#file_dao ⇒ Object
Returns the value of attribute file_dao.
-
#server_logger ⇒ Object
Returns the value of attribute server_logger.
Instance Method Summary collapse
-
#create(name, properties = {}) ⇒ Object
エージェントを生成する.
-
#each(&block) ⇒ Object
エージェント名を列挙する.
-
#get(name) ⇒ Object
- エージェントを取得する name
-
エージェント名( @ ).
-
#get_description(name) ⇒ Object
エージェントの説明を取得する.
-
#get_property_infos(name) ⇒ Object
エージェントのプロパティ一覧を取得する.
-
#initialize(agent_dir, shared_lib_dir) ⇒ AgentRegistry
constructor
A new instance of AgentRegistry.
-
#load(file) ⇒ Object
特定のファイルをロードする。.
-
#load_all ⇒ Object
エージェント置き場から、エージェントをロードする。 起動時に一度だけ呼ばれる。.
-
#unload(file) ⇒ Object
特定のファイルをアンロードする。.
Methods included from AgentUtil
Constructor Details
#initialize(agent_dir, shared_lib_dir) ⇒ AgentRegistry
Returns a new instance of AgentRegistry.
17 18 19 20 21 |
# File 'lib/jiji/agent/agent_registry.rb', line 17 def initialize( agent_dir, shared_lib_dir ) @agent_dir = agent_dir @shared_lib_dir = shared_lib_dir @agents = {} end |
Instance Attribute Details
#conf ⇒ Object
Returns the value of attribute conf.
126 127 128 |
# File 'lib/jiji/agent/agent_registry.rb', line 126 def conf @conf end |
#file_dao ⇒ Object
Returns the value of attribute file_dao.
127 128 129 |
# File 'lib/jiji/agent/agent_registry.rb', line 127 def file_dao @file_dao end |
#server_logger ⇒ Object
Returns the value of attribute server_logger.
128 129 130 |
# File 'lib/jiji/agent/agent_registry.rb', line 128 def server_logger @server_logger end |
Instance Method Details
#create(name, properties = {}) ⇒ Object
エージェントを生成する
32 33 34 35 36 37 38 39 |
# File 'lib/jiji/agent/agent_registry.rb', line 32 def create(name, properties={}) cl = get(name) safe( conf.get( [:agent,:safe_level], 4) ){ agent = cl.new agent.properties = properties agent } end |
#each(&block) ⇒ Object
エージェント名を列挙する
24 25 26 27 28 29 |
# File 'lib/jiji/agent/agent_registry.rb', line 24 def each( &block ) checked = Set.new @agents.each() { |k,m| find_agent( k, m, checked ) {|name| block.call(name) } } end |
#get(name) ⇒ Object
エージェントを取得する
- name
-
エージェント名( @ )
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/jiji/agent/agent_registry.rb', line 43 def get(name) unless name =~ /([^@]+)@([^@]+)/ raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end m = @agents["agents/#{$2}"] unless m raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end path = $1.split("::") path.each {|step| unless m.const_defined? step raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end m = m.const_get step unless m raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end unless m.kind_of?(Module) raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end } if m.kind_of?(Class) && m < JIJI::Agent m else raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end end |
#get_description(name) ⇒ Object
エージェントの説明を取得する
88 89 90 91 92 93 94 |
# File 'lib/jiji/agent/agent_registry.rb', line 88 def get_description(name) cl = get(name) return [] unless cl safe( conf.get( [:agent,:safe_level], 4) ){ cl.new.description } end |
#get_property_infos(name) ⇒ Object
エージェントのプロパティ一覧を取得する
79 80 81 82 83 84 85 |
# File 'lib/jiji/agent/agent_registry.rb', line 79 def get_property_infos(name) cl = get(name) return [] unless cl safe( conf.get( [:agent,:safe_level], 4) ){ cl.new.property_infos } end |
#load(file) ⇒ Object
特定のファイルをロードする。
113 114 115 |
# File 'lib/jiji/agent/agent_registry.rb', line 113 def load(file) inner_load( file ) end |
#load_all ⇒ Object
エージェント置き場から、エージェントをロードする。 起動時に一度だけ呼ばれる。
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/jiji/agent/agent_registry.rb', line 98 def load_all [@agent_dir,@shared_lib_dir].each {|d| @file_dao.list( d, true ).each {|item| next if item[:type] == :directory begin inner_load( item[:path] ) rescue Exception # ログ出力のみ行い、例外は握る。 server_logger.error( $! ) end } } end |
#unload(file) ⇒ Object
特定のファイルをアンロードする。
118 119 120 121 122 123 124 |
# File 'lib/jiji/agent/agent_registry.rb', line 118 def unload(file) if file =~ /^#{@agent_dir}\/.*/ @agents.delete file else JIJI::Agent::Shared._delegates.delete file end end |