bleve_stats_service_aggregations.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package nginx_log
  2. import (
  3. "context"
  4. "github.com/blevesearch/bleve/v2/search/query"
  5. )
  6. // calculateTopURLsFromBleve calculates top URLs using Bleve aggregations
  7. func (s *BleveStatsService) calculateTopURLsFromBleve(ctx context.Context, baseQuery query.Query) ([]URLAccessStats, error) {
  8. results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "path", extractPathField)
  9. if err != nil {
  10. return nil, err
  11. }
  12. // Take top 10 and convert to URLAccessStats format
  13. if len(results) > 10 {
  14. results = results[:10]
  15. }
  16. urlStats := make([]URLAccessStats, len(results))
  17. for i, result := range results {
  18. urlStats[i] = URLAccessStats{
  19. URL: result.Field,
  20. Visits: result.Count,
  21. Percent: result.Percent,
  22. }
  23. }
  24. return urlStats, nil
  25. }
  26. // calculateBrowserStatsFromBleve calculates browser statistics using Bleve
  27. func (s *BleveStatsService) calculateBrowserStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]BrowserAccessStats, error) {
  28. results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "browser", extractBrowserField)
  29. if err != nil {
  30. return nil, err
  31. }
  32. // Convert to BrowserAccessStats format
  33. browserStats := make([]BrowserAccessStats, len(results))
  34. for i, result := range results {
  35. browserStats[i] = BrowserAccessStats{
  36. Browser: result.Field,
  37. Count: result.Count,
  38. Percent: result.Percent,
  39. }
  40. }
  41. return browserStats, nil
  42. }
  43. // calculateOSStatsFromBleve calculates OS statistics using Bleve
  44. func (s *BleveStatsService) calculateOSStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]OSAccessStats, error) {
  45. results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "os", extractOSField)
  46. if err != nil {
  47. return nil, err
  48. }
  49. // Convert to OSAccessStats format
  50. osStats := make([]OSAccessStats, len(results))
  51. for i, result := range results {
  52. osStats[i] = OSAccessStats{
  53. OS: result.Field,
  54. Count: result.Count,
  55. Percent: result.Percent,
  56. }
  57. }
  58. return osStats, nil
  59. }
  60. // calculateDeviceStatsFromBleve calculates device statistics using Bleve
  61. func (s *BleveStatsService) calculateDeviceStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]DeviceAccessStats, error) {
  62. results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "device_type", extractDeviceField)
  63. if err != nil {
  64. return nil, err
  65. }
  66. // Convert to DeviceAccessStats format
  67. deviceStats := make([]DeviceAccessStats, len(results))
  68. for i, result := range results {
  69. deviceStats[i] = DeviceAccessStats{
  70. Device: result.Field,
  71. Count: result.Count,
  72. Percent: result.Percent,
  73. }
  74. }
  75. return deviceStats, nil
  76. }