ソースを参照

load up RDS data

Chris Mague 7 年 前
コミット
8dbbb3eb77
3 ファイル変更72 行追加1 行削除
  1. 30 0
      lib/neoinfra/aws.rb
  2. 34 0
      models/rds.rb
  3. 8 1
      tasks/load_data.rake

+ 30 - 0
lib/neoinfra/aws.rb

@@ -6,6 +6,7 @@ require 'mime-types'
 require 'fog-aws'
 require 's3'
 require 'neo4j'
+require 'rds'
 require 'neoinfra/config'
 require 'neoinfra/cloudwatch'
 
@@ -89,5 +90,34 @@ module NeoInfra
         end
       end
     end
+
+    def load_rds
+      @cfg = NeoInfra::Config.new
+      neo4j_url = "http://#{@cfg.neo4j[:host]}:#{@cfg.neo4j[:port]}"
+      Neo4j::Session.open(:server_db, neo4j_url)
+      @cfg.accounts.each do |account|
+        base_conf = {
+          aws_access_key_id: account[:key],
+          aws_secret_access_key: account[:secret]
+        }
+        s = Fog::AWS::RDS.new(base_conf)
+        s.servers.each do |rds|
+          next unless Rds.where(name: rds.id).empty?
+          r = Rds.new(
+            name: rds.id,
+            size: rds.flavor_id,
+            engine: rds.engine,
+            engine_version: rds.engine_version,
+            multi_az: rds.multi_az.to_s,
+            endpoint: rds.endpoint['Address'],
+            port: rds.endpoint['Port'],
+            allocated_storage: rds.allocated_storage,
+          )
+          r.save
+          RdsAz.create(from_node: r, to_node: Az.where(az: rds.availability_zone).first)
+          RdsAccount.create(from_node: r, to_node: AwsAccount.where(name: account[:name]).first)
+        end
+      end
+    end
   end
 end

+ 34 - 0
models/rds.rb

@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'neo4j'
+
+# Information on Rds
+class Rds
+  include Neo4j::ActiveNode
+  property :name, constraint: :unique
+  property :size
+  property :engine
+  property :engine_version
+  property :multi_az
+  property :endpoint
+  property :port
+  property :allocated_storage
+  has_one :out, :az, rel_class: :RdsAz
+  has_one :out, :owner, rel_class: :RdsAccount
+end
+
+# Map Rds to Region
+class RdsAz
+  include Neo4j::ActiveRel
+  from_class :Rds
+  to_class :Az
+  type :az
+end
+
+# Map Rds to Region
+class RdsAccount
+  include Neo4j::ActiveRel
+  from_class :Rds
+  to_class :AwsAccount
+  type :owner
+end

+ 8 - 1
tasks/load_data.rake

@@ -36,6 +36,13 @@ namespace :load_data do
     j.load_nodes
   end
 
+  desc 'Load RDS'
+  task :rds do
+    puts 'loading rds'
+    j = NeoInfra::Aws.new
+    j.load_rds
+  end
+
   desc 'Load Everything'
-  task all: %i[accounts regions vpcs buckets nodes]
+  task all: %i[accounts regions vpcs buckets nodes rds]
 end