mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-10-30 16:42:15 +00:00
- Implement GetTenantDashboard with usage stats, metrics, recent events, and quota status - Implement GetUsageAnalytics with usage by type, trends, and peaks - Implement GetPerformanceAnalytics with API performance, resource performance, errors, and slow queries - Extract helper methods to tenant_analytics_mock.go: parseTimeRange, parseAPIRequestEvent, parseErrorEvent, parseSlowQueryEvent, calculateAPIPerformance, build
148 lines
4.3 KiB
Go
148 lines
4.3 KiB
Go
package services
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/tenant"
|
|
)
|
|
|
|
// buildUsageByType builds usage analytics by resource type
|
|
func (s *TenantServiceImpl) buildUsageByType(usageStats *tenant.TenantUsageStats) map[string]*tenant.ResourceUsageAnalytics {
|
|
usageByType := make(map[string]*tenant.ResourceUsageAnalytics)
|
|
|
|
// Build analytics for each resource type
|
|
resourceTypes := []string{"users", "profiles", "carriers", "api_calls", "storage"}
|
|
|
|
for _, resourceType := range resourceTypes {
|
|
analytics := &tenant.ResourceUsageAnalytics{
|
|
ResourceType: resourceType,
|
|
TotalUsage: s.getMockResourceCount(resourceType),
|
|
AverageUsage: s.getMockResourceCount(resourceType) / 30,
|
|
PeakUsage: s.getMockResourceCount(resourceType),
|
|
PeakTime: time.Now().Add(-2 * time.Hour),
|
|
}
|
|
|
|
usageByType[resourceType] = analytics
|
|
}
|
|
|
|
return usageByType
|
|
}
|
|
|
|
// buildUsageTrends builds usage trends over time
|
|
func (s *TenantServiceImpl) buildUsageTrends(tenantID, timeRange string) map[string][]*tenant.UsageTrend {
|
|
trends := make(map[string][]*tenant.UsageTrend)
|
|
|
|
// Build trends for each resource type
|
|
resourceTypes := []string{"users", "profiles", "carriers", "api_calls", "storage"}
|
|
|
|
for _, resourceType := range resourceTypes {
|
|
trendData := make([]*tenant.UsageTrend, 0)
|
|
|
|
// Generate mock trend data points
|
|
now := time.Now()
|
|
for i := 6; i >= 0; i-- {
|
|
timestamp := now.AddDate(0, 0, -i)
|
|
usage := int(float64(s.getMockResourceCount(resourceType)) * (1.0 + float64(6-i)*0.1))
|
|
|
|
trend := &tenant.UsageTrend{
|
|
Timestamp: timestamp,
|
|
Usage: usage,
|
|
}
|
|
|
|
trendData = append(trendData, trend)
|
|
}
|
|
|
|
trends[resourceType] = trendData
|
|
}
|
|
|
|
return trends
|
|
}
|
|
|
|
// buildUsagePeaks builds usage peak information
|
|
func (s *TenantServiceImpl) buildUsagePeaks(tenantID, timeRange string) map[string]*tenant.UsagePeak {
|
|
peaks := make(map[string]*tenant.UsagePeak)
|
|
|
|
// Build peaks for each resource type
|
|
resourceTypes := []string{"users", "profiles", "carriers", "api_calls", "storage"}
|
|
|
|
for _, resourceType := range resourceTypes {
|
|
peak := &tenant.UsagePeak{
|
|
Timestamp: time.Now().Add(-2 * time.Hour),
|
|
Usage: s.getMockResourceCount(resourceType),
|
|
Context: map[string]any{
|
|
"peak_hour": 14, // 2 PM
|
|
"day_of_week": "Wednesday",
|
|
"season": "Q2",
|
|
"driver": "business_activity",
|
|
},
|
|
}
|
|
|
|
peaks[resourceType] = peak
|
|
}
|
|
|
|
return peaks
|
|
}
|
|
|
|
// parseAPIRequestEvents parses API request events from tenant events
|
|
func (s *TenantServiceImpl) parseAPIRequestEvents(events []*tenant.TenantEvent) []*tenant.APIRequestEvent {
|
|
apiRequests := make([]*tenant.APIRequestEvent, 0)
|
|
|
|
for _, event := range events {
|
|
if event.EventType == "api_request" {
|
|
request := s.parseAPIRequestEvent(event)
|
|
apiRequests = append(apiRequests, request)
|
|
}
|
|
}
|
|
|
|
return apiRequests
|
|
}
|
|
|
|
// buildResourcePerformance builds resource performance metrics
|
|
func (s *TenantServiceImpl) buildResourcePerformance(tenantID, timeRange string) map[string]*tenant.ResourcePerformance {
|
|
resourcePerformance := make(map[string]*tenant.ResourcePerformance)
|
|
|
|
// Build performance for each resource type
|
|
resourceTypes := []string{"users", "profiles", "carriers", "api_calls", "storage"}
|
|
|
|
for _, resourceType := range resourceTypes {
|
|
performance := &tenant.ResourcePerformance{
|
|
ResourceType: resourceType,
|
|
ResponseTime: 150.5, // Mock response time in ms
|
|
Throughput: 1000.0, // Mock requests per second
|
|
ErrorRate: 2.1, // Mock error rate percentage
|
|
}
|
|
|
|
resourcePerformance[resourceType] = performance
|
|
}
|
|
|
|
return resourcePerformance
|
|
}
|
|
|
|
// parseErrorEvents parses error events from tenant events
|
|
func (s *TenantServiceImpl) parseErrorEvents(events []*tenant.TenantEvent) []*tenant.ErrorEvent {
|
|
errorEvents := make([]*tenant.ErrorEvent, 0)
|
|
|
|
for _, event := range events {
|
|
if event.EventType == "error" {
|
|
errorEvent := s.parseErrorEvent(event)
|
|
errorEvents = append(errorEvents, errorEvent)
|
|
}
|
|
}
|
|
|
|
return errorEvents
|
|
}
|
|
|
|
// parseSlowQueryEvents parses slow query events from tenant events
|
|
func (s *TenantServiceImpl) parseSlowQueryEvents(events []*tenant.TenantEvent) []*tenant.SlowQuery {
|
|
slowQueries := make([]*tenant.SlowQuery, 0)
|
|
|
|
for _, event := range events {
|
|
if event.EventType == "slow_query" {
|
|
slowQuery := s.parseSlowQueryEvent(event)
|
|
slowQueries = append(slowQueries, slowQuery)
|
|
}
|
|
}
|
|
|
|
return slowQueries
|
|
}
|