Sha256: 68ff450f8feeb315ef0c539b3ee9c781412f231c88c31b9521dad8b5d1358673
Contents?: true
Size: 1.88 KB
Versions: 3
Compression:
Stored size: 1.88 KB
Contents
# frozen_string_literal: true require 'typhoeus' require_relative '../country/model' require_relative 'model' class InsightVMApi def delete_asset(id) raise 'Cannot delete asset without ID' if id.nil? delete('/assets', id) end # Use Typhoeus for concurrency def delete_assets(ids = [], threads = nil) return if ids.empty? threads ||= ids.size**0.5 size = ids.size / threads batches = ids.each_slice(size) hydra = Typhoeus::Hydra.new(max_concurrency: threads) batches.each do |batch| batch.each do |id| request = create_delete_request(id) hydra.queue(request) end # Run the queued batch of requests hydra.run end # TODO: give the number of deleted assets puts 'All assets in the group have been successfully deleted.' end def fetch_site_assets(site_id:) fetch_all("/sites/#{site_id}/assets") do |resource| yield Asset.from_json(resource) end end def delete_site_assets(site_id:) asset_ids = [] fetch_site_assets(site_id:) do |asset| puts "Asset ##{asset.id} #{asset.ip} #{asset.host_name}" asset_ids << asset.id end delete_assets(asset_ids) end private # Creates a Typhoeus request for deleting an asset def create_delete_request(asset_id) Typhoeus::Request.new( "#{base_url}/assets/#{asset_id}", method: :delete, headers: { Authorization: base_auth }, ssl_verifypeer: false ).tap do |request| request.on_complete do |response| if response.success? puts "Successfully deleted asset #{asset_id}" elsif response.timed_out? puts "Timeout while trying to delete asset #{asset_id}" elsif response.code.zero? puts "HTTP request failed: #{response.return_message}" else puts "Delete asset #{asset_id} failed: #{response.code}" end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
avs-0.1.3 | lib/domain/asset/api.rb |
avs-0.1.2 | lib/domain/asset/api.rb |
avs-0.1.1 | lib/domain/asset/api.rb |