You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							326 lines
						
					
					
						
							9.8 KiB
						
					
					
				
			
		
		
	
	
							326 lines
						
					
					
						
							9.8 KiB
						
					
					
				| package bulkManager
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/go-openapi/runtime/middleware"
 | |
| 	"github.com/prometheus/client_golang/prometheus"
 | |
| 	"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/models"
 | |
| 	"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/restapi/operations/bulk_management"
 | |
| 	"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/server/dbManager"
 | |
| 	"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/server/statusManager"
 | |
| 	l "gitlab.com/cyclops-utilities/logging"
 | |
| )
 | |
| 
 | |
| // BulkManager is the struct defined to group and contain all the methods
 | |
| // that interact with the bulk subsystem.
 | |
| // Parameters:
 | |
| // - db: a DbParameter reference to be able to use the DBManager methods.
 | |
| // - monit: a StatusManager reference to be able to use the status subsystem methods.
 | |
| type BulkManager struct {
 | |
| 	db    *dbManager.DbParameter
 | |
| 	monit *statusManager.StatusManager
 | |
| }
 | |
| 
 | |
| // New is the function to create the struct BulkManager.
 | |
| // Parameters:
 | |
| // - DbParameter: reference pointing to the DbParameter that allows the interaction
 | |
| // with the DBManager methods.
 | |
| // - StatusParameter: reference poining to the StatusManager that allows the
 | |
| // interaction with the StatusManager methods.
 | |
| // Returns:
 | |
| // - BulkManager: struct to interact with BulkManager subsystem functionalities.
 | |
| func New(db *dbManager.DbParameter, monit *statusManager.StatusManager) *BulkManager {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] Generating new bulkManager.\n")
 | |
| 
 | |
| 	monit.InitEndpoint("bulk")
 | |
| 
 | |
