GetEventSummary 获取事件摘要
(timeRange TimeRange)
| 740 | |
| 741 | // GetEventSummary 获取事件摘要 |
| 742 | func (al *InMemoryAuditLog) GetEventSummary(timeRange TimeRange) (*EventSummary, error) { |
| 743 | query := &AuditQuery{ |
| 744 | TimeRange: &timeRange, |
| 745 | } |
| 746 | |
| 747 | result, err := al.QueryEvents(context.Background(), query) |
| 748 | if err != nil { |
| 749 | return nil, err |
| 750 | } |
| 751 | |
| 752 | summary := &EventSummary{ |
| 753 | TimeRange: timeRange, |
| 754 | TotalEvents: result.Total, |
| 755 | KeyMetrics: make(map[string]any), |
| 756 | Trends: []TrendData{}, |
| 757 | Alerts: []SecurityAlert{}, |
| 758 | } |
| 759 | |
| 760 | // 生成趋势数据 |
| 761 | trendData := make(map[string]int64) |
| 762 | for _, event := range result.Events { |
| 763 | hour := event.Timestamp.Truncate(time.Hour) |
| 764 | key := hour.Format("2006-01-02 15:00") |
| 765 | trendData[key]++ |
| 766 | } |
| 767 | |
| 768 | for timestamp, count := range trendData { |
| 769 | t, _ := time.Parse("2006-01-02 15:00", timestamp) |
| 770 | summary.Trends = append(summary.Trends, TrendData{ |
| 771 | Timestamp: t, |
| 772 | Value: count, |
| 773 | Label: timestamp, |
| 774 | }) |
| 775 | } |
| 776 | |
| 777 | // 设置关键指标 |
| 778 | summary.KeyMetrics["events_per_hour"] = float64(result.Total) / timeRange.End.Sub(timeRange.Start).Hours() |
| 779 | summary.KeyMetrics["unique_users"] = len(getUniqueUsers(result.Events)) |
| 780 | |
| 781 | return summary, nil |
| 782 | } |
| 783 | |
| 784 | // ArchiveEvents 归档事件 |
| 785 | func (al *InMemoryAuditLog) ArchiveEvents(ctx context.Context, before time.Time) (int64, error) { |
nothing calls this directly
no test coverage detected