diff --git a/lib/zaws/services/ai/query.rb b/lib/zaws/services/ai/query.rb index f7b4832..965b682 100755 --- a/lib/zaws/services/ai/query.rb +++ b/lib/zaws/services/ai/query.rb @@ -12,75 +12,122 @@ def initialize(shellout, ai) def kilo(n) count = 0 - while n >= 1024 and count < 4 + while n >= 1024 and count < 4 n /= 1024.0 count += 1 end - format("%.2f",n) + %w(B KB MB GB TB)[count] + format("%.2f", n) + %w(B KB MB GB TB)[count] end - def all(home,out,verbose=nil,value) + def all(home, out, verbose=nil, value) results = {} + value_array=[] + value_array << value + query_aws(value_array, verbose, results) + query_nessus(home, results, value_array, verbose) + #query_sumo(home, results, value_array, verbose) + query_newrelic(home, results, value_array, verbose) + + out.puts(results.to_yaml) + end + + def query_nessus(home, results, value_array, verbose) @ai.nessusapi.home=home - nessusapi_details = @ai.nessusapi.data_agents.view(1,verbose) + nessusapi_details = @ai.nessusapi.data_agents.view(1, verbose) results['nessus']= [] nessusapi_details['agents'].each do |x| - if x['ip'].include?(value) || x['name'].include?(value) - x['last_scanned']= x['last_scanned']+ " <--- #{DateTime.strptime(x['last_scanned'],'%s')}" - results['nessus'] << x - end + value_array.each do |value| + if x['ip'].include?(value) || x['name'].include?(value) + if x['last_scanned'] + x['last_scanned']= x['last_scanned'] + " <--- #{DateTime.strptime(x['last_scanned'], '%s')}" + end + results['nessus'] << x + break + end + end end + end + + def query_sumo(home, results, value_array, verbose) @ai.sumoapi.home=home sumoapi_details = @ai.sumoapi.data_collectors.view(verbose) results['sumo']= [] sumoapi_details['collectors'].each do |x| - if x['name'].include?(value) - results['sumo'] << x - end - end - @ai.newrelicapi.home=home - newrelicapi_details = @ai.newrelicapi.data_servers.view(verbose) - results['newrelic'] =[] - newrelicapi_details['servers'].each do |x| - if x['name'].include?(value) - x['summary']['memory_used']="#{x['summary']['memory_used']} "+"<--- #{kilo(x['summary']['memory_used'])}" - results['newrelic'] << x - end + value_array.each do |value| + if x['name'].include?(value) + sumoapi_sources=@ai.sumoapi.data_sources.view(verbose, x['id']) + x['sources']=sumoapi_sources + results['sumo'] << x + break + end + end end - out.puts(results.to_yaml) end - - def all_aws(out,verbose=nil,value) + + def query_aws(value, verbose, results) profile_creds=ZAWS::AWSCLI::Credentials.new("#{@ai.awscli.home}/.aws/credentials") item = [] - verbose.puts("DEBUG: regions: " + @ai.awscli.main_regions.join(",")) if verbose - verbose.puts("DEBUG: profiles: " +profile_creds.profiles.join(",")) if verbose profile_creds.profiles.each do |profile| - verbose.puts("DEBUG: Iterating over profile: "+ profile) if verbose @ai.awscli.main_regions.each do |region| filters= {} - verbose.puts("DRBUG: Calling describe instances") if verbose - @ai.awscli.command_ec2.describeInstances.execute(region,'json' ,filters, nil, verbose,profile) + @ai.awscli.command_ec2.describeInstances.execute(region, 'json', filters, nil, verbose, profile) res = @ai.awscli.data_ec2.instance.view('hash') res['profile']=profile item << res - end + end end - results = {} results['awscli']= [] item.each do |reservations| reservations['Reservations'].each do |reservation| reservation['Instances'].each do |instance| - if instance['PrivateIpAddress'] and instance['PrivateIpAddress'].include?(value) - instance['progile']=reservations['profile'] + found=false + found=true if instance['InstanceId'] and instance['InstanceId'].include?(value[0]) + found=true if instance['PrivateIpAddress'] and instance['PrivateIpAddress'].include?(value[0]) + if instance['Tags'] + instance['Tags'].each do |tag| + if tag['Value'] and tag['Value'].include?(value[0]) + found=true + end + end + end + if found + instance['profile']=reservations['profile'] results['awscli'] << instance + value << instance['InstanceId'] + if instance['PrivateIpAddress'] + value << instance['PrivateIpAddress'] unless instance['PrivateIpAddress'].include?(value[0]) + value << instance['PrivateIpAddress'].gsub('.', '-') unless instance['PrivateIpAddress'].gsub('.', '-').include?(value[0]) + end + if instance['Tags'] + instance['Tags'].each do |tag| + if tag['Key'].equal?('Name') + value << tag['Value'] unless tag['Value'].include?(value[0]) + end + end + end end end end end - out.puts(results.to_yaml) - end - + end + + def query_newrelic(home, results, value_array, verbose) + @ai.newrelicapi.home=home + newrelicapi_details = @ai.newrelicapi.data_servers.view(verbose) + results['newrelic'] =[] + newrelicapi_details['servers'].each do |x| + value_array.each do |value| + if x['name'].include?(value) + if x['summary'] and x['summary']['memory_used'] + x['summary']['memory_used']="#{x['summary']['memory_used']}"+" <--- #{kilo(x['summary']['memory_used'])}" + end + results['newrelic'] << x + break + end + end + end + end + end end end diff --git a/lib/zaws/sumoapi/data/sources.rb b/lib/zaws/sumoapi/data/sources.rb new file mode 100755 index 0000000..a77fe53 --- /dev/null +++ b/lib/zaws/sumoapi/data/sources.rb @@ -0,0 +1,35 @@ +module ZAWS + class Sumoapi + class Data + class Sources + + def initialize(shellout, sumoapi) + @shellout=shellout + @sumoapi=sumoapi + @instance_hash=nil + end + + def validJSON + return (@instance_hash.nil?) + end + + def load(data, verbose) + @instance_raw_data = data + verbose.puts(@instance_raw_data) if verbose + @instance_hash=data + end + + def view(verbose,sourceid) + details = @sumoapi.filestore.retrieve("sources#{sourceid}") + if details.nil? + load(@sumoapi.resource_sources.list.execute(verbose,sourceid),verbose) + @sumoapi.filestore.store("sources#{sourceid}",@instance_hash,Time.now + @sumoapi.filestore.timeout) + else + load(details,verbose) + end + return @instance_raw_data + end + end + end + end +end diff --git a/lib/zaws/sumoapi/resources/sources.rb b/lib/zaws/sumoapi/resources/sources.rb new file mode 100755 index 0000000..89cac4c --- /dev/null +++ b/lib/zaws/sumoapi/resources/sources.rb @@ -0,0 +1,18 @@ +module ZAWS + class Sumoapi + class Resources + class Sources + def initialize(shellout, nessusapi) + @shellout=shellout + @nessusapi=nessusapi + end + + def list + @_list ||= (ZAWS::Sumoapi::Resources::Sources::List.new(@shellout, @nessusapi)) + return @_list + end + + end + end + end +end \ No newline at end of file diff --git a/lib/zaws/sumoapi/resources/sources/list.rb b/lib/zaws/sumoapi/resources/sources/list.rb new file mode 100755 index 0000000..8a73018 --- /dev/null +++ b/lib/zaws/sumoapi/resources/sources/list.rb @@ -0,0 +1,20 @@ +module ZAWS + class Sumoapi + class Resources + class Sources + class List + + def initialize(shellout,sumoapi) + @shellout=shellout + @sumoapi=sumoapi + end + + def execute(verbose=nil,sourceid) + @sumoapi.client.get("/api/v1/collectors/#{sourceid}/sources") + end + + end + end + end + end +end diff --git a/lib/zaws/sumoapi/sumoapi.rb b/lib/zaws/sumoapi/sumoapi.rb index 8e7efb3..31dc634 100755 --- a/lib/zaws/sumoapi/sumoapi.rb +++ b/lib/zaws/sumoapi/sumoapi.rb @@ -31,6 +31,11 @@ def resource_collectors return @_resource_collectors end + def resource_sources + @_resource_sources ||= (ZAWS::Sumoapi::Resources::Sources.new(@shellout, self)) + return @_resource_sources + end + def client fail("Home is null! Make sure its set before getting the client.") if @home== nil creds = ZAWS::Sumoapi::SumoCreds::Creds::YamlFile.new(@home) @@ -42,5 +47,10 @@ def data_collectors return @_data_collectors end + def data_sources + @_data_sources ||= (ZAWS::Sumoapi::Data::Sources.new(@shellout, self)) + return @_data_sources + end + end end