mongo3 0.0.5 → 0.0.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.
- data/README.rdoc +6 -2
- data/Rakefile +1 -0
- data/data/populate +13 -11
- data/lib/controllers/databases.rb +3 -3
- data/lib/controllers/explore.rb +7 -5
- data/lib/helpers/main_helper.rb +24 -0
- data/lib/mongo3/connection.rb +105 -59
- data/lib/mongo3/node.rb +35 -6
- data/lib/mongo3.rb +1 -1
- data/lib/public/javascripts/{Jit/jit.js → jit.js} +0 -0
- data/lib/views/databases/_results.erb +29 -12
- data/lib/views/explore/explore.erb +52 -31
- data/lib/views/layout.erb +2 -6
- data/spec/mongo3/connection_spec.rb +40 -6
- metadata +13 -45
- data/lib/public/javascripts/Jit/Examples/Hypertree/example1.html +0 -57
- data/lib/public/javascripts/Jit/Examples/Hypertree/example1.js +0 -427
- data/lib/public/javascripts/Jit/Examples/Hypertree/example2.html +0 -58
- data/lib/public/javascripts/Jit/Examples/Hypertree/example2.js +0 -310
- data/lib/public/javascripts/Jit/Examples/Hypertree/example3.html +0 -199
- data/lib/public/javascripts/Jit/Examples/Hypertree/example3.js +0 -615
- data/lib/public/javascripts/Jit/Examples/Other/example1.html +0 -58
- data/lib/public/javascripts/Jit/Examples/Other/example1.js +0 -566
- data/lib/public/javascripts/Jit/Examples/Other/example2.html +0 -58
- data/lib/public/javascripts/Jit/Examples/Other/example2.js +0 -304
- data/lib/public/javascripts/Jit/Examples/Other/example3.html +0 -58
- data/lib/public/javascripts/Jit/Examples/Other/example3.js +0 -304
- data/lib/public/javascripts/Jit/Examples/RGraph/example1.html +0 -57
- data/lib/public/javascripts/Jit/Examples/RGraph/example1.js +0 -475
- data/lib/public/javascripts/Jit/Examples/RGraph/example2.html +0 -58
- data/lib/public/javascripts/Jit/Examples/RGraph/example2.js +0 -356
- data/lib/public/javascripts/Jit/Examples/RGraph/example3.html +0 -199
- data/lib/public/javascripts/Jit/Examples/RGraph/example3.js +0 -622
- data/lib/public/javascripts/Jit/Examples/Spacetree/example1.html +0 -91
- data/lib/public/javascripts/Jit/Examples/Spacetree/example1.js +0 -890
- data/lib/public/javascripts/Jit/Examples/Spacetree/example2.html +0 -90
- data/lib/public/javascripts/Jit/Examples/Spacetree/example2.js +0 -213
- data/lib/public/javascripts/Jit/Examples/Spacetree/example3.html +0 -75
- data/lib/public/javascripts/Jit/Examples/Spacetree/example3.js +0 -863
- data/lib/public/javascripts/Jit/Examples/Treemap/example1.html +0 -56
- data/lib/public/javascripts/Jit/Examples/Treemap/example1.js +0 -95
- data/lib/public/javascripts/Jit/Examples/Treemap/example2.html +0 -61
- data/lib/public/javascripts/Jit/Examples/Treemap/example2.js +0 -750
- data/lib/public/javascripts/Jit/Examples/Treemap/example3.html +0 -62
- data/lib/public/javascripts/Jit/Examples/Treemap/example3.js +0 -775
- data/lib/public/javascripts/Jit/Examples/css/Hypertree.css +0 -0
- data/lib/public/javascripts/Jit/Examples/css/Other.css +0 -8
- data/lib/public/javascripts/Jit/Examples/css/RGraph.css +0 -0
- data/lib/public/javascripts/Jit/Examples/css/Spacetree.css +0 -0
- data/lib/public/javascripts/Jit/Examples/css/Treemap.css +0 -78
- data/lib/public/javascripts/Jit/Examples/css/base.css +0 -106
- data/lib/public/javascripts/Jit/Examples/css/col1.png +0 -0
- data/lib/public/javascripts/Jit/Examples/css/col2.png +0 -0
- data/lib/public/javascripts/Jit/Examples/css/gradient.png +0 -0
- data/lib/public/javascripts/Jit/Extras/excanvas.js +0 -35
- data/lib/public/javascripts/Jit/jit-yc.js +0 -1
- data/lib/public/javascripts/Jit-1.1.3.zip +0 -0
data/README.rdoc
CHANGED
@@ -31,8 +31,11 @@
|
|
31
31
|
|
32
32
|
* Provide support for db authentication [done]
|
33
33
|
* Ability to drilldown in collections and query for content [done]
|
34
|
-
* CRUD on dbs, collections, indexes
|
35
|
-
*
|
34
|
+
* CRUD on dbs, collections, indexes [done]
|
35
|
+
* Administer users
|
36
|
+
* Collection rename
|
37
|
+
* Manage logs
|
38
|
+
* Support for shards and replication
|
36
39
|
|
37
40
|
== DEPENDENCIES
|
38
41
|
|
@@ -41,6 +44,7 @@
|
|
41
44
|
* mongo + mongo_ext
|
42
45
|
* agnostic-will_paginate
|
43
46
|
* memcache-client
|
47
|
+
* sinatra
|
44
48
|
|
45
49
|
== INSTALL:
|
46
50
|
|
data/Rakefile
CHANGED
data/data/populate
CHANGED
@@ -7,20 +7,22 @@ connection = Mongo::Connection.new( 'localhost', 27019 )
|
|
7
7
|
# db.authenticate( 'admin', 'admin')
|
8
8
|
|
9
9
|
db_name = "fernand_mdb"
|
10
|
-
|
10
|
+
cltn_names = %w[blee bobo]
|
11
11
|
|
12
12
|
|
13
13
|
db = connection.db( db_name )
|
14
14
|
|
15
|
-
|
16
|
-
cltn.
|
15
|
+
cltn_names.each do |cltn_name|
|
16
|
+
cltn = db.create_collection( cltn_name )
|
17
|
+
cltn.remove
|
17
18
|
|
18
|
-
20.times do |i|
|
19
|
-
|
20
|
-
puts "Inserting row #{row.inspect}"
|
21
|
-
|
22
|
-
end
|
19
|
+
20.times do |i|
|
20
|
+
row = { :name => "#{cltn_name}_#{i}", :last_name => "#{db_name}.#{cltn_name}_#{i}" }
|
21
|
+
puts "Inserting row #{row.inspect}"
|
22
|
+
cltn.insert( row )
|
23
|
+
end
|
23
24
|
|
24
|
-
cltn = db[cltn_name]
|
25
|
-
puts ""
|
26
|
-
puts "Inserted `#{cltn.count} records in `#{cltn_name}"
|
25
|
+
cltn = db[cltn_name]
|
26
|
+
puts ""
|
27
|
+
puts "Inserted `#{cltn.count} records in `#{cltn_name}"
|
28
|
+
end
|
@@ -33,10 +33,10 @@ module Databases
|
|
33
33
|
# ---------------------------------------------------------------------------
|
34
34
|
post "/databases/delete/" do
|
35
35
|
path = params[:path]
|
36
|
+
|
37
|
+
options.connection.drop_cltn( session[:path_names] + "|" + path )
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
flash_it!( :info, "Collection #{path.split('|').last} was dropped successfully!" )
|
39
|
+
flash_it!( :info, "Collection #{path} was dropped successfully!" )
|
40
40
|
|
41
41
|
@cltns = options.connection.paginate_db( session[:path_names], 1, 10 )
|
42
42
|
|
data/lib/controllers/explore.rb
CHANGED
@@ -16,12 +16,14 @@ module Explore
|
|
16
16
|
|
17
17
|
# -----------------------------------------------------------------------------
|
18
18
|
get '/explore' do
|
19
|
-
|
20
|
-
@
|
19
|
+
root = options.connection.build_tree
|
20
|
+
@root = root.to_adjacencies
|
21
|
+
@nodes = root.children
|
21
22
|
|
22
23
|
reset_crumbs!
|
23
24
|
reset_paths!
|
24
|
-
|
25
|
+
|
26
|
+
# Mongo3::Node.dump_adj( @root )
|
25
27
|
erb :'explore/explore'
|
26
28
|
end
|
27
29
|
|
@@ -66,11 +68,11 @@ module Explore
|
|
66
68
|
|
67
69
|
crumbs_from_path( path_ids, path_names )
|
68
70
|
|
69
|
-
root = options.connection.build_sub_tree( parent_id, path_names )
|
71
|
+
root = options.connection.build_sub_tree( parent_id, path_names )
|
70
72
|
@sub_tree = root.to_adjacencies
|
71
73
|
@node_id = @sub_tree.first[:id]
|
72
74
|
@nodes = root.children
|
73
|
-
|
75
|
+
# Mongo3::Node.dump_adj( @sub_tree )
|
74
76
|
erb :'explore/more_data_js', :layout => false
|
75
77
|
end
|
76
78
|
|
data/lib/helpers/main_helper.rb
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
module MainHelper
|
2
2
|
helpers do
|
3
3
|
|
4
|
+
def stylesheets( styles )
|
5
|
+
buff = []
|
6
|
+
styles.each do |style|
|
7
|
+
buff << "<link rel=\"stylesheet\" href=\"#{v_styles( style )}\" type=\"text/css\" media=\"screen\" />"
|
8
|
+
end
|
9
|
+
buff.join( "\n" )
|
10
|
+
end
|
11
|
+
|
12
|
+
def javascripts( scripts )
|
13
|
+
buff = []
|
14
|
+
scripts.each do |script|
|
15
|
+
buff << "<script src=\"#{v_js( script )}\" type=\"text/javascript\"></script>"
|
16
|
+
end
|
17
|
+
buff.join( "\n" )
|
18
|
+
end
|
19
|
+
|
20
|
+
def v_styles(stylesheet)
|
21
|
+
"/stylesheets/#{stylesheet}.css?" + File.mtime(File.join(Sinatra::Application.public, "stylesheets", "#{stylesheet}.css")).to_i.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def v_js(js)
|
25
|
+
"/javascripts/#{js}.js?" + File.mtime(File.join(Sinatra::Application.public, "javascripts", "#{js}.js")).to_i.to_s
|
26
|
+
end
|
27
|
+
|
4
28
|
def zone_locator
|
5
29
|
locator = session[:path_names].split( "|" )[1]
|
6
30
|
"<p class=\"ctx\"><span>zone</span>#{locator}</p>"
|
data/lib/mongo3/connection.rb
CHANGED
@@ -8,16 +8,16 @@ module Mongo3
|
|
8
8
|
# drop a database using context and db name
|
9
9
|
def drop_database( path_names, db_name )
|
10
10
|
path_name_tokens = path_names.split( "|" )
|
11
|
-
|
12
|
-
connect_for(
|
11
|
+
zone = path_name_tokens[1]
|
12
|
+
connect_for( zone ) do |con|
|
13
13
|
con.drop_database( db_name )
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
def drop_db( path_names )
|
18
18
|
path_name_tokens = path_names.split( "|" )
|
19
|
-
|
20
|
-
connect_for(
|
19
|
+
zone = path_name_tokens[1]
|
20
|
+
connect_for( zone ) do |con|
|
21
21
|
db_name = path_name_tokens.pop
|
22
22
|
con.drop_database( db_name )
|
23
23
|
end
|
@@ -25,9 +25,9 @@ module Mongo3
|
|
25
25
|
|
26
26
|
def indexes_for( path_names )
|
27
27
|
path_name_tokens = path_names.split( "|" )
|
28
|
-
|
28
|
+
zone = path_name_tokens[1]
|
29
29
|
indexes = {}
|
30
|
-
connect_for(
|
30
|
+
connect_for( zone ) do |con|
|
31
31
|
cltn_name = path_name_tokens.pop
|
32
32
|
db_name = path_name_tokens.pop
|
33
33
|
db = con.db( db_name )
|
@@ -39,8 +39,8 @@ module Mongo3
|
|
39
39
|
|
40
40
|
def drop_index( path_names, index )
|
41
41
|
path_name_tokens = path_names.split( "|" )
|
42
|
-
|
43
|
-
connect_for(
|
42
|
+
zone = path_name_tokens[1]
|
43
|
+
connect_for( zone ) do |con|
|
44
44
|
cltn_name = path_name_tokens.pop
|
45
45
|
db_name = path_name_tokens.pop
|
46
46
|
db = con.db( db_name )
|
@@ -51,8 +51,8 @@ module Mongo3
|
|
51
51
|
|
52
52
|
def create_index( path_names, index, constraints )
|
53
53
|
path_name_tokens = path_names.split( "|" )
|
54
|
-
|
55
|
-
connect_for(
|
54
|
+
zone = path_name_tokens[1]
|
55
|
+
connect_for( zone ) do |con|
|
56
56
|
cltn_name = path_name_tokens.pop
|
57
57
|
db_name = path_name_tokens.pop
|
58
58
|
db = con.db( db_name )
|
@@ -63,8 +63,8 @@ module Mongo3
|
|
63
63
|
|
64
64
|
def drop_cltn( path_names )
|
65
65
|
path_name_tokens = path_names.split( "|" )
|
66
|
-
|
67
|
-
connect_for(
|
66
|
+
zone = path_name_tokens[1]
|
67
|
+
connect_for( zone ) do |con|
|
68
68
|
cltn_name = path_name_tokens.pop
|
69
69
|
db_name = path_name_tokens.pop
|
70
70
|
db = con.db( db_name )
|
@@ -75,8 +75,8 @@ module Mongo3
|
|
75
75
|
|
76
76
|
def clear_cltn( path_names )
|
77
77
|
path_name_tokens = path_names.split( "|" )
|
78
|
-
|
79
|
-
connect_for(
|
78
|
+
zone = path_name_tokens[1]
|
79
|
+
connect_for( zone ) do |con|
|
80
80
|
cltn_name = path_name_tokens.pop
|
81
81
|
db_name = path_name_tokens.pop
|
82
82
|
db = con.db( db_name )
|
@@ -87,8 +87,8 @@ module Mongo3
|
|
87
87
|
|
88
88
|
def delete_row( path_names, id )
|
89
89
|
path_name_tokens = path_names.split( "|" )
|
90
|
-
|
91
|
-
connect_for(
|
90
|
+
zone = path_name_tokens[1]
|
91
|
+
connect_for( zone ) do |con|
|
92
92
|
cltn_name = path_name_tokens.pop
|
93
93
|
db_name = path_name_tokens.pop
|
94
94
|
db = con.db( db_name )
|
@@ -100,12 +100,12 @@ module Mongo3
|
|
100
100
|
def show( path_names )
|
101
101
|
path_name_tokens = path_names.split( "|" )
|
102
102
|
info = OrderedHash.new
|
103
|
-
|
103
|
+
zone = path_name_tokens[1]
|
104
104
|
|
105
105
|
info[:title] = path_name_tokens.last
|
106
106
|
if path_name_tokens.size == 2
|
107
|
-
connect_for(
|
108
|
-
info[:name] =
|
107
|
+
connect_for( zone ) do |con|
|
108
|
+
info[:name] = zone
|
109
109
|
info[:host] = con.host
|
110
110
|
info[:port] = con.port
|
111
111
|
info[:databases] = OrderedHash.new
|
@@ -116,7 +116,7 @@ module Mongo3
|
|
116
116
|
elsif path_name_tokens.size == 3
|
117
117
|
db_name = path_name_tokens.pop
|
118
118
|
info[:links] = OrderedHash.new
|
119
|
-
connect_for(
|
119
|
+
connect_for( zone ) do |con|
|
120
120
|
db = con.db( db_name )
|
121
121
|
info[:links][:manage] = "/databases/1"
|
122
122
|
# info[:links][:drop] = "/databases/drop/"
|
@@ -130,7 +130,7 @@ module Mongo3
|
|
130
130
|
info[:links] = OrderedHash.new
|
131
131
|
cltn_name = path_name_tokens.pop
|
132
132
|
db_name = path_name_tokens.pop
|
133
|
-
connect_for(
|
133
|
+
connect_for( zone ) do |con|
|
134
134
|
db = con.db( db_name )
|
135
135
|
cltn = db[cltn_name]
|
136
136
|
indexes = db.index_information( cltn_name )
|
@@ -146,9 +146,9 @@ module Mongo3
|
|
146
146
|
|
147
147
|
def paginate_db( path_names, page=1, per_page=10 )
|
148
148
|
path_name_tokens = path_names.split( "|" )
|
149
|
-
|
149
|
+
zone = path_name_tokens[1]
|
150
150
|
list = nil
|
151
|
-
connect_for(
|
151
|
+
connect_for( zone ) do |con|
|
152
152
|
db_name = path_name_tokens.pop
|
153
153
|
db = con.db( db_name )
|
154
154
|
cltn = collection_names(db).sort
|
@@ -172,9 +172,9 @@ module Mongo3
|
|
172
172
|
|
173
173
|
def paginate_cltn( path_names, query_params=[{},[]], page=1, per_page=10 )
|
174
174
|
path_name_tokens = path_names.split( "|" )
|
175
|
-
|
175
|
+
zone = path_name_tokens[1]
|
176
176
|
list = nil
|
177
|
-
connect_for(
|
177
|
+
connect_for( zone ) do |con|
|
178
178
|
cltn_name = path_name_tokens.pop
|
179
179
|
db_name = path_name_tokens.pop
|
180
180
|
db = con.db( db_name )
|
@@ -194,48 +194,85 @@ module Mongo3
|
|
194
194
|
list
|
195
195
|
end
|
196
196
|
|
197
|
-
# Fetch the
|
197
|
+
# Fetch the cluster landscape from the config file
|
198
198
|
def landscape
|
199
199
|
config
|
200
200
|
end
|
201
201
|
|
202
|
-
# Build
|
202
|
+
# Build zone tree
|
203
203
|
def build_tree
|
204
204
|
root = Node.make_node( "home" )
|
205
205
|
|
206
|
-
# iterate thru
|
207
|
-
|
208
|
-
config.each_pair do |
|
209
|
-
node = Node.new(
|
206
|
+
# iterate thru zones
|
207
|
+
adjacencies = {}
|
208
|
+
config.each_pair do |zone, info|
|
209
|
+
node = Node.new( zone, zone, :dyna => true )
|
210
210
|
root << node
|
211
|
-
|
211
|
+
adjs = adjacencies[zone]
|
212
|
+
if adjs
|
213
|
+
node.mark_master!
|
214
|
+
adjs.each { |n| node << n }
|
215
|
+
end
|
216
|
+
masters = slave?( zone )
|
217
|
+
next if masters.empty?
|
218
|
+
|
219
|
+
node.mark_slave!
|
220
|
+
masters.each do |master|
|
221
|
+
host, port = master.split( ":" )
|
222
|
+
master_zone = zone_for( host, port )
|
223
|
+
next unless master_zone
|
224
|
+
master_node = root.find( "home|#{master_zone}")
|
225
|
+
if master_node
|
226
|
+
master_node.mark_master!
|
227
|
+
master_node << node
|
228
|
+
else
|
229
|
+
adjacencies[master_zone] = [] unless adjacencies[master_zone]
|
230
|
+
adjacencies[master_zone] << node
|
231
|
+
end
|
232
|
+
end
|
212
233
|
end
|
213
234
|
root
|
214
235
|
end
|
215
|
-
|
216
|
-
|
236
|
+
|
237
|
+
def slave?( zone )
|
238
|
+
masters = []
|
239
|
+
connect_for( zone ) do |con|
|
240
|
+
local = con.db( "local", :strict => true )
|
241
|
+
return masters unless local
|
242
|
+
begin
|
243
|
+
sources = local['sources']
|
244
|
+
srcs = sources.find( {}, :fields => [:host] )
|
245
|
+
srcs.each{ |src| masters << src['host'] }
|
246
|
+
rescue => boom
|
247
|
+
;
|
248
|
+
end
|
249
|
+
end
|
250
|
+
masters
|
251
|
+
end
|
252
|
+
|
253
|
+
# Build zone tree
|
217
254
|
def build_partial_tree( path_names )
|
218
255
|
path_name_tokens = path_names.split( "|" )
|
219
|
-
|
256
|
+
bm_zone = path_name_tokens[1]
|
220
257
|
bm_cltn = path_name_tokens.pop if path_name_tokens.size == 4
|
221
258
|
bm_db = path_name_tokens.pop if path_name_tokens.size == 3
|
222
259
|
|
223
260
|
root = Node.make_node( "home" )
|
224
261
|
|
225
|
-
# iterate thru
|
226
|
-
config.each_pair do |
|
227
|
-
node = Node.new(
|
262
|
+
# iterate thru zones
|
263
|
+
config.each_pair do |zone, info|
|
264
|
+
node = Node.new( zone, zone, :dyna => true )
|
228
265
|
root << node
|
229
266
|
|
230
|
-
next unless node.name ==
|
267
|
+
next unless node.name == bm_zone
|
231
268
|
|
232
|
-
connect_for(
|
269
|
+
connect_for( zone ) do |con|
|
233
270
|
count = 0
|
234
271
|
data = { :dyna => true }
|
235
272
|
database_names( con ).each do |db_name|
|
236
273
|
db = con.db( db_name, :strict => true )
|
237
274
|
cltns = collection_names( db )
|
238
|
-
db_node = Node.new( "#{
|
275
|
+
db_node = Node.new( "#{zone}_#{count}", "#{db_name}(#{cltns.size})", data.clone )
|
239
276
|
node << db_node
|
240
277
|
count += 1
|
241
278
|
if bm_db and db_node.name =~ /^#{bm_db}/
|
@@ -257,24 +294,24 @@ module Mongo3
|
|
257
294
|
# Build an appropriate subtree based on requested item
|
258
295
|
def build_sub_tree( parent_id, path_names )
|
259
296
|
path_name_tokens = path_names.split( "|" )
|
260
|
-
|
297
|
+
zone = path_name_tokens[1]
|
261
298
|
|
262
299
|
if db_request?( path_name_tokens )
|
263
|
-
sub_tree = build_db_tree( parent_id,
|
300
|
+
sub_tree = build_db_tree( parent_id, zone )
|
264
301
|
else
|
265
302
|
db_name = path_name_tokens.last
|
266
|
-
sub_tree = build_cltn_tree( parent_id,
|
303
|
+
sub_tree = build_cltn_tree( parent_id, zone, db_name )
|
267
304
|
end
|
268
305
|
sub_tree
|
269
306
|
end
|
270
307
|
|
271
308
|
# Connects to host and spews out all available dbs
|
272
309
|
# BOZO !! Need to deal with Auth?
|
273
|
-
def build_db_tree( parent_id,
|
310
|
+
def build_db_tree( parent_id, zone )
|
274
311
|
sub_root = nil
|
275
|
-
connect_for(
|
276
|
-
root
|
277
|
-
sub_root = Node.new( parent_id,
|
312
|
+
connect_for( zone ) do |con|
|
313
|
+
root = Node.make_node( "home" )
|
314
|
+
sub_root = Node.new( parent_id, zone )
|
278
315
|
|
279
316
|
root << sub_root
|
280
317
|
|
@@ -283,7 +320,7 @@ module Mongo3
|
|
283
320
|
database_names( con ).each do |db_name|
|
284
321
|
db = con.db( db_name, :strict => true )
|
285
322
|
cltns = collection_names( db ).size
|
286
|
-
node = Node.new( "#{
|
323
|
+
node = Node.new( "#{zone}_#{count}", "#{db_name}(#{cltns})", data.clone )
|
287
324
|
sub_root << node
|
288
325
|
count += 1
|
289
326
|
end
|
@@ -292,15 +329,15 @@ module Mongo3
|
|
292
329
|
end
|
293
330
|
|
294
331
|
# Show collections
|
295
|
-
def build_cltn_tree( parent_id,
|
332
|
+
def build_cltn_tree( parent_id, zone, db_name )
|
296
333
|
sub_root = nil
|
297
|
-
connect_for(
|
334
|
+
connect_for( zone ) do |con|
|
298
335
|
db = con.db( db_name )
|
299
336
|
root = Node.make_node( "home" )
|
300
|
-
|
337
|
+
zone_node = Node.make_node( zone )
|
301
338
|
sub_root = Node.new( parent_id, db_name )
|
302
|
-
root <<
|
303
|
-
|
339
|
+
root << zone_node
|
340
|
+
zone_node << sub_root
|
304
341
|
|
305
342
|
count = 0
|
306
343
|
data = { :dyna => false }
|
@@ -328,17 +365,17 @@ module Mongo3
|
|
328
365
|
con.database_names - excludes
|
329
366
|
end
|
330
367
|
|
331
|
-
# Connects to mongo given an
|
368
|
+
# Connects to mongo given an zone
|
332
369
|
# BOZO !! Auth...
|
333
|
-
def connect_for(
|
334
|
-
info = landscape[
|
335
|
-
puts ">>> Connecting for #{
|
370
|
+
def connect_for( zone, &block )
|
371
|
+
info = landscape[zone]
|
372
|
+
# puts ">>> Connecting for #{zone} -- #{info['host']}-#{info['port']}"
|
336
373
|
con = Mongo::Connection.new( info['host'], info['port'], { :slave_ok => true } )
|
337
374
|
|
338
375
|
if info['user'] and info['password']
|
339
376
|
con.db( 'admin' ).authenticate( info['user'], info['password'] )
|
340
377
|
end
|
341
|
-
yield con
|
378
|
+
yield con
|
342
379
|
con.close()
|
343
380
|
end
|
344
381
|
|
@@ -376,9 +413,18 @@ module Mongo3
|
|
376
413
|
numb.to_s.gsub(/(\d)(?=\d{3}+(\.\d*)?$)/, '\1,')
|
377
414
|
end
|
378
415
|
|
416
|
+
# find zone matching the host and port combination
|
417
|
+
def zone_for( host, port )
|
418
|
+
config.each_pair do |zone, info|
|
419
|
+
return zone if info['host'] == host and info['port'] == port.to_i
|
420
|
+
end
|
421
|
+
nil
|
422
|
+
end
|
423
|
+
|
379
424
|
# Initialize the mongo installation landscape
|
380
425
|
def config
|
381
426
|
unless @config
|
427
|
+
puts ">>>> Loading config from file"
|
382
428
|
@config = YAML.load_file( @config_file )
|
383
429
|
end
|
384
430
|
@config
|
data/lib/mongo3/node.rb
CHANGED
@@ -17,6 +17,28 @@ module Mongo3
|
|
17
17
|
Node.new( name, name, :path_ids => name, :path_names => name )
|
18
18
|
end
|
19
19
|
|
20
|
+
def mark_slave!
|
21
|
+
data[:slave] = true
|
22
|
+
data['$lineWidth'] = 3
|
23
|
+
data['$color'] = "#434343"
|
24
|
+
data['$dim'] = 15
|
25
|
+
end
|
26
|
+
|
27
|
+
def mark_master!
|
28
|
+
data[:master] = true
|
29
|
+
data['$color'] = '#92b948'
|
30
|
+
data['$dim'] = 15
|
31
|
+
data['$lineWidth'] = 3
|
32
|
+
end
|
33
|
+
|
34
|
+
def master?
|
35
|
+
data.has_key?( :master )
|
36
|
+
end
|
37
|
+
|
38
|
+
def slave?
|
39
|
+
data.has_key?( :slave )
|
40
|
+
end
|
41
|
+
|
20
42
|
# Add a child node
|
21
43
|
def <<( new_one )
|
22
44
|
new_one.parent = self
|
@@ -38,15 +60,22 @@ module Mongo3
|
|
38
60
|
|
39
61
|
# convert a tree node to a set of adjacencies
|
40
62
|
def to_adjacencies
|
41
|
-
|
42
|
-
|
43
|
-
self.children.each do |child|
|
44
|
-
root_level[:adjacencies] << child.oid
|
45
|
-
cltn << { :id => child.oid, :name => child.name, :data => child.data, :adjacencies => [] }
|
46
|
-
end
|
63
|
+
cltn = []
|
64
|
+
_to_adjacencies( self, cltn )
|
47
65
|
cltn
|
48
66
|
end
|
49
67
|
|
68
|
+
def _to_adjacencies( node, cltn )
|
69
|
+
node_level = { :id => node.oid, :name => node.name, :data => node.data, :adjacencies => [] }
|
70
|
+
cltn << node_level
|
71
|
+
node.children.each do |child|
|
72
|
+
node_level[:adjacencies] << child.oid
|
73
|
+
_to_adjacencies( child, cltn )
|
74
|
+
# cltn << { :id => child.oid, :name => child.name, :data => child.data, :adjacencies => [] }
|
75
|
+
end
|
76
|
+
# cltn
|
77
|
+
end
|
78
|
+
|
50
79
|
# converts to json
|
51
80
|
def to_json(*a)
|
52
81
|
hash = OrderedHash.new
|
data/lib/mongo3.rb
CHANGED
File without changes
|
@@ -14,10 +14,9 @@
|
|
14
14
|
</thead>
|
15
15
|
<tbody>
|
16
16
|
<% count = 0; @cltns.each do |cltn| %>
|
17
|
-
<% path = "#{session[:path_names]}|#{cltn[:name]}"%>
|
18
17
|
<tr id="<%=count%>" valign="top">
|
19
18
|
<td id="<%=count%>">
|
20
|
-
<img class="
|
19
|
+
<img rel="div#confirm_drop" class="drop" id="<%=cltn[:name]%>" rel="<%=count%>" src="/images/delete.png" title="drop this collection" style="display:none"/>
|
21
20
|
<img class="wait" id="wait_<%=count%>" src="/images/loading.gif"></img>
|
22
21
|
</td>
|
23
22
|
<td><a href="/databases/collection/<%=cltn[:name]%>/"><%= cltn[:name] %></a></td>
|
@@ -34,27 +33,45 @@
|
|
34
33
|
<div class="no_items">Oh snap! No collections found...</span>
|
35
34
|
<% end %>
|
36
35
|
|
36
|
+
<div class="modal" id="confirm_drop" style="font-size:1em">
|
37
|
+
<p>Dropping collection. Are you sure?</p>
|
38
|
+
<p style="margin:10px">
|
39
|
+
<button class="close yes">Yes</button>
|
40
|
+
<button class="close">No</button>
|
41
|
+
</p>
|
42
|
+
</div>
|
43
|
+
|
37
44
|
<script>
|
38
45
|
$( function() {
|
39
46
|
$("table#cltn tr" ).hover(
|
40
47
|
function() {
|
41
48
|
$(this).addClass( 'highlight' );
|
42
|
-
$("td#" + $(this).attr('id') + " img.
|
49
|
+
$("td#" + $(this).attr('id') + " img.drop" ).show();
|
43
50
|
},
|
44
51
|
function() {
|
45
52
|
$(this).removeClass( 'highlight' );
|
46
|
-
$("td#" + $(this).attr('id') + " img.
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
53
|
+
$("td#" + $(this).attr('id') + " img.drop" ).hide();
|
54
|
+
});
|
55
|
+
|
56
|
+
$('img.drop' ).overlay( {
|
57
|
+
expose: {
|
58
|
+
color: '#212021',
|
59
|
+
loadSpeed: 200,
|
60
|
+
opacity: 0.9
|
61
|
+
},
|
62
|
+
onBeforeLoad: function() {
|
63
|
+
$("button.yes").attr( 'id', this.getTrigger().attr('id') );
|
64
|
+
},
|
65
|
+
closeOnClick: false
|
66
|
+
});
|
67
|
+
|
68
|
+
$( 'button.yes' ).click( function() {
|
69
|
+
var self = $(this);
|
51
70
|
$.ajax({
|
52
|
-
data: {path:
|
71
|
+
data: {path:self.attr('id')},
|
53
72
|
dataType: 'script',
|
54
73
|
type: 'post',
|
55
|
-
url: '/databases/delete/'
|
56
|
-
beforeSend: function() { $('img#_wait_' + count ).show(); },
|
57
|
-
complete: function() { $('img#_wait_' + count ).hide(); }
|
74
|
+
url: '/databases/delete/'
|
58
75
|
});
|
59
76
|
});
|
60
77
|
});
|