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 | 
             
              });
         |