spiderfw 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. data/CHANGELOG +10 -0
  2. data/VERSION +1 -1
  3. data/apps/app_server/config/options.rb +2 -2
  4. data/apps/core/components/assets.rb +1 -5
  5. data/apps/core/components/widgets/month_calendar/month_calendar.shtml +3 -3
  6. data/apps/core/components/widgets/table/table.rb +2 -0
  7. data/apps/core/components/widgets/tabs/tabs.rb +9 -3
  8. data/apps/core/components/widgets/tabs/tabs.shtml +1 -1
  9. data/apps/master/_init.rb +3 -1
  10. data/apps/master/cmd.rb +1 -1
  11. data/apps/master/controllers/master_controller.rb +107 -103
  12. data/apps/master/controllers/scout_controller.rb +7 -7
  13. data/apps/master/controllers/{servant_controller.rb → server_controller.rb} +3 -3
  14. data/apps/master/data/locale/it/LC_MESSAGES/master.mo +0 -0
  15. data/apps/master/master.rb +4 -4
  16. data/apps/master/models/customer.rb +0 -3
  17. data/apps/master/models/installation.rb +14 -3
  18. data/apps/master/models/remote_log.rb +11 -0
  19. data/apps/master/models/scout_plugin_instance.rb +9 -9
  20. data/apps/master/models/scout_plugin_trigger.rb +2 -2
  21. data/apps/master/models/{servant.rb → server.rb} +6 -6
  22. data/apps/master/po/it/{spider_master.po → master.po} +127 -54
  23. data/apps/master/po/master.pot +23 -23
  24. data/apps/master/templates/email/alert.html.erb +1 -1
  25. data/apps/master/views/customer.shtml +3 -3
  26. data/apps/master/views/index.shtml +1 -2
  27. data/apps/master/views/installation.shtml +28 -16
  28. data/apps/master/views/master.layout.shtml +2 -1
  29. data/apps/master/views/plugin_data.shtml +1 -1
  30. data/apps/master/views/{servant.shtml → server.shtml} +14 -14
  31. data/apps/master/views/servers.shtml +11 -0
  32. data/apps/master/views/site_edit.shtml +1 -1
  33. data/apps/master/views/trigger_edit.shtml +4 -4
  34. data/apps/messenger/controllers/mixins/messenger_helper.rb +3 -3
  35. data/apps/servant/Gemfile +1 -0
  36. data/apps/servant/_init.rb +5 -1
  37. data/apps/servant/cmd.rb +14 -45
  38. data/apps/servant/config/options.rb +1 -0
  39. data/apps/servant/controllers/servant_controller.rb +7 -1
  40. data/apps/servant/lib/client.rb +55 -0
  41. data/apps/servant/servant.appspec +1 -1
  42. data/apps/servant/servant.rb +90 -0
  43. data/apps/worker/cmd.rb +9 -4
  44. data/apps/worker/worker.rb +11 -6
  45. data/blueprints/bin/spider +7 -0
  46. data/blueprints/home/config/config.yml +2 -3
  47. data/blueprints/home/init.rb +1 -1
  48. data/lib/spiderfw/app.rb +50 -2
  49. data/lib/spiderfw/cmd/commands/app.rb +22 -12
  50. data/lib/spiderfw/cmd/commands/config.rb +2 -1
  51. data/lib/spiderfw/config/configuration_editor.rb +7 -4
  52. data/lib/spiderfw/config/options/spider.rb +3 -1
  53. data/lib/spiderfw/controller/helpers/widget_helper.rb +6 -3
  54. data/lib/spiderfw/controller/mixins/http_mixin.rb +2 -1
  55. data/lib/spiderfw/controller/mixins/visual.rb +12 -10
  56. data/lib/spiderfw/env.rb +8 -1
  57. data/lib/spiderfw/home.rb +31 -4
  58. data/lib/spiderfw/http/server.rb +32 -14
  59. data/lib/spiderfw/model/mappers/mapper.rb +2 -2
  60. data/lib/spiderfw/model/mixins/tree.rb +7 -5
  61. data/lib/spiderfw/model/storage/db/adapters/mysql.rb +55 -2
  62. data/lib/spiderfw/model/storage/db/adapters/oracle.rb +80 -3
  63. data/lib/spiderfw/model/storage/db/connectors/jdbc_oracle.rb +3 -2
  64. data/lib/spiderfw/model/storage/db/connectors/oci8.rb +3 -2
  65. data/lib/spiderfw/model/storage/db/db_storage.rb +22 -0
  66. data/lib/spiderfw/setup/app_manager.rb +6 -2
  67. data/lib/spiderfw/site.rb +3 -1
  68. data/lib/spiderfw/spider.rb +145 -18
  69. data/lib/spiderfw/templates/blocks/parent_context.rb +3 -1
  70. data/lib/spiderfw/templates/template.rb +14 -5
  71. data/lib/spiderfw/widget/widget.rb +1 -0
  72. data/lib/spiderfw/widget/widget_attributes.rb +2 -2
  73. metadata +16 -16
  74. data/apps/master/po/spider_master.pot +0 -331
  75. data/apps/master/views/servants.shtml +0 -11
  76. data/apps/servant/lib/commands/discovery.rb +0 -0
  77. data/apps/servant/lib/resource.rb +0 -14
  78. data/apps/servant/lib/resources/db/mysql.rb +0 -35
  79. data/apps/servant/lib/resources/db.rb +0 -55
  80. data/apps/servant/lib/servant.rb +0 -88
  81. data/apps/servant/var/log/error.log +0 -1
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ = 0.6.6
2
+ == 19 July, 2011
3
+ * Fix: use SEE_OTHER as default redirect code to avoid FF 5 caching
4
+ * Fix: follow symlinks in base paths
5
+ * Fix: reworked resource paths, views inclusion and extension now more reliable
6
+ * Tree mixin now has tree_position, ordering
7
+ * DB dumping
8
+ * Better process management
9
+ * Added bin/spider to default home
10
+
1
11
  = 0.6.5
