class OpenvasCli::VasSchedule

Attributes

comment[R]
duration[RW]
first_time[R]
in_use[RW]
name[R]
next_time[RW]
period[R]
task_ids[RW]

Public Class Methods

get_all(options = {}) click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 112
def self.get_all(options = {})
  
  manual_sort = false
  params = {:details => '1'}
  params[:schedule_id] = options[:id] if options[:id]
  case options[:sort_by]
  when :schedule_id
    params[:sort_field] = 'id'
  when :next_time
    manual_sort = true
  when :first_time
    params[:sort_field] = 'first_time'
  else
    params[:sort_field] = 'name'
  end
  
  req = Nokogiri::XML::Builder.new { |xml|
    xml.get_schedules(params)
  }
  ret = []
  
  begin
    schedules = connection.send_receive(req.doc)
    schedules.xpath("//schedule").each { |s|
      sch               = VasSchedule.new
      sch.id            = extract_value_from("@id", s)
      sch.name          = extract_value_from("name", s)
      sch.comment       = extract_value_from("comment", s)
      t_time            = extract_value_from("first_time", s)
      sch.first_time    = Time.parse(t_time) unless t_time == ""
      t_time            = extract_value_from("next_time", s)
      sch.next_time     = Time.parse(t_time) unless t_time == "" or t_time == "done"

      period_num = extract_value_from("period", s).to_i
      if period_num > 0
        sch.period = VasPeriod.from_seconds(period_num)
      end
      
      period_num = extract_value_from("period_months", s).to_i
      if period_num > 0
        sch.period = VasPeriod.from_months(period_num)
      end
      
      t_time            = extract_value_from("duration", s)
      unless t_time == ""
        sch.duration = t_time.to_i unless t_time == 0
      end

      sch.in_use        = extract_value_from("in_use", s).to_i > 0
      sch.task_ids         = []
      s.xpath('tasks/task/@id') { |t|
        sch.task_ids << t.value
      }
      ret << sch
    }
   
    if manual_sort
      if options[:sort_by] == :next_time
        ret.sort!{ |a,b| a.next_time <=> b.next_time }
      end
    end
  rescue VasExceptions::CommandException => e
    raise e unless e.message =~ /Failed to find schedule/i
  end    
  ret
end

Public Instance Methods

changed?() click to toggle source
Calls superclass method
# File lib/openvas-cli/vas_schedule.rb, line 21
def changed?
  local_changes = false
  local_changes = @period.changed? if @period
  
  local_changes || super
end
comment=(v) click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 33
def comment=(v)
  comment_will_change! unless @comment == v
  @comment = v
end
create_or_update() click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 68
def create_or_update
  return unless changed? || @id == nil
  
  if @id
    return unless destroy
  end
  
  req = Nokogiri::XML::Builder.new { |xml|
    xml.create_schedule {
      xml.name    { xml.text(@name) }
      xml.comment { xml.text(@comment) } if @comment
      xml.first_time {
        xml.minute       { xml.text(@first_time.min) }
        xml.hour         { xml.text(@first_time.hour) }
        xml.day_of_month { xml.text(@first_time.day) }
        xml.month        { xml.text(@first_time.month) }
        xml.year         { xml.text(@first_time.year) }
      }
      xml.duration      { xml.text(@duration ? @duration : 0) }
      xml.period { 
        if @period
          xml.text(@period.number)
          xml.unit { xml.text(@period.period.to_s) }
        else
          xml.text(0)
          xml.unit { xml.text("second") }
        end
      }
    }
  }
  
  begin
    resp = VasSchedule.connection.send_receive(req.doc)
    @id = VasSchedule.extract_value_from("/create_schedule_response/@id", resp) unless @id
    reset_changes
  
    true
  rescue VasExceptions::CommandException => e
    errors[:command_failure] << e.message
    
    nil
  end
end
delete_record() click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 48
def delete_record
  return unless @id
  
  req = Nokogiri::XML::Builder.new { |xml|
    xml.delete_schedule(:schedule_id => @id)
  }
  
  begin
    VasSchedule.connection.send_receive(req.doc)
    @id = nil
    reset_changes
    
    true
  rescue VasExceptions::CommandException => e
    errors[:command_failure] << e.message
    
    nil
  end
end
first_time=(v) click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 38
def first_time=(v)
  first_time_will_change! unless @first_time == v
  @first_time = v
end
name=(v) click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 28
def name=(v)
  name_will_change! unless @name == v
  @name = v
end
period=(v) click to toggle source
# File lib/openvas-cli/vas_schedule.rb, line 43
def period=(v)
  period_will_change! unless @period == v
  @period = v
end