| 	return &BulkManager{
 | |
| 		db:    db,
 | |
| 		monit: monit,
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| func (m *BulkManager) getToken(param *http.Request) (token string) {
 | |
| 
 | |
| 	if len(param.Header.Get("Authorization")) > 0 {
 | |
| 
 | |
| 		token = strings.Fields(param.Header.Get("Authorization"))[1]
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	return
 | |
| 
 | |
| }
 | |
| 
 | |
| // GenerateInvoiceForCustomer (Swagger func) is the function behind
 | |
| // GetBillRun (Swagger func) is the function behind the (GET) endpoint
 | |
| // /billrun/{id}
 | |
| // Its job is to provide the requested billruns from the system.
 | |
| func (m *BulkManager) GetBillRun(ctx context.Context, params bulk_management.GetBillRunParams) middleware.Responder {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] GetBillRun endpoint invoked.\n")
 | |
| 
 | |
| 	callTime := time.Now()
 | |
| 	m.monit.APIHit("bulk", callTime)
 | |
| 
 | |
| 	object, e := m.db.GetBillRun(params.ID)
 | |
| 
 | |
| 	if e != nil {
 | |
| 
 | |
| 		s := "Problem while retrieving the Billrun from the db: " + e.Error()
 | |
| 		errorReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "GET", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewGetBillRunInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if object != nil {
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "200", "method": "GET", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewGetBillRunOK().WithPayload(object)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	s := "The Billrun doesn't exists in the system."
 | |
| 	missingReturn := models.ErrorResponse{
 | |
| 		ErrorString: &s,
 | |
| 	}
 | |
| 
 | |
| 	m.db.Metrics["api"].With(prometheus.Labels{"code": "404", "method": "GET", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 	m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 	return bulk_management.NewGetBillRunNotFound().WithPayload(&missingReturn)
 | |
| 
 | |
| }
 | |
| 
 | |
| // ListBillRuns (Swagger func) is the function behind the (GET) endpoint
 | |
| // /billrun
 | |
| // Its job is to provide a list of all the billruns currently in the system.
 | |
| func (m *BulkManager) ListBillRuns(ctx context.Context, params bulk_management.ListBillRunsParams) middleware.Responder {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] ListBillRuns endpoint invoked.\n")
 | |
| 
 | |
| 	callTime := time.Now()
 | |
| 	m.monit.APIHit("bulk", callTime)
 | |
| 
 | |
| 	object, e := m.db.ListBillRuns(params.Months)
 | |
| 
 | |
| 	if e != nil {
 | |
| 
 | |
| 		s := "Problem while retrieving the Billruns from the db: " + e.Error()
 | |
| 		errorReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "GET", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewListBillRunsInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	m.db.Metrics["api"].With(prometheus.Labels{"code": "200", "method": "GET", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 	m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 	return bulk_management.NewListBillRunsOK().WithPayload(object)
 | |
| 
 | |
| }
 | |
| 
 | |
| // ListBillRunsByOrganization (Swagger func) is the function behind the (GET)
 | |
| // endpoint /billrun/organization/{id}
 | |
| // Its job is to provide a list of all the billruns currently in the system
 | |
| // linked to the provided organization.
 | |
| func (m *BulkManager) ListBillRunsByOrganization(ctx context.Context, params bulk_management.ListBillRunsByOrganizationParams) middleware.Responder {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] ListBillRuns endpoint invoked.\n")
 | |
| 
 | |
| 	callTime := time.Now()
 | |
| 	m.monit.APIHit("bulk", callTime)
 | |
| 
 | |
| 	token := m.getToken(params.HTTPRequest)
 | |
| 
 | |
| 	object, e := m.db.ListBillRunsByOrganization(params.ID, token, params.Months)
 | |
| 
 | |
| 	if e != nil {
 | |
| 
 | |
| 		s := "Problem while retrieving the Billruns from the db: " + e.Error()
 | |
| 		errorReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "GET", "route": "/billrun/organization/" + params.ID}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewListBillRunsByOrganizationInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	m.db.Metrics["api"].With(prometheus.Labels{"code": "200", "method": "GET", "route": "/billrun/organization/" + params.ID}).Inc()
 | |
| 
 | |
| 	m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 	return bulk_management.NewListBillRunsByOrganizationOK().WithPayload(object)
 | |
| 
 | |
| }
 | |
| 
 | |
| // ReRunAllBillRuns (Swagger func) is the function behind the (PUT) endpoint
 | |
| // ReRunAllBillRuns (Swagger func) is the function behind the (PUT) endpoint
 | |
| // /billrun
 | |
| // Its job is to re-run all the billruns currently not completed in the system.
 | |
| func (m *BulkManager) ReRunAllBillRuns(ctx context.Context, params bulk_management.ReRunAllBillRunsParams) middleware.Responder {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] ReRunAllBillRuns endpoint invoked.\n")
 | |
| 
 | |
| 	callTime := time.Now()
 | |
| 	m.monit.APIHit("bulk", callTime)
 | |
| 
 | |
| 	token := m.getToken(params.HTTPRequest)
 | |
| 
 | |
| 	state, e := m.db.ReRunBillRun("", params.Months, token)
 | |
| 
 | |
| 	if e != nil {
 | |
| 
 | |
| 		s := "Problems while trying to re-run the not finished Billruns: " + e.Error()
 | |
| 		errorReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "PUT", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunAllBillRunsInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if state == dbManager.StatusMissing {
 | |
| 
 | |
| 		s := "The Billrun doesn't exists in the system."
 | |
| 		missingReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "404", "method": "PUT", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunAllBillRunsNotFound().WithPayload(&missingReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if state == dbManager.StatusOK {
 | |
| 
 | |
| 		acceptedReturn := models.ItemCreatedResponse{
 | |
| 			Message: "The request has been added to the queue",
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "202", "method": "PUT", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunAllBillRunsAccepted().WithPayload(&acceptedReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	s := "This point shouldn't had been reached, contact Diego. Previous error: " + e.Error()
 | |
| 	errorReturn := models.ErrorResponse{
 | |
| 		ErrorString: &s,
 | |
| 	}
 | |
| 
 | |
| 	m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "PUT", "route": "/billrun"}).Inc()
 | |
| 
 | |
| 	m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 	return bulk_management.NewReRunAllBillRunsInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| }
 | |
| 
 | |
| // ReRunBillRun (Swagger func) is the function behind the (PUT) endpoint
 | |
| // /billrun/{id}
 | |
| // Its job is to rerun the provided billrun currently not completed in the system.
 | |
| func (m *BulkManager) ReRunBillRun(ctx context.Context, params bulk_management.ReRunBillRunParams) middleware.Responder {
 | |
| 
 | |
| 	l.Trace.Printf("[BulkManager] ReRunBillRun endpoint invoked.\n")
 | |
| 
 | |
| 	callTime := time.Now()
 | |
| 	m.monit.APIHit("bulk", callTime)
 | |
| 
 | |
| 	token := m.getToken(params.HTTPRequest)
 | |
| 
 | |
| 	state, e := m.db.ReRunBillRun(params.ID, nil, token)
 | |
| 
 | |
| 	if e != nil {
 | |
| 
 | |
| 		s := "Problem while trying to re-run the not finished Billrun: " + e.Error()
 | |
| 		errorReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "PUT", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunBillRunInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if state == dbManager.StatusMissing {
 | |
| 
 | |
| 		s := "The Billrun doesn't exists in the system."
 | |
| 		missingReturn := models.ErrorResponse{
 | |
| 			ErrorString: &s,
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "404", "method": "PUT", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunBillRunNotFound().WithPayload(&missingReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if state == dbManager.StatusOK {
 | |
| 
 | |
| 		acceptedReturn := models.ItemCreatedResponse{
 | |
| 			Message: "The request has been added to the queue",
 | |
| 		}
 | |
| 
 | |
| 		m.db.Metrics["api"].With(prometheus.Labels{"code": "202", "method": "PUT", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 		m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 		return bulk_management.NewReRunBillRunAccepted().WithPayload(&acceptedReturn)
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	s := "This point shouldn't had been reached, contact Diego. Previous error: " + e.Error()
 | |
| 	errorReturn := models.ErrorResponse{
 | |
| 		ErrorString: &s,
 | |
| 	}
 | |
| 
 | |
| 	m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "PUT", "route": "/billrun/" + string(params.ID)}).Inc()
 | |
| 
 | |
| 	m.monit.APIHitDone("bulk", callTime)
 | |
| 
 | |
| 	return bulk_management.NewReRunBillRunInternalServerError().WithPayload(&errorReturn)
 | |
| 
 | |
| }
 | |
| 
 |