n
      973             -- TODO: Add JSON update
      974             print("<tr><th>" .. i18n("host_details.behavioural_anomalies") ..
      975                       "</th><td colspan=2><span id=beh_anomalies>" ..
      976                       formatValue(host.score_behaviour.tot_num_anomalies) ..
      977                       "</span><span id=beh_anomalies_trend></span></td></tr>\n")
      978         end
      979 
      980         if ntop.isPro() and ifstats.inline and (host["has_blocking_quota"] or host["has_blocking_shaper"]) then
      981 
      982             local msg = ""
      983             local target = ""
      984             local quotas_page = hostinfo2detailsurl(host, {
      985                 page = "quota"
      986             })
      987             local policies_page = "/lua/if_stats.lua?ifid=" .. ifId .. "&page=filtering&pool=" .. host_pool_id
      988 
      989             if host["has_blocking_quota"] then
      990                 if host["has_blocking_shaper"] then
      991                     msg = i18n("host_details.host_traffic_blocked_quota_and_shaper")
      992                     target = quotas_page
      993                 else
      994                     msg = i18n("host_details.host_traffic_blocked_quota")
      995                     target = quotas_page
      996                 end
      997             else
      998                 msg = i18n("host_details.host_traffic_blocked_shaper")
      999                 target = policies_page
     1000             end
     1001 
     1002             print("<tr><th><i class=\"fas fa-ban fa-lg\"></i> <a href=\"" .. ntop.getHttpPrefix() .. target .. "\">" ..
     1003                       i18n("host_details.blocked_traffic") .. "</a></th><td colspan=2>" .. msg)
     1004             print(".")
     1005             print("</td></tr>")
     1006         end
     1007 
     1008         print("<tr><th>" .. i18n("details.first_last_seen") .. "</th><td nowrap><span id=first_seen>" ..
     1009                   formatEpoch(host["seen.first"]) .. " [" .. secondsToTime(os.time() - host["seen.first"]) .. " " ..
     1010                   i18n("details.ago") .. "]" .. "</span></td>\n")
     1011         print("<td  width='35%'><span id=last_seen>" .. formatEpoch(host["seen.last"]) .. " [" ..
     1012                   secondsToTime(os.time() - host["seen.last"]) .. " " .. i18n("details.ago") .. "]" ..
     1013                   "</span></td></tr>\n")
     1014 
     1015         if ((host["bytes.sent"] + host["bytes.rcvd"]) > 0) then
     1016             print("<tr><th>" .. i18n("details.sent_vs_received_traffic_breakdown") .. "</th><td colspan=2>")
     1017             graph_utils.breakdownBar(host["bytes.sent"], i18n("sent"), host["bytes.rcvd"], i18n("details.rcvd"), 0, 100)
     1018             print("</td></tr>\n")
     1019         end
     1020 
     1021         print("<tr><th>" .. i18n("details.traffic_sent_received") .. "</th><td><span id=pkts_sent>" ..
     1022                   formatPackets(host["packets.sent"]) .. "</span> / <span id=bytes_sent>" ..
     1023                   bytesToSize(host["bytes.sent"]) .. "</span> <span id=sent_trend></span></td><td><span id=pkts_rcvd>" ..
     1024                   formatPackets(host["packets.rcvd"]) .. "</span> / <span id=bytes_rcvd>" ..
     1025                   bytesToSize(host["bytes.rcvd"]) .. "</span> <span id=rcvd_trend></span></td></tr>\n")
     1026 
     1027         print("<tr><th colspan=4></th></tr>\n")
     1028 
     1029         local host_vulnerabilities = vs_utils.retrieve_host(host["ip"])
     1030 
     1031         if host_vulnerabilities ~= nil and host_vulnerabilities.num_vulnerabilities_found and host_vulnerabilities.num_vulnerabilities_found > 0 then
     1032             if(host_vulnerabilities.last_scan.time == nil) then
     1033                 host_vulnerabilities.last_scan.time = format_utils.formatPastEpochShort(host_vulnerabilities.la