mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-11-08 21:15:14 +00:00
* refactor: Rename handler package to handlers in carrier-connector - Rename internal/handler directory to internal/handlers - Update handler import path in main.go and routes.go * feat: Add SM-DP+ handler with multi-carrier management and profile operations - Add SMDPHandler struct with manager field and NewSMDPHandler constructor - Add AddCarrier endpoint with JSON binding and carrier configuration support - Add RemoveCarrier endpoint with carrier ID parameter validation - Add DownloadProfile endpoint with 30-second timeout and context cancellation - Add GetCarrierStatus endpoint returning all carriers with timestamp - Add GetProfileStatus endpoint with EID/ICCID validation * feat: Add SM-DP+ integration layer with multi-carrier system initialization and route registration - Add SMDPIntegration struct with service, handler, repository, and logger fields - Add NewSMDPIntegration constructor with default carrier initialization - Add InitializeSystem method with carrier health logging and status tracking - Add RegisterRoutes method with profile, carrier, health, and metrics endpoints - Add healthHandler with carrier health status aggregation and degraded state detection - Add metricsHandler * feat: Add SM-DP+ service layer with multi-carrier management and profile download operations - Add SMDPService struct with manager, repository, and logger fields - Add NewSMDPService constructor with default config and background health checking - Add InitializeDefaultCarriers with AT&T, Verizon, and T-Mobile DE configurations - Add DownloadProfile method with context support and request logging - Add GetOptimalCarrier wrapping SelectCarrier for best carrier selection - Add GetCarrierHealth returning * feat: Add SM-DP+ manager with multi-carrier load balancing, health checking, and profile operations - Add DefaultManagerConfig with 30s health checks, 3 retries, and circuit breaker configuration - Add CarrierConfig struct with ES2 settings, MCC/MNC, priority, and feature support - Add ToCarrier method converting CarrierConfig to Carrier with metrics and capabilities - Add HealthChecker with periodic carrier health monitoring and status evaluation - Add LoadBalancer with weighted round-robin, least * feat: Add intelligent carrier selection service with scoring, recommendations, and analytics - Add SelectionService struct with manager, handler, and logger fields - Add NewSelectionService constructor with info-level logging - Add IntelligentCarrierSelection method with comprehensive criteria evaluation - Add IntelligentSelectionRequest with region, profile type, urgency, and cost sensitivity - Add UserPreferences and BusinessContext structs for selection customization - Add IntelligentSelectionResponse with selected * feat: Add carrier selection handler with optimal selection, analytics, and performance monitoring endpoints - Add SelectionHandler struct with manager and logger fields - Add NewSelectionHandler constructor with info-level logging - Add SelectOptimalCarrier endpoint with criteria validation and scoring - Add SelectCarrier endpoint using default selection criteria - Add GetSelectionHistory endpoint with carrier ID path parameter - Add UpdateLearning endpoint with performance feedback validation - Add GetSelectionAnalytics endpoint with carrier stats * feat: Add carrier selection integration layer with multi-carrier setup, HTTP server, and demo capabilities - Add SelectionIntegration struct with manager, selection service, handler, and SMDP service fields - Add NewSelectionIntegration constructor with default manager config and 30s health checks - Add SetupCarriers with AT&T, Verizon, T-Mobile DE, and Orange FR configurations - Add StartServer method with health endpoint and 30s read/write timeouts - Add StartHealthChecking wrapper for background * feat: Refactor profile handlers into modular core components with simplified operations - Split profile_handlers.go into profile_handlers_core.go, profile_handlers_management_core.go, and profile_handlers_management_delete.go - Simplify OrderProfileHandlerWithRepo with ICCID/IMSI-only validation and "downloaded" state - Remove webhook and message queue notifications from order handler - Add UpdateProfileHandler with state validation for downloaded/activated/deactivated/expired - Add DeleteProfileHandler with existence * refactor: Extract carrier setup logic into separate file and remove unnecessary comments - Move SetupCarriers method from selection_integration.go to new setup_carriers.go file - Remove redundant comments from SelectionIntegration struct and methods - Clean up inline comments in RunDemo method while preserving functionality * feat: Add intelligent carrier selection algorithm with machine learning optimization and performance tracking - Add SelectionAlgorithm with scoring, weighting, and ML-based carrier selection - Add SelectionCriteria struct with region, profile type, urgency, and cost/performance weights - Add CarrierScore with performance, reliability, cost, region, and capability scores - Add calculateWeightedScore combining all scores with ML-optimized weights - Add getWeights with urgency-based adjustments * feat: Integrate SelectionAlgorithm into SMDPManager with optimal carrier selection and learning capabilities - Add selector field to SMDPManager struct with SelectionAlgorithm type - Initialize selector in NewSMDPManager constructor - Add SelectOptimalCarrier method filtering healthy carriers and delegating to selection algorithm - Add SelectCarrier wrapper with default criteria (operational profile, medium urgency, balanced weights) - Add GetSelectionHistory method returning carrier selection history - Add UpdateLearning
192 lines
5.6 KiB
Go
192 lines
5.6 KiB
Go
package integration
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/handlers"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/repository"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/service"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/smdp"
|
|
)
|
|
|
|
type SelectionIntegration struct {
|
|
manager *smdp.SMDPManager
|
|
selectionService *service.SelectionService
|
|
selectionHandler *handlers.SelectionHandler
|
|
smdpService *service.SMDPService
|
|
server *http.Server
|
|
}
|
|
|
|
func NewSelectionIntegration(repo *repository.PostgresProfileStore) *SelectionIntegration {
|
|
// Create SMDP manager with default configuration
|
|
config := &smdp.ManagerConfig{
|
|
HealthCheckInterval: 30 * time.Second,
|
|
EnableFailover: true,
|
|
EnableLoadBalancing: true,
|
|
MaxRetries: 3,
|
|
RetryDelay: 1 * time.Second,
|
|
}
|
|
|
|
manager := smdp.NewSMDPManager(repo, config)
|
|
|
|
// Create selection service
|
|
selectionService := service.NewSelectionService(manager)
|
|
|
|
// Create SMDP service
|
|
smdpService := service.NewSMDPService(repo)
|
|
|
|
return &SelectionIntegration{
|
|
manager: manager,
|
|
selectionService: selectionService,
|
|
selectionHandler: selectionService.GetHandler(),
|
|
smdpService: smdpService,
|
|
}
|
|
}
|
|
|
|
// StartServer starts the HTTP server with all endpoints
|
|
func (si *SelectionIntegration) StartServer(port string) error {
|
|
// Create HTTP multiplexer
|
|
mux := http.NewServeMux()
|
|
|
|
// Register selection routes
|
|
si.selectionHandler.RegisterRoutes(mux)
|
|
|
|
// Add health check endpoint
|
|
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte(`{"status": "healthy", "service": "selection-integration"}`))
|
|
})
|
|
|
|
// Create and configure server
|
|
si.server = &http.Server{
|
|
Addr: ":" + port,
|
|
Handler: mux,
|
|
ReadTimeout: 30 * time.Second,
|
|
WriteTimeout: 30 * time.Second,
|
|
IdleTimeout: 120 * time.Second,
|
|
}
|
|
|
|
log.Printf("Starting selection integration server on port %s", port)
|
|
return si.server.ListenAndServe()
|
|
}
|
|
|
|
// StartHealthChecking starts the background health checking process
|
|
func (si *SelectionIntegration) StartHealthChecking(ctx context.Context) {
|
|
si.manager.StartHealthChecking(ctx)
|
|
}
|
|
|
|
// GetManager returns the SMDP manager for testing
|
|
func (si *SelectionIntegration) GetManager() *smdp.SMDPManager {
|
|
return si.manager
|
|
}
|
|
|
|
// GetSelectionService returns the selection service for testing
|
|
func (si *SelectionIntegration) GetSelectionService() *service.SelectionService {
|
|
return si.selectionService
|
|
}
|
|
|
|
// Shutdown gracefully shuts down the server
|
|
func (si *SelectionIntegration) Shutdown(ctx context.Context) error {
|
|
if si.server != nil {
|
|
return si.server.Shutdown(ctx)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (si *SelectionIntegration) RunDemo(ctx context.Context) error {
|
|
log.Println("Starting carrier selection demonstration...")
|
|
|
|
if err := si.SetupCarriers(); err != nil {
|
|
return err
|
|
}
|
|
|
|
si.StartHealthChecking(ctx)
|
|
|
|
time.Sleep(2 * time.Second)
|
|
|
|
log.Println("Demonstrating intelligent carrier selection...")
|
|
|
|
scenarios := []struct {
|
|
name string
|
|
criteria *smdp.SelectionCriteria
|
|
}{
|
|
{
|
|
name: "High Priority US Request",
|
|
criteria: &smdp.SelectionCriteria{
|
|
Region: "US",
|
|
ProfileType: "operational",
|
|
Urgency: "high",
|
|
CostSensitivity: 0.2,
|
|
PerformanceWeight: 0.6,
|
|
ReliabilityWeight: 0.6,
|
|
},
|
|
},
|
|
{
|
|
name: "Cost-Optimized European Request",
|
|
criteria: &smdp.SelectionCriteria{
|
|
Region: "DE",
|
|
ProfileType: "operational",
|
|
Urgency: "low",
|
|
CostSensitivity: 0.8,
|
|
PerformanceWeight: 0.2,
|
|
ReliabilityWeight: 0.3,
|
|
},
|
|
},
|
|
{
|
|
name: "Balanced Global Request",
|
|
criteria: &smdp.SelectionCriteria{
|
|
Region: "",
|
|
ProfileType: "operational",
|
|
Urgency: "medium",
|
|
CostSensitivity: 0.5,
|
|
PerformanceWeight: 0.4,
|
|
ReliabilityWeight: 0.4,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, scenario := range scenarios {
|
|
log.Printf("Testing scenario: %s", scenario.name)
|
|
|
|
score, err := si.manager.SelectOptimalCarrier(ctx, scenario.criteria)
|
|
if err != nil {
|
|
log.Printf("Error in scenario %s: %v", scenario.name, err)
|
|
continue
|
|
}
|
|
|
|
log.Printf("Selected carrier: %s (%s)", score.Carrier.Name, score.CarrierID)
|
|
log.Printf("Total score: %.2f", score.TotalScore)
|
|
log.Printf("Performance: %.2f, Reliability: %.2f, Cost: %.2f, Region: %.2f, Capability: %.2f",
|
|
score.PerformanceScore, score.ReliabilityScore, score.CostScore, score.RegionScore, score.CapabilityScore)
|
|
log.Printf("Reason: %s", score.Reason)
|
|
log.Println("---")
|
|
}
|
|
|
|
log.Println("Generating carrier analytics...")
|
|
analytics, err := si.selectionService.GetCarrierAnalytics(ctx)
|
|
if err != nil {
|
|
log.Printf("Error generating analytics: %v", err)
|
|
} else {
|
|
log.Printf("Analytics generated for %d carriers", analytics.TotalCarriers)
|
|
log.Printf("Overall health: %.1f%%", analytics.Summary.OverallHealth)
|
|
log.Printf("Overall success rate: %.1f%%", analytics.Summary.OverallSuccessRate)
|
|
}
|
|
|
|
log.Println("Generating optimization recommendations...")
|
|
optimization, err := si.selectionService.OptimizeCarrierSelection(ctx)
|
|
if err != nil {
|
|
log.Printf("Error generating optimization: %v", err)
|
|
} else {
|
|
log.Printf("System health: %.1f%%", optimization.OverallHealth)
|
|
log.Printf("Recommendations: %d", len(optimization.Recommendations))
|
|
log.Printf("Priority actions: %d", len(optimization.PriorityActions))
|
|
}
|
|
|
|
log.Println("Carrier selection demonstration completed successfully!")
|
|
return nil
|
|
}
|