Skip to content

Commit

Permalink
adding sources to sumoapi and refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
Aslan committed Jul 31, 2016
1 parent cb43a85 commit 4130508
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 35 deletions.
117 changes: 82 additions & 35 deletions lib/zaws/services/ai/query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
35 changes: 35 additions & 0 deletions lib/zaws/sumoapi/data/sources.rb
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions lib/zaws/sumoapi/resources/sources.rb
Original file line number Diff line number Diff line change
@@ -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
20 changes: 20 additions & 0 deletions lib/zaws/sumoapi/resources/sources/list.rb
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions lib/zaws/sumoapi/sumoapi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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

0 comments on commit 4130508

Please sign in to comment.