mongo3 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
});
|