<% content_for :title, "#{@network_range.cidr} - Network Range Details" %>

<%= @network_range.cidr %>

<% if @network_range.virtual? %> Virtual <% end %> <% if @network_range.ipv4? %> IPv4 <% else %> IPv6 <% end %>
<% if @network_range.virtual? %> <%= link_to "Create Network", new_network_range_path(network: @network_range.cidr), class: "inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700" %> <% else %> <%= link_to "Edit", edit_network_range_path(@network_range), class: "inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50" %> <%= link_to "Create Rule", new_rule_path(network_range_id: @network_range.id), class: "inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700" %> <% end %>

Network Intelligence

Network Address
<%= @network_range.network_address %>
Prefix Length
/<%= @network_range.prefix_length %>
Family
<%= @network_range.ipv4? ? "IPv4" : "IPv6" %>
<% if @network_range.asn.present? %>
ASN
<%= link_to "#{@network_range.asn} (#{@network_range.asn_org})", network_ranges_path(asn: @network_range.asn), class: "text-blue-600 hover:text-blue-900 hover:underline" %>
<% end %> <% if @network_range.company.present? %>
Company
<%= link_to @network_range.company, network_ranges_path(company: @network_range.company), class: "text-blue-600 hover:text-blue-900 hover:underline" %>
<% end %> <% if @network_range.country.present? %>
Country
<%= link_to @network_range.country, network_ranges_path(country: @network_range.country), class: "text-blue-600 hover:text-blue-900 hover:underline" %>
<% end %> <% if @network_range.persisted? %>
Source
<%= @network_range.source %>
Created
<%= time_ago_in_words(@network_range.created_at) %> ago
Updated
<%= time_ago_in_words(@network_range.updated_at) %> ago
<% else %>
Status
Virtual Network
Events Found
<%= @traffic_stats[:total_requests] %> requests
<% end %>
Classification
<% if @network_range.is_datacenter? %> Datacenter <% end %> <% if @network_range.is_vpn? %> VPN <% end %> <% if @network_range.is_proxy? %> Proxy <% end %> <% if @network_range.abuser_scores_hash.any? %> Abuser Score: <%= @network_range.abuser_scores_hash['score'] || 'Unknown' %> <% end %>
<% if @network_range.additional_data_hash.any? %>
Additional Data
<%= JSON.pretty_generate(@network_range.additional_data_hash) %>
<% end %>
<% if @traffic_stats[:total_requests] > 0 %>

Traffic Statistics

<%= number_with_delimiter(@traffic_stats[:total_requests]) %>
Total Requests
<%= number_with_delimiter(@traffic_stats[:unique_ips]) %>
Unique IPs
<%= number_with_delimiter(@traffic_stats[:allowed_requests]) %>
Allowed
<%= number_with_delimiter(@traffic_stats[:blocked_requests]) %>
Blocked
<% if @traffic_stats[:top_paths].any? %>

Top Paths

<% @traffic_stats[:top_paths].first(5).each do |path, count| %>
<%= path %> <%= count %>
<% end %>
<% end %>
<% end %>

Associated Rules (<%= @associated_rules.count %>)

<% if @network_range.persisted? %> <% else %> Create this network to add rules <% end %>
<% if @network_range.persisted? %> <% end %> <% if @associated_rules.any? %>
<% @associated_rules.each do |rule| %>
<%= rule.action.upcase %> <%= rule.cidr %> Priority: <%= rule.priority %> <%= rule.rule_type.humanize %> <% if rule.source.include?('surgical') %> Surgical <% end %>
Created <%= time_ago_in_words(rule.created_at) %> ago by <%= rule.user&.email_address || 'System' %>
<% if rule.metadata&.dig('reason').present? %>
Reason: <%= rule.metadata['reason'] %>
<% end %>
<% if rule.enabled? %> Active <% else %> Disabled <% end %> <%= link_to "View", rule_path(rule), class: "text-blue-600 hover:text-blue-900 text-sm font-medium" %>
<% end %>
<% else %>
<% if @network_range.virtual? %>

Virtual Network

Create this network range to add rules and manage it permanently.

<% else %>

No rules yet

Get started by creating a rule for this network range.

<% end %>
<% end %>
<% if @parent_ranges.any? %>

Parent Network Ranges

<% @parent_ranges.each do |parent| %>
<%= link_to parent.cidr, network_range_path(parent), class: "text-sm font-medium text-gray-900 hover:text-blue-600" %>
Prefix: /<%= parent.prefix_length %> | <% if parent.company.present? %><%= parent.company %> | <% end %> <%= parent.source %>
<% end %>
<% end %> <% if @child_ranges.any? %>

Child Network Ranges

<% @child_ranges.each do |child| %>
<%= link_to child.cidr, network_range_path(child), class: "text-sm font-medium text-gray-900 hover:text-blue-600" %>
Prefix: /<%= child.prefix_length %> | <% if child.company.present? %><%= child.company %> | <% end %> <%= child.source %>
<% end %>
<% end %>
<% if @related_events.any? %>

Recent Events (<%= @related_events.count %>)

<% @related_events.first(20).each do |event| %> <% end %>
Time IP Path Action User Agent
<%= event.timestamp.strftime("%H:%M:%S") %> <%= event.ip_address %> <%= event.request_path || "-" %> <%= event.waf_action %>
<%= event.user_agent&.truncate(50) || "-" %>
<% end %>