2
12
  == 29 June, 2011
3
13
  * Mapper fixes
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.5
1
+ 0.6.6
@@ -2,5 +2,5 @@ Spider.config_option 'app_server.url', _("Url of the app server"), :default => '
2
2
  Spider.config_option 'app_server.search_paths', _("Paths to search for apps"), :type => Array
3
3
  Spider.config_option 'app_server.git_ssh', _("Name of the ssh server")
4
4
  Spider.config_option 'app_server.git_http', _("Http git prefix for each git path"), :type => Hash
5
-
6
-
5
+ Spider.config_option 'app_server.git_repo_base', _("Base path for read-only git repository access")
6
+ Spider.config_option 'app_server.git_repo_rw_base', _("Base path for read-write git repository access")
@@ -62,13 +62,9 @@ Spider::Template.define_named_asset 'jquery-ui-selectable', [
62
62
  ], :depends => ['jquery-ui-core']
63
63
 
64
64
  Spider::Template.define_named_asset 'jquery-ui-sortable', [
65
- [:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.sortable.js', Spider::Components],
65
+ [:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.sortable.js', Spider::Components]
66
66
  ], :depends => ['jquery-ui-core']
67
67
 
68
- Spider::Template.define_named_asset 'jquery-ui-nestedSortable', [
69
- [:js, 'js/jquery/plugins/jquery.ui.nestedSortable.js', Spider::Components],
70
- ], :depends => ['jquery-ui-sortable']
71
-
72
68
  Spider::Template.define_named_asset 'jquery-ui-accordion', [
73
69
  [:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.accordion.js', Spider::Components]
74
70
  ], :depends => ['jquery-ui-core']
@@ -4,9 +4,9 @@
4
4
  <thead>
5
5
  <tr>
6
6
  <th colspan="7">
7
- <a href="{ @request[:path] }?_w{ @widget[:param] }%5Bd%5D={ @prev_link }"><span>&lt;&lt;</span></a>
7
+ <a href="{ @request[:path] }?_w{ @widget[:param_u] }%5Bd%5D={ @prev_link }"><span>&lt;&lt;</span></a>
8
8
  { @current_month_name } { @year }
9
- <a href="{ @request[:path] }?_w{ @widget[:param] }%5Bd%5D={ @next_link }"><span>&gt;&gt;</span></a>
9
+ <a href="{ @request[:path] }?_w{ @widget[:param_u] }%5Bd%5D={ @next_link }"><span>&gt;&gt;</span></a>
10
10
  </th>
11
11
  </tr>
12
12
  <tr>
@@ -21,4 +21,4 @@
21
21
  </tr>
22
22
  </tbody>
23
23
  </table>
24
- </div>
24
+ </div>
@@ -90,6 +90,7 @@ module Spider; module Components
90
90
  @model.elements_array.each{ |el| @scene.sortable[el.name] = @model.mapper.sortable?(el) ? true : false }
91
91
  @scene.labels = {}
92
92
  @elements.each do |el|
93
+ raise "No element #{el} in #{@model} for table #{@id}" unless @model.elements[el]
93
94
  @scene.labels[el] = @model.elements[el].label
94
95
  end
95
96
  @rows = prepare_queryset(@queryset ? @queryset : @model.list)
@@ -138,6 +139,7 @@ module Spider; module Components
138
139
  sub = sub.get(element.attributes[:junction_their_element])
139
140
  end
140
141
  sub_desc = sub.nil? ? '' : sub.to_s
142
+ sub_desc ||= ''
141
143
  sub_desc = sub_desc[0..@attributes[:max_element_length]] if sub_desc.length > @attributes[:max_element_length]
142
144
  list += "<li>"+sub_desc+"</li>" unless sub_desc.empty?
143
145
  }
@@ -16,13 +16,16 @@ module Spider; module Components
16
16
  end
17
17
 
18
18
  def prepare
19
- super
19
+ @active_tab = params['tab']
20
+ @active_tab ||= transient_session[:tab]
20
21
  @active_tab ||= @tabs.first
22
+ transient_session[:tab] = @active_tab
21
23
  @scene << {
22
24
  :active_tab => @active_tab,
23
25
  :tabs => @tabs,
24
26
  :tabs_labels => @tabs_labels
25
27
  }
28
+ super
26
29
  end
27
30
 
28
31
  def self.parse_content(doc)
@@ -32,7 +35,7 @@ module Spider; module Components
32
35
  tabs_override = '<tpl:override search="#tabs_content">'
33
36
  doc.search('tab').each do |tab|
34
37
  tab_id = tab.get_attribute('id')
35
- tabs_override += '<div sp:if="@active_tab == \''+tab_id+'\'>'
38
+ tabs_override += '<div sp:if="@active_tab == \''+tab_id+'\'">'
36
39
  tabs_override += '<sp:parent-context>'
37
40
  tabs_override += tab.innerHTML
38
41
  tabs_override += '</sp:parent-context>'
@@ -40,7 +43,7 @@ module Spider; module Components
40
43
  tab.innerHTML = ''
41
44
  end
42
45
  tabs_override += '</tpl:override>'
43
- overrides << Hpricot(tabs_override).root
46
+ overrides << Hpricot.XML(tabs_override).root
44
47
  return doc.to_s, overrides
45
48
  end
46
49
 
@@ -50,6 +53,9 @@ module Spider; module Components
50
53
  doc.search('tab').each do |tab|
51
54
  tab_id = tab.get_attribute('id')
52
55
  label = tab.get_attribute('label')
56
+ if label =~ /_\((.+)\)/
57
+ label = _($1)
58
+ end
53
59
  add_tab(tab_id, label)
54
60
  end
55
61
  return doc
@@ -1,7 +1,7 @@
1
1
  <div class="tabs">
2
2
  <ul>
3
3
  <li sp:each="@tabs |tab_id|">
4
- <a href="#aaa">{ @tabs_labels[tab_id] }</a>
4
+ <a href="?{ widget_param_u('tab') }={ tab_id }">{ @tabs_labels[tab_id] }</a>
5
5
  </li>
6
6
  </ul>
7
7
  <div id="tabs_content"></div>
data/apps/master/_init.rb CHANGED
@@ -13,7 +13,9 @@ require 'apps/master/master'
13
13
 
14
14
  require 'apps/master/models/admin'
15
15
  require 'apps/master/models/customer'
16
- require 'apps/master/models/servant'
16
+ require 'apps/master/models/installation'
17
+ require 'apps/master/models/remote_log'
18
+ require 'apps/master/models/server'
17
19
  require 'apps/master/models/scout_plugin_info'
18
20
  require 'apps/master/models/scout_plugin_instance'
19
21
  require 'apps/master/models/scout_report'
data/apps/master/cmd.rb CHANGED
@@ -27,7 +27,7 @@ module Spider; module Master
27
27
  if @instance_id
28
28
  instances = [@instance_id]
29
29
  elsif @server_id
30
- instances = ScoutPluginInstance.where{ |i| (i.servant == @server_id) }.map{ |i| i.id }
30
+ instances = ScoutPluginInstance.where{ |i| (i.server == @server_id) }.map{ |i| i.id }
31
31
  # else
32
32
  # instances = ScoutPluginInstance.all.map{ |i| i.id }
33
33
  end
@@ -1,5 +1,6 @@
1
- require 'apps/master/controllers/servant_controller'
1
+ require 'apps/master/controllers/server_controller'
2
2
  require 'apps/master/controllers/login_controller'
3
+ require 'json'
3
4
 
4
5
 
5
6
  module Spider; module Master
@@ -11,13 +12,13 @@ module Spider; module Master
11
12
  layout 'master'
12
13
 
13
14
  route /customers\/(\d+)\/installations\//, :installations
14
- route /customers\/(\d+)\/servants\//, :servants
15
- route /servants\/(\d+)\/plugins\/(\d+)(?:\/(\w+))?(?:\/(.+))?/, :plugin_instance
16
- route /servants\/(\d+)\/sites\/(\d+|new|create)(?:\/(\w+))?(?:\/(.+))?/, :site
17
- #route /servants\/([^\/]+)/, ServantController, :do => lambda{ |id| @request.misc[:servant] = Servant.new(id) }
15
+ route /customers\/(\d+)\/servers\//, :servers
16
+ route /servers\/(\d+)\/plugins\/(\d+)(?:\/(\w+))?(?:\/(.+))?/, :plugin_instance
17
+ route /servers\/(\d+)\/sites\/(\d+|new|create)(?:\/(\w+))?(?:\/(.+))?/, :site
18
+ #route /servers\/([^\/]+)/, ServerController, :do => lambda{ |id| @request.misc[:server] = Server.new(id) }
18
19
  route 'login', LoginController
19
20
 
20
- require_user Master::Admin, :unless => [:login, :admin], :redirect => 'login'
21
+ require_user Master::Admin, :unless => [:login, :admin, :ping], :redirect => 'login'
21
22
  require_user Spider::Auth::SuperUser, :only => [:admin]
22
23
 
23
24
 
@@ -34,6 +35,8 @@ module Spider; module Master
34
35
  customers = @user.customers
35
36
  if customers.length == 1
36
37
  redirect "customers/#{customers[0].id}"
38
+ else
39
+ redirect "customers"
37
40
  end
38
41
  end
39
42
 
@@ -51,21 +54,21 @@ module Spider; module Master
51
54
  trigger = @trigger
52
55
  instance = @instance
53
56
  instance ||= trigger.instance if trigger
54
- servant = @servant
55
- servant ||= instance.servant if instance
57
+ server = @server
58
+ server ||= instance.server if instance
56
59
  customer = @customer
57
- customer ||= servant.customer if servant
60
+ customer ||= server.customer if server
58
61
  @navigation << { :url => "#{Master.url}/customers/#{customer.id}", :name => customer.name } if customer
59
- @navigation << { :url => "#{Master.url}/customers/#{customer.id}/servants/#{servant.id}", :name => servant.name } if servant
60
- @navigation << { :url => "#{Master.url}/servants/#{servant.id}/plugins/#{instance.id}", :name => instance.name } if instance
62
+ @navigation << { :url => "#{Master.url}/customers/#{customer.id}/server/#{server.id}", :name => server.name } if server
63
+ @navigation << { :url => "#{Master.url}/servers/#{server.id}/plugins/#{instance.id}", :name => instance.name } if instance
61
64
  @navigation << {
62
- :url => "#{Master.url}/servants/#{servant.id}/plugins/#{instance.id}/triggers/#{trigger.id}",
65
+ :url => "#{Master.url}/servers/#{server.id}/plugins/#{instance.id}/triggers/#{trigger.id}",
63
66
  :name => "#{_('Trigger')} #{trigger.label}"
64
67
  } if trigger
65
68
  @scene << {
66
69
  :trigger => trigger,
67
70
  :instance => instance,
68
- :servant => servant,
71
+ :server => server,
69
72
  :customer => customer
70
73
  }
71
74
  super
@@ -75,7 +78,7 @@ module Spider; module Master
75
78
  customer = nil
76
79
  if obj.is_a?(Customer)
77
80
  customer = obj
78
- elsif obj.is_a?(Servant)
81
+ elsif obj.is_a?(Server)
79
82
  customer = obj.customer
80
83
  end
81
84
  raise Spider::Auth::Unauthorized.new(_("No customer")) if !customer && !@user.global?
@@ -109,86 +112,96 @@ module Spider; module Master
109
112
 
110
113
 
111
114
  __.html :template => 'installation'
112
- def installations(id, customer_id)
113
- @customer = load_customer(customer_id)
114
- @installation = Installation.new(id) unless id == 'new'
115
- if id == 'new'
116
- if @request.params.key?('installation_create') && !@request.params['installation_name'].empty?
117
- i = Installation.new(:name => @request.params['installation_name'])
118
- i.customer = @customer
119
- i.save
120
- redirect(File.dirname(@request.path)+"/#{i.id}")
121
- end
122
- else
123
- if @request.params.key?('save_apps')
124
- @installation.apps = @request.params['apps'].keys.join(',')
125
- @installation.save
126
- redirect(request.path)
127
- end
128
- @scene.install_apps = (@installation.apps && !@installation.apps.empty?) ? @installation.apps.split(',') : []
129
- @scene.apps = Spider::AppServer.apps
115
+ def installs(id=nil, customer_id=nil)
116
+ @customer = load_customer(customer_id) if customer_id
117
+ if id
118
+ @installation = Installation.new(id) unless id == 'new'
119
+ @scene.edit = (@request.params['_w'] && @request.params['_w'].key?('installation_form')) || @request.params.key?('edit') || id == 'new'
120
+ @scene.pk = id
121
+
122
+ # if id == 'new'
123
+ # if @request.params.key?('installation_create') && !@request.params['installation_name'].empty?
124
+ # i = Installation.new(:name => @request.params['installation_name'])
125
+ # i.customer = @customer
126
+ # i.save
127
+ # redirect(File.dirname(@request.path)+"/#{i.id}")
128
+ # end
129
+ # else
130
+ # if @request.params.key?('save_apps')
131
+ # @installation.apps = @request.params['apps'].keys.join(',')
132
+ # @installation.save
133
+ # redirect(request.path)
134
+ # end
135
+ # @scene.install_apps = JSON.parse(@installation.apps) unless @installation.apps.blank?
136
+ # @scene.install_apps ||= []
137
+ # @scene.apps = Spider::AppServer.apps_by_id
138
+ # end
139
+ @scene.install_apps = JSON.parse(@installation.apps) unless @installation.apps.blank?
140
+ @scene.install_apps ||= []
141
+ @scene.apps = Spider::AppServer.apps_by_id
142
+ @scene.logs = RemoteLog.where(:installation => @installation)
143
+ @scene << {
144
+ :customer => @customer,
145
+ :installation => @installation
146
+ }
130
147
  end
131
- @scene << {
132
- :customer => @customer,
133
- :installation => @installation
134
- }
135
148
  end
136
149
 
137
150
  __.html
138
- def servants(id=nil, customer_id=nil)
151
+ def servers(id=nil, customer_id=nil)
139
152
  customer_id ||= @request.params['customer']
140
153
  customer_id ||= @user.customers[0] unless @user.global?
141
154
  available_plugins = Master.scout_plugins.map{ |p| ScoutPlugin.new(p) }
142
155
  @scene.available_plugins = available_plugins
143
156
  if id
144
- visual_params[:template] = 'servant'
145
- @servant = Servant.new(id) if id && id != 'new'
146
- check_access(@servant) if @servant
147
- @scene.edit = (@request.params['_w'] && @request.params['_w'].key?('servant_form')) || @request.params.key?('edit') || id == 'new'
157
+ visual_params[:template] = 'server'
158
+ @server = Server.new(id) if id && id != 'new'
159
+ check_access(@server) if @server
160
+ @scene.edit = (@request.params['_w'] && @request.params['_w'].key?('server_form')) || @request.params.key?('edit') || id == 'new'
148
161
  @scene.pk = id
149
162
  get_template
150
- if id == 'new' && @template.widgets[:servant_form]
151
- @template.widgets[:servant_form].attributes[:auto_redirect] = Master.url+'/servants'
163
+ if id == 'new' && @template.widgets[:server_form]
164
+ @template.widgets[:server_form].attributes[:auto_redirect] = Master.url+'/servers'
152
165
  else
153
166
  if @request.params['submit_add_plugin']
154
167
  plugin = ScoutPlugin.new(@request.params['plugin'])
155
- current = ScoutPluginInstance.where(:servant => @servant, :plugin_id => plugin.id).total_rows
168
+ current = ScoutPluginInstance.where(:server => @server, :plugin_id => plugin.id).total_rows
156
169
  name = plugin.name
157
170
  name += " #{current + 1}" if current > 0
158
- instance = ScoutPluginInstance.create(:servant => @servant, :plugin_id => plugin.id, :name => name)
159
- @servant.scout_plan_changed = DateTime.now
160
- @servant.save
171
+ instance = ScoutPluginInstance.create(:server => @server, :plugin_id => plugin.id, :name => name)
172
+ @server.scout_plan_changed = DateTime.now
173
+ @server.save
161
174
  redirect(@request.path)
162
175
  end
163
176
  if @request.params['remove_plugin']
164
- instance = ScoutPluginInstance.load(:id => @request.params['remove_plugin'], :servant => id)
177
+ instance = ScoutPluginInstance.load(:id => @request.params['remove_plugin'], :server => id)
165
178
  instance.delete if instance
166
- @servant.scout_plan_changed = DateTime.now
167
- @servant.save
179
+ @server.scout_plan_changed = DateTime.now
180
+ @server.save
168
181
  redirect(@request.path)
169
182
  end
170
183
  end
171
184
  if customer_id
172
185
  @customer = Customer.new(customer_id)
173
- if @template.widgets[:servant_form]
174
- @template.widgets[:servant_form].attributes[:auto_redirect] = Master.url+"/customers/#{customer_id}"
175
- @template.widgets[:servant_form].fixed = {:customer => @customer}
186
+ if @template.widgets[:server_form]
187
+ @template.widgets[:server_form].attributes[:auto_redirect] = Master.url+"/customers/#{customer_id}"
188
+ @template.widgets[:server_form].fixed = {:customer => @customer}
176
189
  end
177
190
  end
178
191
  else
179
- @scene.servants = Servant.all
192
+ @scene.servers = Server.all
180
193
  if customer_id
181
- @scene.servants.where(:customer => @request.params['customer'])
194
+ @scene.servers.where(:customer => @request.params['customer'])
182
195
  end
183
- visual_params[:template] = 'servants'
196
+ visual_params[:template] = 'servers'
184
197
  end
185
198
  end
186
199
 
187
200
  __.html
188
- def plugin_instance(servant_id, id, action=nil, sub_action=nil)
189
- instance = ScoutPluginInstance.load(:id => id, :servant => servant_id)
190
- raise NotFound.new("Plugin #{id} for servant #{servant_id}") unless instance
191
- @servant = Servant.new(:id => servant_id)
201
+ def plugin_instance(server_id, id, action=nil, sub_action=nil)
202
+ instance = ScoutPluginInstance.load(:id => id, :server => server_id)
203
+ raise NotFound.new("Plugin #{id} for server #{server_id}") unless instance
204
+ @server = Server.new(:id => server_id)
192
205
  @scene.plugin = instance.plugin
193
206
  fields = []
194
207
  last = instance.last_reported
@@ -215,7 +228,7 @@ module Spider; module Master
215
228
  redirect @request.path
216
229
  end
217
230
  if action == "edit"
218
- plugin_edit(@servant, @scene.plugin, @instance)
231
+ plugin_edit(@server, @scene.plugin, @instance)
219
232
  elsif action == "triggers"
220
233
  trigger_edit(sub_action)
221
234
  elsif action == "data"
@@ -226,10 +239,10 @@ module Spider; module Master
226
239
  end
227
240
 
228
241
  __.html
229
- def site(servant_id, id, action=nil, sub_action=nil)
242
+ def site(server_id, id, action=nil, sub_action=nil)
230
243
  if @request.params['submit']
231
244
  end
232
- @servant = Servant.new(servant_id)
245
+ @server = Server.new(server_id)
233
246
  @scene.site_type = @request.params['site_type']
234
247
  if @request.params['edit'] || id == 'new' || id == 'create'
235
248
  render('site_edit')
@@ -239,14 +252,14 @@ module Spider; module Master
239
252
  end
240
253
 
241
254
  __.html
242
- def plugin_edit(servant, plugin, instance)
255
+ def plugin_edit(server, plugin, instance)
243
256
  if @request.params['submit']
244
257
  instance.name = @request.params['name']
245
258
  instance.settings = @request.params['settings']
246
259
  instance.poll_interval = @request.params['poll_interval'] unless @request.params['poll_interval'].blank?
247
260
  instance.timeout = @request.params['timeout'] unless @request.params['timeout'].blank?
248
261
  instance.save
249
- redirect("#{Master.url}/servants/#{@servant.id}/plugins/#{@instance.id}")
262
+ redirect("#{Master.url}/server/#{@server.id}/plugins/#{@instance.id}")
250
263
  end
251
264
  render('plugin_edit')
252
265
  end
@@ -259,7 +272,7 @@ module Spider; module Master
259
272
  trigger.data = @request.params['data_series']
260
273
  else
261
274
  trigger = ScoutPluginTrigger.load(:id => id, :plugin_instance => @instance)
262
- raise NotFound.new("Trigger #{id} of servant #{@scene.servant}") unless trigger
275
+ raise NotFound.new("Trigger #{id} of server #{@scene.server}") unless trigger
263
276
  end
264
277
  @trigger = trigger
265
278
  if @request.params['submit'] && (id != 'new' || @request.params['data'])
@@ -268,7 +281,7 @@ module Spider; module Master
268
281
  trigger.set(k, v) if trigger.class.elements[k.to_sym]
269
282
  end
270
283
  trigger.save
271
- redirect("#{Master.url}/servants/#{@servant.id}/plugins/#{@instance.id}")
284
+ redirect("#{Master.url}/server/#{@server.id}/plugins/#{@instance.id}")
272
285
  end
273
286
  render 'trigger_edit'
274
287
  end
@@ -311,51 +324,42 @@ module Spider; module Master
311
324
  $out << res.to_json
312
325
  end
313
326
 
314
- __.action
327
+ __.json
315
328
  def ping
316
- servant_id = @request.params['servant_id']
317
- servant = Master::Servant.load(:id => servant_id)
318
- new_servant = false
319
- unless servant
320
- servant = Master::Servant.static(:id => servant_id)
321
- new_servant = true
329
+ install_id = @request.params['install_id']
330
+ unless install_id
331
+ Spider.logger.error("No install_id passed in ping")
332
+ done
322
333
  end
323
- servant.last_check = DateTime.now
324
- servant.name = @request.params['servant_name']
325
- servant.system_status = @request.params['system_status']
326
- curr_resources = servant.resources_by_type
327
- resources = []
328
- if @request.params['resources']
329
- @request.params['resources'].each do |res_type, type_resources|
330
- type_resources.each do |name, details|
331
- if curr_resources[res_type]
332
- res = curr_resources[res_type][name]
333
- end
334
- res ||= Resource.static
335
- res.resource_type = res_type
336
- res.name = name
337
- res.description = details['description']
338
- res.save
339
- resources << res
340
- end
341
- end
342
- end
343
- servant.resources = resources
344
- if new_servant
345
- servant.insert
346
- else
347
- servant.update
334
+ install = Spider::Master::Installation.load_or_create(:uuid => install_id)
335
+ install.last_check = DateTime.now
336
+ install.apps = @request.params['apps']
337
+ install.interval = @request.params['interval']
338
+ install.configuration = decompress_string(@request.params['configuration'])
339
+ install.save
340
+ log_lines = JSON.parse(@request.params['log'])
341
+ log_lines.each do |log|
342
+ time, level, desc = *log
343
+ time = Time.parse(time)
344
+ next if log[2] =~ /^Not found/
345
+ RemoteLog.create(:text => desc, :level => level, :time => time, :installation => install)
348
346
  end
349
347
  response = {
350
348
  :pong => DateTime.new
351
349
  }
352
- servant.pending_commands.each do |command|
353
- response[:commands] ||= []
354
- response[:commands] << command.to_h
355
- end
350
+ # server.pending_commands.each do |command|
351
+ # response[:commands] ||= []
352
+ # response[:commands] << command.to_h
353
+ # end
356
354
  $out << response.to_json
357
355
  end
358
356
 
357
+ private
358
+
359
+ def decompress_string(str)
360
+ Zlib::GzipReader.new(StringIO.new(str)).read
361
+ end
362
+
359
363
  end
360
364
 
361
365
  end; end
@@ -5,16 +5,16 @@ module Spider; module Master
5
5
  class ScoutController < Spider::PageController
6
6
 
7
7
  route /([\w\d]{8}-[\w\d]{4}-[\w\d]{4}-[\w\d]{4}-[\w\d]{12})/, self, :do => lambda{ |uuid|
8
- @servant = Servant.load(:uuid => uuid)
8
+ @server = Server.load(:uuid => uuid)
9
9
  @uuid = uuid
10
- raise NotFound.new("Servant #{uuid}") unless @servant
10
+ raise NotFound.new("Server #{uuid}") unless @server
11
11
  }
12
12
 
13
13
 
14
14
  __.json
15
15
  def plan
16
- last_modified = (@servant.scout_plan_changed || @servant.obj_modified).to_local_time
17
- @servant.scout_plugins.each do |instance|
16
+ last_modified = (@server.scout_plan_changed || @server.obj_modified).to_local_time
17
+ @server.scout_plugins.each do |instance|
18
18
  stat = File.lstat(instance.plugin.rb_path)
19
19
  mtime = stat.mtime
20
20
  last_modified = mtime if mtime > last_modified
@@ -29,7 +29,7 @@ module Spider; module Master
29
29
  raise HTTPStatus.new(Spider::HTTP::NOT_MODIFIED) if last_modified <= if_modified
30
30
  end
31
31
  @response.headers['Last-Modified'] = last_modified.httpdate
32
- $out << @servant.scout_plan.to_json
32
+ $out << @server.scout_plan.to_json
33
33
  end
34
34
 
35
35
 
@@ -73,7 +73,7 @@ module Spider; module Master
73
73
  next if had_previous
74
74
  subject = alert["fields"]["subject"]
75
75
  instance = ScoutPluginInstance.new(alert["plugin_id"])
76
- subject = "#{instance.servant} - #{subject}"
76
+ subject = "#{instance.server} - #{subject}"
77
77
  alert = ScoutAlert.create(
78
78
  :plugin_instance => alert["plugin_id"],
79
79
  :subject => alert["fields"]["subject"],
@@ -94,7 +94,7 @@ module Spider; module Master
94
94
  end
95
95
  subject = err["fields"]["subject"]
96
96
  instance = ScoutPluginInstance.new(err["plugin_id"])
97
- subject = "#{instance.servant} - #{subject}"
97
+ subject = "#{instance.server} - #{subject}"
98
98
  error = ScoutError.create(
99
99
  :plugin_instance => err["plugin_id"],
100
100
  :subject => err["fields"]["subject"],
@@ -1,11 +1,11 @@
1
1
  module Spider; module Master
2
2
 
3
- class ServantController < Spider::PageController
3
+ class ServerController < Spider::PageController
4
4
 
5
5
  __.html
6
6
  def index
7
- @scene.servant = @request.misc[:servant]
8
- render('servant')
7
+ @scene.server = @request.misc[:server]
8
+ render('server')
9
9
  end
10
10
 
11
11
  def resources
@@ -14,16 +14,16 @@ module Spider
14
14
  res
15
15
  end
16
16
 
17
- def self.url_for_servant(id)
17
+ def self.url_for_server(id)
18
18
  id = id.id if id.is_a?(Spider::Model::BaseModel)
19
- servant = Servant.new(id)
20
- "#{self.url}/servants/#{servant.id}"
19
+ server = Server.new(id)
20
+ "#{self.url}/servers/#{server.id}"
21
21
  end
22
22
 
23
23
  def self.url_for_plugin(id)
24
24
  id = id.id if id.is_a?(Spider::Model::BaseModel)
25
25
  instance = ScoutPluginInstance.new(id)
26
- "#{self.url}/servants/#{instance.servant.id}/plugins/#{id}"
26
+ "#{self.url}/servers/#{instance.server.id}/plugins/#{id}"
27
27
  end
28
28
 
29
29
  def self.add_site_type(type)
@@ -1,5 +1,3 @@
1
- require 'apps/master/models/installation'
2
-
3
1
  module Spider; module Master
4
2
 
5
3
  class Customer < Spider::Model::Managed
@@ -7,7 +5,6 @@ module Spider; module Master
7
5
  element :uuid, UUID
8
6
  element :public_key, Text
9
7
  element :private_key, Text
10
- many :installs, Installation, :add_reverse => :customer
11
8
  multiple_choice :admins, Master::Admin, :add_multiple_reverse => {:name => :customers, :association => :multiple_choice} do
12
9
  element :receive_notifications, Bool, :default => true
13
10
  element :manage_plugins, Bool, :default => true
@@ -1,9 +1,20 @@
1
1
  module Spider; module Master
2
2
 
3
3
  class Installation < Spider::Model::Managed
4
- element :name, String
5
- element :apps, Text
6
- element :configuration, Text
4
+ element :uuid, UUID
5
+ element :name, String, :label => _('Name')
6
+ choice :customer, Customer, :add_multiple_reverse => :installations
7
+ element :apps, Text, :hidden => true
8
+ element :configuration, Text, :hidden => true
9
+ element :last_check, DateTime, :hidden => true
10
+ element :interval, Fixnum, :hidden => true
11
+
12
+ def to_s
13
+ str = self.name || self.uuid
14
+ if self.customer
15
+ str += " - #{self.customer}"
16
+ end
17
+ end
7
18
 
8
19
  end
9
20