torquebox-backstage 0.1.0
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.
- data/Gemfile +18 -0
- data/Gemfile.lock +69 -0
- data/README.md +164 -0
- data/Rakefile +32 -0
- data/TODO +9 -0
- data/TORQUEBOX_VERSION +1 -0
- data/VERSION +1 -0
- data/backstage.rb +84 -0
- data/bin/backstage +78 -0
- data/config.ru +3 -0
- data/config/torquebox.yml +14 -0
- data/lib/apps.rb +18 -0
- data/lib/apps/models/app.rb +33 -0
- data/lib/apps/routes.rb +18 -0
- data/lib/authentication.rb +64 -0
- data/lib/destinations.rb +21 -0
- data/lib/destinations/models/destination.rb +80 -0
- data/lib/destinations/models/message.rb +67 -0
- data/lib/destinations/models/queue.rb +33 -0
- data/lib/destinations/models/topic.rb +59 -0
- data/lib/destinations/routes.rb +44 -0
- data/lib/has_mbean.rb +59 -0
- data/lib/helpers.rb +142 -0
- data/lib/jobs.rb +19 -0
- data/lib/jobs/models/job.rb +35 -0
- data/lib/jobs/routes.rb +18 -0
- data/lib/message_processors.rb +18 -0
- data/lib/message_processors/models/message_processor.rb +40 -0
- data/lib/message_processors/routes.rb +18 -0
- data/lib/pools.rb +18 -0
- data/lib/pools/models/pool.rb +51 -0
- data/lib/pools/routes.rb +41 -0
- data/lib/resource.rb +53 -0
- data/lib/resource_helpers.rb +63 -0
- data/lib/runtimes.rb +19 -0
- data/lib/runtimes/models/job.rb +35 -0
- data/lib/runtimes/routes.rb +18 -0
- data/lib/services.rb +18 -0
- data/lib/services/models/service.rb +35 -0
- data/lib/services/routes.rb +17 -0
- data/lib/torquebox_managed.rb +36 -0
- data/lib/util.rb +33 -0
- data/spec/api_spec.rb +136 -0
- data/spec/auth_spec.rb +70 -0
- data/spec/spec_helper.rb +39 -0
- data/views/apps/index.haml +15 -0
- data/views/apps/show.haml +12 -0
- data/views/css/_mixins.sass +51 -0
- data/views/css/html5reset.sass +82 -0
- data/views/css/style.sass +152 -0
- data/views/destinations/index.haml +37 -0
- data/views/destinations/show.haml +18 -0
- data/views/jobs/index.haml +23 -0
- data/views/jobs/show.haml +13 -0
- data/views/layout.haml +31 -0
- data/views/message_processors/index.haml +28 -0
- data/views/message_processors/show.haml +12 -0
- data/views/messages/index.haml +20 -0
- data/views/messages/properties.haml +3 -0
- data/views/messages/show.haml +19 -0
- data/views/pools/index.haml +32 -0
- data/views/pools/show.haml +44 -0
- data/views/services/index.haml +21 -0
- data/views/services/show.haml +13 -0
- metadata +289 -0
data/lib/has_mbean.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
module Backstage
|
|
18
|
+
module HasMBean
|
|
19
|
+
java_import javax.management.ObjectName
|
|
20
|
+
|
|
21
|
+
def self.included(base)
|
|
22
|
+
base.send( :attr_accessor, :mbean_name, :mbean )
|
|
23
|
+
base.extend( ClassMethods )
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def initialize(mbean_name, mbean)
|
|
27
|
+
self.mbean_name = mbean_name
|
|
28
|
+
self.mbean = mbean
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def full_name
|
|
32
|
+
mbean_name.to_s
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def method_missing(method, *args, &block)
|
|
36
|
+
mbean.send( method, *args, &block )
|
|
37
|
+
rescue NoMethodError => ex
|
|
38
|
+
super
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
module ClassMethods
|
|
42
|
+
def jmx_server
|
|
43
|
+
@jmx_server ||= JMX::MBeanServer.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def all(filter_string = filter)
|
|
47
|
+
jmx_server.query_names( filter_string ).collect { |name| new( name, jmx_server[name] ) }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def find(name)
|
|
51
|
+
name = ObjectName.new( name ) unless name.is_a?( ObjectName )
|
|
52
|
+
new( name, jmx_server[name] )
|
|
53
|
+
rescue JMX::NoSuchBeanError => ex
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/helpers.rb
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'util'
|
|
18
|
+
require 'authentication'
|
|
19
|
+
require 'sinatra/url_for'
|
|
20
|
+
|
|
21
|
+
module Backstage
|
|
22
|
+
class Application < Sinatra::Base
|
|
23
|
+
|
|
24
|
+
helpers do
|
|
25
|
+
include Backstage::Authentication
|
|
26
|
+
include Sinatra::UrlForHelper
|
|
27
|
+
|
|
28
|
+
def json_url_for(fragment, options = { })
|
|
29
|
+
options[:format] = 'json'
|
|
30
|
+
url_for( fragment, :full, options )
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def object_path(object)
|
|
34
|
+
object_action_or_collection_path(*(object.association_chain << nil))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def object_action_or_collection_path(*objects)
|
|
38
|
+
collection_or_action = objects.pop
|
|
39
|
+
paths = []
|
|
40
|
+
objects.each do |object|
|
|
41
|
+
paths << "#{simple_class_name( object )}/#{Util.encode_name( object.full_name )}"
|
|
42
|
+
end
|
|
43
|
+
paths << collection_or_action if collection_or_action
|
|
44
|
+
'/' + paths.join( '/' )
|
|
45
|
+
end
|
|
46
|
+
alias_method :object_action_path, :object_action_or_collection_path
|
|
47
|
+
alias_method :collection_path, :object_action_or_collection_path
|
|
48
|
+
|
|
49
|
+
def redirect_to(location)
|
|
50
|
+
redirect url_for(location, :full)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def link_to(path, text, options = {})
|
|
54
|
+
"<a href='#{url_for path}' class='#{options[:class]}'>#{text}</a>"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def data_row(name, value)
|
|
58
|
+
dom_class = ['value']
|
|
59
|
+
dom_class << 'status' << value.downcase if name.to_s.downcase == 'status' # hack
|
|
60
|
+
"<tr class='data-row'><td class='label'>#{name}</td><td class='#{dom_class.join(' ')}'>#{value}</td></tr>"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def simple_class_name(object)
|
|
64
|
+
object.class.name.split( "::" ).last.underscore
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def truncate(text, length = 30)
|
|
68
|
+
text.length > length ? text[0...length] + '...' : text
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def class_for_body
|
|
72
|
+
klass = request.path_info.split('/').reverse.select { |part| part =~ /^[A-Za-z_]*$/ }
|
|
73
|
+
klass.empty? ? 'root' : klass
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def action_button(object, action, text=nil)
|
|
77
|
+
text ||= action.capitalize
|
|
78
|
+
accum = <<-EOF
|
|
79
|
+
<form method="post" action="#{url_for object_action_path(object, action)}">
|
|
80
|
+
<input type="submit" value="#{text}"/>
|
|
81
|
+
</form>
|
|
82
|
+
EOF
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def html_requested?
|
|
86
|
+
params[:format] != 'json' && env['rack-accept.request'].media_type?( 'text/html' )
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def collection_to_json( collection )
|
|
90
|
+
JSON.generate( collection.collect { |object| object_to_hash( object ) } )
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def object_to_json(object)
|
|
94
|
+
JSON.generate( object_to_hash( object ) )
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def object_to_hash(object)
|
|
98
|
+
response = object.to_hash
|
|
99
|
+
response[:actions] = object.available_actions.inject({}) do |actions, action|
|
|
100
|
+
actions[action] = json_url_for( object_action_path( response[:resource], action ) )
|
|
101
|
+
actions
|
|
102
|
+
end
|
|
103
|
+
response.each do |key, value|
|
|
104
|
+
if value.kind_of?( Resource )
|
|
105
|
+
response[key] = json_url_for( object_path( value ) )
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
response
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class String
|
|
116
|
+
def classify
|
|
117
|
+
if self =~ %r{/}
|
|
118
|
+
split( '/' ).collect( &:classify ).join( '::' )
|
|
119
|
+
elsif self =~ %r{_}
|
|
120
|
+
split( '_' ).collect( &:classify ).join( '' )
|
|
121
|
+
else
|
|
122
|
+
capitalize
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def constantize
|
|
127
|
+
eval( classify )
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def underscore
|
|
131
|
+
gsub(/([a-zA-Z])([A-Z])/, '\1_\2').downcase
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def humanize
|
|
135
|
+
split( '_' ).collect( &:capitalize ).join( ' ' )
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#poor man's...
|
|
139
|
+
def pluralize
|
|
140
|
+
"#{self}s"
|
|
141
|
+
end
|
|
142
|
+
end
|
data/lib/jobs.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'jobs/models/job'
|
|
18
|
+
require 'jobs/routes'
|
|
19
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
module Backstage
|
|
18
|
+
class Job
|
|
19
|
+
include HasMBean
|
|
20
|
+
include TorqueBoxManaged
|
|
21
|
+
include Resource
|
|
22
|
+
|
|
23
|
+
def self.filter
|
|
24
|
+
"torquebox.jobs:*"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.to_hash_attributes
|
|
28
|
+
super + [:name, :app, :app_name, :ruby_class_name, :status, :cron_expression]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def available_actions
|
|
32
|
+
status == 'Started' ? %w{stop} : %w{start}
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/jobs/routes.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
Backstage::Application.resource :job, :actions => [:start, :stop]
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'message_processors/models/message_processor'
|
|
18
|
+
require 'message_processors/routes'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
module Backstage
|
|
18
|
+
class MessageProcessor
|
|
19
|
+
include HasMBean
|
|
20
|
+
include TorqueBoxManaged
|
|
21
|
+
include Resource
|
|
22
|
+
|
|
23
|
+
def self.filter
|
|
24
|
+
"torquebox.messaging.processors:*"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.to_hash_attributes
|
|
28
|
+
super + [:name, :app, :app_name, :status, :destination_name, :message_selector, :concurrency]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def destination_name
|
|
32
|
+
name = super
|
|
33
|
+
name =~ /\[(.*)\]/ ? $1 : name
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def available_actions
|
|
37
|
+
status == 'Started' ? %w{ stop } : %w{ start }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
Backstage::Application.resource :message_processor, :actions => [:start, :stop]
|
|
18
|
+
|
data/lib/pools.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'pools/models/pool'
|
|
18
|
+
require 'pools/routes'
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
module Backstage
|
|
18
|
+
class Pool
|
|
19
|
+
include HasMBean
|
|
20
|
+
include TorqueBoxManaged
|
|
21
|
+
include Resource
|
|
22
|
+
|
|
23
|
+
def self.filter
|
|
24
|
+
"torquebox.pools:*"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.to_hash_attributes
|
|
28
|
+
super + [:name, :app, :app_name, :pool_type, :size, :available, :borrowed, :minimum_instances, :maximum_instances]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def pool_type
|
|
32
|
+
full_name =~ /type=(.*?)(,|$)/ ? $1 : ''
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def size
|
|
36
|
+
shared? ? 1 : mbean.size
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
%w{ available borrowed minimum_instances maximum_instances }.each do |meth|
|
|
40
|
+
define_method meth do
|
|
41
|
+
shared? ? 0 : mbean.__send__( meth )
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def shared?
|
|
46
|
+
pool_type == 'shared'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
data/lib/pools/routes.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011 Red Hat, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
Backstage::Application.resource :pool
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module Backstage
|
|
21
|
+
class Application < Sinatra::Base
|
|
22
|
+
|
|
23
|
+
post "/pool/:name/evaluate" do
|
|
24
|
+
content_type :json
|
|
25
|
+
|
|
26
|
+
object = Pool.find( Util.decode_name( params[:name] ) )
|
|
27
|
+
script = params[:script] || ''
|
|
28
|
+
response = { :script => script }
|
|
29
|
+
begin
|
|
30
|
+
result = object.evaluate( script )
|
|
31
|
+
response[:result] = result
|
|
32
|
+
rescue Exception => ex
|
|
33
|
+
response[:exception] = ex
|
|
34
|
+
response[:backtrace] = ex.backtrace
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
JSON.generate( response )
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|