Chris Mague 7 роки тому
батько
коміт
860eb68010
3 змінених файлів з 78 додано та 1 видалено
  1. 40 0
      lib/neoinfra/aws.rb
  2. 31 1
      models/rds.rb
  3. 7 0
      tasks/load_data.rake

+ 40 - 0
lib/neoinfra/aws.rb

@@ -198,6 +198,46 @@ module NeoInfra
       end
     end
 
+    def load_dynamo
+      @cfg.accounts.each do |account|
+        base_conf = {
+          aws_access_key_id: account[:key],
+          aws_secret_access_key: account[:secret]
+        }
+        self.regions.each do |region|
+          region_conf = { region: region }
+          begin
+            dyns = Fog::AWS::DynamoDB.new(region_conf.merge(base_conf))
+            dyns.list_tables.data[:body]["TableNames"].each do |table|
+              tb = dyns.describe_table(table).data[:body]['Table']
+              next unless Dynamo.where(name: table['TableId']).empty?
+              d = Dynamo.new(
+                  tableid: 	tb['TableId'],
+                  name: 	tb['TableName'],
+                  creation: 	tb['CreationDateTime'],
+                  arn: 		tb['TableArn'],
+                  itemcount: 	tb['ItemCount'],
+                  sizebytes: 	tb['TableSizeBytes'],
+                  status: 	tb['TableStatus'],
+                  readcap: 	tb['ProvisionedThroughput']['ReadCapacityUnits'],
+                  writecap: 	tb['ProvisionedThroughput']['WriteCapacityUnits'],
+                  capdecreases: tb['ProvisionedThroughput']['NumberOfDecreasesToday'],
+              )
+              d.save
+              DynamoAccount.create(from_node: d, to_node: AwsAccount.where(name: account[:name]).first)
+              DynamoRegion.create(from_node: d, to_node: Region.where(region: region).first)
+            end
+          rescue Exception => e
+            puts "Could not list Dynamos for region: #{region}: #{e.message}"
+            next
+          end
+        end
+        #dyns.list_tables.each do |table|
+        #  p table
+        #end
+      end
+    end
+
     def load_rds
       @cfg.accounts.each do |account|
         base_conf = {

+ 31 - 1
models/rds.rb

@@ -25,10 +25,40 @@ class RdsAz
   type :az
 end
 
-# Map Rds to Region
 class RdsAccount
   include Neo4j::ActiveRel
   from_class :Rds
   to_class :AwsAccount
   type :owner
 end
+
+class Dynamo
+  include Neo4j::ActiveNode
+  property :tableid, constraint: :unique
+  property :name
+  property :creation
+  property :arn
+  property :itemcount
+  property :sizebytes
+  property :status
+  property :readcap
+  property :writecap
+  property :capdecreases
+  has_one :out, :owner, rel_class: :DynamoAccount
+  has_one :out, :region, rel_class: :DynamoRegion
+end
+
+class DynamoAccount
+  include Neo4j::ActiveRel
+  from_class :Dynamo
+  to_class :AwsAccount
+  type :owner
+end
+
+class DynamoRegion
+  include Neo4j::ActiveRel
+  from_class :Dynamo
+  to_class :Region
+  type :region
+end
+

+ 7 - 0
tasks/load_data.rake

@@ -50,6 +50,13 @@ namespace :load_data do
     j.load_security_groups
   end
 
+  desc 'Load Dynamo'
+  task :dynamo do
+    puts 'loading Dynamo'
+    j = NeoInfra::Aws.new
+    j.load_dynamo
+  end
+
   desc 'Load Everything'
   task all: %i[accounts regions vpcs buckets security_groups nodes rds]
 end