Updates
This commit is contained in:
@@ -126,11 +126,16 @@ class AnalyticsController < ApplicationController
|
||||
@start_time = calculate_start_time(@time_period)
|
||||
|
||||
# Top networks by request volume (using denormalized network_range_id)
|
||||
@top_networks = NetworkRange.joins("LEFT JOIN events ON events.network_range_id = network_ranges.id")
|
||||
.where("events.timestamp >= ? OR events.timestamp IS NULL", @start_time)
|
||||
.group("network_ranges.id")
|
||||
.select("network_ranges.*, COUNT(events.id) as event_count, COUNT(DISTINCT events.ip_address) as unique_ips")
|
||||
.order("event_count DESC")
|
||||
# Use a subquery approach to avoid PostgreSQL GROUP BY issues with network_ranges.*
|
||||
event_stats = Event.where("timestamp >= ?", @start_time)
|
||||
.where.not(network_range_id: nil)
|
||||
.group(:network_range_id)
|
||||
.select("network_range_id, COUNT(*) as event_count, COUNT(DISTINCT ip_address) as unique_ips")
|
||||
|
||||
# Join the stats back to NetworkRange to get full network details
|
||||
@top_networks = NetworkRange.joins("INNER JOIN (#{event_stats.to_sql}) stats ON stats.network_range_id = network_ranges.id")
|
||||
.select("network_ranges.*, stats.event_count, stats.unique_ips")
|
||||
.order("stats.event_count DESC")
|
||||
.limit(50)
|
||||
|
||||
# Network type breakdown with traffic stats
|
||||
@@ -139,7 +144,7 @@ class AnalyticsController < ApplicationController
|
||||
# Company breakdown for top traffic sources (using denormalized company column)
|
||||
@top_companies = Event.where("timestamp >= ? AND company IS NOT NULL", @start_time)
|
||||
.group(:company)
|
||||
.select("company, COUNT(*) as event_count, COUNT(DISTINCT ip_address) as unique_ips")
|
||||
.select("company, COUNT(*) as event_count, COUNT(DISTINCT ip_address) as unique_ips, COUNT(DISTINCT network_range_id) as network_count")
|
||||
.order("event_count DESC")
|
||||
.limit(20)
|
||||
|
||||
@@ -307,7 +312,8 @@ class AnalyticsController < ApplicationController
|
||||
# Query events directly using denormalized flags
|
||||
event_stats = Event.where("timestamp >= ? AND #{network_type[:column]} = ?", start_time, true)
|
||||
.select("COUNT(*) as event_count, COUNT(DISTINCT ip_address) as unique_ips, COUNT(DISTINCT network_range_id) as network_count")
|
||||
.first
|
||||
.reorder(nil)
|
||||
.take
|
||||
|
||||
results[network_type[:type]] = {
|
||||
label: network_type[:label],
|
||||
@@ -321,7 +327,7 @@ class AnalyticsController < ApplicationController
|
||||
# Calculate standard networks (everything else)
|
||||
standard_stats = Event.where("timestamp >= ? AND is_datacenter = ? AND is_vpn = ? AND is_proxy = ?", start_time, false, false, false)
|
||||
.select("COUNT(*) as event_count, COUNT(DISTINCT ip_address) as unique_ips, COUNT(DISTINCT network_range_id) as network_count")
|
||||
.first
|
||||
.take
|
||||
|
||||
results['standard'] = {
|
||||
label: 'Standard',
|
||||
@@ -366,7 +372,7 @@ class AnalyticsController < ApplicationController
|
||||
.having("COUNT(*) >= 10") # minimum threshold
|
||||
|
||||
patterns[:high_deny_rate] = {
|
||||
count: high_deny_networks.count,
|
||||
count: high_deny_networks.length,
|
||||
network_ids: high_deny_networks.map(&:network_range_id)
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +60,10 @@ class NetworkRangesController < ApplicationController
|
||||
@parent_ranges = @network_range.parent_ranges.limit(10)
|
||||
@associated_rules = @network_range.persisted? ? @network_range.rules.includes(:user).order(created_at: :desc) : []
|
||||
|
||||
# Load rules from supernets and subnets
|
||||
@supernet_rules = @network_range.persisted? ? @network_range.supernet_rules.includes(:network_range, :user).limit(10) : []
|
||||
@subnet_rules = @network_range.persisted? ? @network_range.child_rules.includes(:network_range, :user).limit(20) : []
|
||||
|
||||
# Traffic analytics (if we have events)
|
||||
@traffic_stats = calculate_traffic_stats(@network_range)
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ def process_quick_create_parameters
|
||||
end
|
||||
|
||||
# Handle redirect URL
|
||||
if @rule.redirect? && params[:redirect_url].present?
|
||||
if @rule.redirect_action? && params[:redirect_url].present?
|
||||
@rule.metadata ||= {}
|
||||
if @rule.metadata.is_a?(String)
|
||||
begin
|
||||
@@ -340,7 +340,7 @@ end
|
||||
end
|
||||
|
||||
# Handle redirect URL
|
||||
if @rule.redirect? && params[:redirect_url].present?
|
||||
if @rule.redirect_action? && params[:redirect_url].present?
|
||||
@rule.metadata ||= {}
|
||||
if @rule.metadata.is_a?(String)
|
||||
begin
|
||||
|
||||
Reference in New Issue
Block a user