Provide a target agent select box for an agent that can run other agents.

Akinori MUSHA vor 10 Jahren
Ursprung
Commit
b4636f8c67
4 geänderte Dateien mit 62 neuen Zeilen und 4 gelöschten Zeilen
  1. 23 3
      app/assets/javascripts/application.js.coffee.erb
  2. 12 0
      app/models/agent.rb
  3. 16 1
      app/views/agents/_form.html.erb
  4. 11 0
      app/views/agents/show.html.erb

+ 23 - 3
app/assets/javascripts/application.js.coffee.erb

@@ -22,14 +22,13 @@ window.setupJsonEditor = ($editors = $(".live-json-editor")) ->
22 22
   return editors
23 23
 
24 24
 hideSchedule = ->
25
-  $(".schedule-region select").hide()
25
+  $(".schedule-region .can-be-scheduled").hide()
26 26
   $(".schedule-region .cannot-be-scheduled").show()
27 27
 
28 28
 showSchedule = (defaultSchedule = null) ->
29
-  $(".schedule-region select").show()
30 29
   if defaultSchedule?
31 30
     $(".schedule-region select").val(defaultSchedule).change()
32
-  $(".schedule-region select").show()
31
+  $(".schedule-region .can-be-scheduled").show()
33 32
   $(".schedule-region .cannot-be-scheduled").hide()
34 33
 
35 34
 hideLinks = ->
@@ -43,6 +42,16 @@ showLinks = ->
43 42
   $(".link-region .cannot-receive-events").hide()
44 43
   showEventDescriptions()
45 44
 
45
+hideChains = ->
46
+  $(".chain-region .select2-container").hide()
47
+  $(".chain-region .propagate-immediately").hide()
48
+  $(".chain-region .cannot-receive-events").show()
49
+
50
+showChains = ->
51
+  $(".chain-region .select2-container").show()
52
+  $(".chain-region .propagate-immediately").show()
53
+  $(".chain-region .cannot-receive-events").hide()
54
+
46 55
 hideEventCreation = ->
47 56
   $(".event-related-region").hide()
48 57
 
@@ -161,6 +170,11 @@ $(document).ready ->
161 170
         else
162 171
           hideLinks()
163 172
 
173
+        if json.can_run_other_agents
174
+          showChains()
175
+        else
176
+          hideChains()
177
+
164 178
         if json.can_create_events
165 179
           showEventCreation()
166 180
         else
@@ -191,6 +205,12 @@ $(document).ready ->
191 205
     else
192 206
       hideLinks()
193 207
 
208
+  if $(".chain-region")
209
+    if $(".chain-region").data("can-run-other-agents") == true
210
+      showChains()
211
+    else
212
+      hideChains()
213
+
194 214
   if $(".event-related-region")
195 215
     if $(".event-related-region").data("can-create-events") == true
196 216
       showEventCreation()

+ 12 - 0
app/models/agent.rb

@@ -182,6 +182,10 @@ class Agent < ActiveRecord::Base
182 182
     !cannot_create_events?
183 183
   end
184 184
 
185
+  def can_run_other_agents?
186
+    self.class.can_run_other_agents?
187
+  end
188
+
185 189
   def log(message, options = {})
186 190
     puts "Agent##{id}: #{message}" unless Rails.env.test?
187 191
     AgentLog.log_for_agent(self, message, options)
@@ -304,6 +308,14 @@ class Agent < ActiveRecord::Base
304 308
       !!@cannot_receive_events
305 309
     end
306 310
 
311
+    def can_run_other_agents!
312
+      @can_run_other_agents = true
313
+    end
314
+
315
+    def can_run_other_agents?
316
+      @can_run_other_agents
317
+    end
318
+
307 319
     # Find all Agents that have received Events since the last execution of this method.  Update those Agents with
308 320
     # their new `last_checked_event_id` and queue each of the Agents to be called with #receive using `async_receive`.
309 321
     # This is called by bin/schedule.rb periodically.

+ 16 - 1
app/views/agents/_form.html.erb

@@ -33,11 +33,26 @@
33 33
           <div class="form-group">
34 34
             <%= f.label :schedule, :class => 'control-label' %>
35 35
             <div class="schedule-region" data-can-be-scheduled="<%= @agent.can_be_scheduled? %>">
36
-              <%= f.select :schedule, options_for_select(Agent::SCHEDULES.map {|s| [s.humanize.titleize, s] }, @agent.schedule), {}, :class => 'form-control' %>
36
+              <div class="can-be-scheduled">
37
+                <%= f.select :schedule, options_for_select(Agent::SCHEDULES.map {|s| [s.humanize.titleize, s] }, @agent.schedule), {}, :class => 'form-control' %>
38
+              </div>
37 39
               <span class='cannot-be-scheduled text-info'>This type of Agent cannot be scheduled.</span>
38 40
             </div>
39 41
           </div>
40 42
 
43
+          <div class="chain-region" data-can-run-other-agents="<%= @agent.can_run_other_agents? %>">
44
+            <div class="can-run-other-agents">
45
+              <div class="form-group">
46
+                <%= f.label :targets %>
47
+                <% eventTargets = current_user.agents.select(&:can_be_scheduled?) %>
48
+                <%= f.select(:target_ids,
49
+                               options_for_select(eventTargets.map {|s| [s.name, s.id] },
50
+                                                  @agent.target_ids),
51
+                               {}, { multiple: true, size: 5, class: 'select2 form-control' }) %>
52
+              </div>
53
+            </div>
54
+          </div>
55
+
41 56
           <div class='event-related-region' data-can-create-events="<%= @agent.can_create_events? %>">
42 57
             <div class="form-group">
43 58
               <%= f.label :keep_events_for, "Keep events" %>

+ 11 - 0
app/views/agents/show.html.erb

@@ -134,6 +134,17 @@
134 134
               </p>
135 135
             <% end %>
136 136
 
137
+            <% if @agent.can_run_other_agents? %>
138
+              <p>
139
+                <b>Targets:</b>
140
+                <% if (agents = @agent.targets).length > 0 %>
141
+                  <%= agents.map { |agent| link_to(agent.name, agent_path(agent)) }.to_sentence.html_safe %>
142
+                <% else %>
143
+                  None
144
+                <% end %>
145
+              </p>
146
+            <% end %>
147
+
137 148
             <p>
138 149
               <b>Working:</b>
139 150
               <%= working @agent %>