--
-- (C) 2013-25 - ntop.org
--

local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path

require "lua_utils"
local json = require "dkjson"
local rest_utils = require "rest_utils"

--
-- Get info for a specific ASN
-- Example: curl -u admin:admin -H "Content-Type: application/json" http://localhost:3000/lua/rest/v2/get/asn/asn_info.lua
--
-- NOTE: in case of invalid login, no error is returned but redirected to login
--

local ifid = _GET["ifid"]
local asn = tonumber(_GET["asn"])

if not ifid then
  rest_utils.answer(rest_utils.consts.err.invalid_interface)
  return
end

local function format_asn_data(stats)
  return {
    id = stats["asn"],
    name = stats["name"],
    first_seen = stats["seen.first"],
    last_seen = stats["seen.last"],
    num_hosts = stats["num_hosts"],
    alerted_flows = stats["alerted_flows"]["total"],
    score = stats["score"],
    rtt = stats["round_trip_time"],
    bytes_sent = stats["bytes.sent"],
    bytes_rcvd = stats["bytes.rcvd"],
    packets_sent = stats["packets.sent"],
    packets_rcvd = stats["packets.rcvd"],
  }
end

interface.select(ifid)

local rc = rest_utils.consts.success.ok
local res = {}

if asn then
  local as = interface.getASInfo(asn)

  if(as) then
    res[#res + 1] = format_asn_data(as)
  end
else
  local asn_stats = interface.getASesInfo({ detailsLevel = "high" }) or {}
  local num_data = asn_stats.numASes or 0
  
  if num_data and num_data > 0 then
    for _, stats in pairs(asn_stats['ASes']) do
      res[#res + 1] = format_asn_data(stats)
    end
  end
end

rest_utils.answer(rc, res)

