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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user