spiderfw 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
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