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.
Instance Method Summary collapse
-
#add_file(file_name, body, type = :agent) ⇒ Object
ファイルを追加/更新する。.
-
#create(name, properties = {}) ⇒ Object
エージェントを生成する.
-
#each(&block) ⇒ Object
エージェント名を列挙する.
-
#files(type = :agent) ⇒ Object
ファイル名の一覧を得る。.
-
#get(name) ⇒ Object
- エージェントを取得する name
-
エージェント名( @ ).
-
#get_description(name) ⇒ Object
エージェントの説明を取得する.
-
#get_file(file, type = :agent) ⇒ 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
エージェント置き場から、エージェントをロードする。.
-
#remove_file(file_name, type = :agent) ⇒ Object
ファイルを破棄する.
Methods included from AgentUtil
Constructor Details
#initialize(agent_dir, shared_lib_dir) ⇒ AgentRegistry
Returns a new instance of AgentRegistry.
47 48 49 50 51 52 53 54 |
# File 'lib/jiji/agent/agent_registry.rb', line 47 def initialize( agent_dir, shared_lib_dir ) @agent_dir = agent_dir FileUtils.mkdir_p @agent_dir @shared_lib_dir = shared_lib_dir FileUtils.mkdir_p @shared_lib_dir @agents = {} end |
Instance Attribute Details
#conf ⇒ Object
Returns the value of attribute conf.
199 200 201 |
# File 'lib/jiji/agent/agent_registry.rb', line 199 def conf @conf end |
Instance Method Details
#add_file(file_name, body, type = :agent) ⇒ Object
ファイルを追加/更新する。
176 177 178 179 180 181 182 183 184 |
# File 'lib/jiji/agent/agent_registry.rb', line 176 def add_file( file_name, body, type=:agent ) lock(type) { file = "#{dir(type)}/#{file_name}" File.open( file, "w" ) {|f| f.puts body } inner_load( file, type ) } end |
#create(name, properties = {}) ⇒ Object
エージェントを生成する
65 66 67 68 69 70 71 72 |
# File 'lib/jiji/agent/agent_registry.rb', line 65 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
エージェント名を列挙する
57 58 59 60 61 62 |
# File 'lib/jiji/agent/agent_registry.rb', line 57 def each( &block ) checked = Set.new @agents.each() { |k,m| find_agent( k, m, checked ) {|name| block.call(name) } } end |
#files(type = :agent) ⇒ Object
ファイル名の一覧を得る。
130 131 132 133 134 135 136 137 |
# File 'lib/jiji/agent/agent_registry.rb', line 130 def files( type=:agent ) lock(type) { Dir.glob( "#{dir(type)}/*.rb" ).map {|item| { "name" =>File.basename(item), "update"=>File.mtime(item).to_i } }.sort_by {|item| item["name"] } } end |
#get(name) ⇒ Object
エージェントを取得する
- name
-
エージェント名( @ )
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/jiji/agent/agent_registry.rb', line 76 def get(name) unless name =~ /([^@]+)@([^@]+)/ raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent class not found. name=#{name}") end m = @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
エージェントの説明を取得する
121 122 123 124 125 126 127 |
# File 'lib/jiji/agent/agent_registry.rb', line 121 def get_description(name) cl = get(name) return [] unless cl safe( conf.get( [:agent,:safe_level], 4) ){ cl.new.description } end |
#get_file(file, type = :agent) ⇒ Object
エージェントファイルの本文を取得する。
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/jiji/agent/agent_registry.rb', line 140 def get_file(file, type=:agent ) lock(type) { file = "#{dir(type)}/#{file}" unless File.exist? file raise UserError.new( JIJI::ERROR_NOT_FOUND, "#{type} file not found. file_name=#{file}}") end IO.read(file) } end |
#get_property_infos(name) ⇒ Object
エージェントのプロパティ一覧を取得する
112 113 114 115 116 117 118 |
# File 'lib/jiji/agent/agent_registry.rb', line 112 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
特定のファイルをロードする。
166 167 168 169 170 171 172 173 |
# File 'lib/jiji/agent/agent_registry.rb', line 166 def load(file) file = "#{@agent_dir}/#{file}" unless File.exist? file raise UserError.new( JIJI::ERROR_NOT_FOUND, "agent file not found. file_name=#{file}}") end lock(:agent) { inner_load( file ) } end |
#load_all ⇒ Object
エージェント置き場から、エージェントをロードする。
152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/jiji/agent/agent_registry.rb', line 152 def load_all lock(:shared_lib) { Dir.glob( "#{@shared_lib_dir}/*.rb" ) {|shared_lib_file| inner_load( shared_lib_file, :shared_lib ) } } lock(:agent) { Dir.glob( "#{@agent_dir}/*.rb" ) {|agent_file| inner_load( agent_file, :agent ) } } end |
#remove_file(file_name, type = :agent) ⇒ Object
ファイルを破棄する
187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/jiji/agent/agent_registry.rb', line 187 def remove_file( file_name, type=:agent ) lock(type) { file = "#{dir(type)}/#{file_name}" unless File.exist? file raise UserError.new( JIJI::ERROR_NOT_FOUND, "#{type} file not found. file_name=#{file_name}") end FileUtils.rm_rf file @agents.delete file_name if type==:agent } end |