12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package nginx_log
- import (
- "context"
- "github.com/blevesearch/bleve/v2/search/query"
- )
- // calculateTopURLsFromBleve calculates top URLs using Bleve aggregations
- func (s *BleveStatsService) calculateTopURLsFromBleve(ctx context.Context, baseQuery query.Query) ([]URLAccessStats, error) {
- results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "path", extractPathField)
- if err != nil {
- return nil, err
- }
- // Take top 10 and convert to URLAccessStats format
- if len(results) > 10 {
- results = results[:10]
- }
- urlStats := make([]URLAccessStats, len(results))
- for i, result := range results {
- urlStats[i] = URLAccessStats{
- URL: result.Field,
- Visits: result.Count,
- Percent: result.Percent,
- }
- }
- return urlStats, nil
- }
- // calculateBrowserStatsFromBleve calculates browser statistics using Bleve
- func (s *BleveStatsService) calculateBrowserStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]BrowserAccessStats, error) {
- results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "browser", extractBrowserField)
- if err != nil {
- return nil, err
- }
- // Convert to BrowserAccessStats format
- browserStats := make([]BrowserAccessStats, len(results))
- for i, result := range results {
- browserStats[i] = BrowserAccessStats{
- Browser: result.Field,
- Count: result.Count,
- Percent: result.Percent,
- }
- }
- return browserStats, nil
- }
- // calculateOSStatsFromBleve calculates OS statistics using Bleve
- func (s *BleveStatsService) calculateOSStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]OSAccessStats, error) {
- results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "os", extractOSField)
- if err != nil {
- return nil, err
- }
- // Convert to OSAccessStats format
- osStats := make([]OSAccessStats, len(results))
- for i, result := range results {
- osStats[i] = OSAccessStats{
- OS: result.Field,
- Count: result.Count,
- Percent: result.Percent,
- }
- }
- return osStats, nil
- }
- // calculateDeviceStatsFromBleve calculates device statistics using Bleve
- func (s *BleveStatsService) calculateDeviceStatsFromBleve(ctx context.Context, baseQuery query.Query) ([]DeviceAccessStats, error) {
- results, err := s.aggregateFieldFromBleve(ctx, baseQuery, "device_type", extractDeviceField)
- if err != nil {
- return nil, err
- }
- // Convert to DeviceAccessStats format
- deviceStats := make([]DeviceAccessStats, len(results))
- for i, result := range results {
- deviceStats[i] = DeviceAccessStats{
- Device: result.Field,
- Count: result.Count,
- Percent: result.Percent,
- }
- }
- return deviceStats, nil
- }
|