class ClientSessionWorker
  include Sidekiq::Worker
  sidekiq_options :queue => :client_session, :retry => false, :backtrace => true

  def perform(st, hourly=true)    
    puts "client sesison worker starts"
    col = hourly ? MonitoringDataCapped : MonitoringChild
    aggregate_data = col.collection.aggregate({"$match" => {"created_at" => {"$gte" => (st - 1.hour).utc, "$lt" =>  st.utc}}})
    aggregate_data.each do |val|
      c = val[:clients]
      c.each do |client|
        hsh = {}
        hsh[:mac] = client["MAC"]
        hsh[:access_point] = val["info"]["NASID"]
        hsh[:ip] = client["IPADDR"]
        hsh[:hostname] = client["HOSTNAME"]
        hsh[:device_type] = client["DEVICE_TYPE"]
        hsh[:s_t] = val["created_at"]
        hsh[:e_t] = val["created_at"]
        cs = ClientSession.where(:mac => client["MAC"],:e_t.gte => (st - 1.hour).utc, :e_t.lte => st.utc ).to_a.last
        if cs.present?
          ClientSession.update_data cs, hsh
        else
          ClientSession.save_data hsh
        end
      end
    end
  end
end
