module SmsLogparser::Parser

Public Instance Methods

extract_data_from_msg(message) { |data| ... } click to toggle source
# File lib/sms-logparser/parser.rb, line 10
def extract_data_from_msg(message)
  data = []
  if LogMessage.match?(message)
    logger.debug { "Parser MATCH: #{message}" }
    log_message = LogMessage.new(message)
    if log_message.match
      data << Parser.extract_usage_data(log_message)
      data << Parser.extract_visit(log_message)
      data.compact! # remove nil values
    else
      logger.warn { "Can't extract data from message: #{message}" }
    end
  else
    logger.debug { "Parser IGNORE: #{message}" }
  end
  yield data if block_given?
  data
end
extract_usage_data(log_message) click to toggle source
# File lib/sms-logparser/parser.rb, line 29
def extract_usage_data(log_message)
  log_message.account_info.merge(
    type: "TRAFFIC_#{log_message.type}",
    value: log_message.bytes
  )
end
extract_visit(log_message) click to toggle source
# File lib/sms-logparser/parser.rb, line 36
def extract_visit(log_message)
  # only measure file bigger than 256K
  size_limit = 256 * 1024
  if log_message.status == 200 &&
    log_message.bytes > size_limit &&
    (!log_message.args || log_message.args.match(/position=(0|1)/)) &&
    (log_message.file_extname =~ /\.(mp3|mp4|flv|f4v)/ || log_message.file == 'index.m3u8')
    visit_data = log_message.account_info.merge(
      type: "VISITORS_#{log_message.type}",
      value: 1
    )
    logger.debug { "Counting visit: message=\"#{log_message.message}\" data=#{visit_data}" }
  else
    logger.debug { "NOT counting VISITORS_#{log_message.type} for: #{log_message.message}" }
  end
  visit_data || nil
end
logger() click to toggle source
# File lib/sms-logparser/parser.rb, line 6
def logger
  SmsLogparser::Loggster.instance
end