mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-06-04 11:25:52 +08:00

* feat(license): base setup for license service * feat(license): delete old manager and import to new * feat(license): deal with features * feat(license): complete the license service in ee * feat(license): add sqlmigration for licenses * feat(license): remove feature flags * feat(license): refactor into provider pattern * feat(license): remove the ff lookup interface * feat(license): add logging to the validator functions * feat(license): implement features for OSS build * feat(license): fix the OSS build * feat(license): lets blast frontend * feat(license): fix the EE OSS build without license * feat(license): remove the hardcoded testing configs * feat(license): upgrade migration to 34 * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): better naming and structure * feat(license): integration tests * feat(license): integration tests * feat(license): refactor frontend * feat(license): make frontend api structure changes * feat(license): fix integration tests * feat(license): revert hardcoded configs * feat(license): fix integration tests * feat(license): address review comments * feat(license): address review comments * feat(license): address review comments * feat(license): address review comments * feat(license): update migration * feat(license): update migration * feat(license): update migration * feat(license): fixed logging * feat(license): use the unmarshaller for postable subscription * feat(license): correct the error message * feat(license): fix license test * feat(license): fix lint issues * feat(user): do not kill the service if upstream is down
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/SigNoz/signoz/ee/query-service/constants"
|
|
"github.com/SigNoz/signoz/ee/query-service/model"
|
|
)
|
|
|
|
type DayWiseBreakdown struct {
|
|
Type string `json:"type"`
|
|
Breakdown []DayWiseData `json:"breakdown"`
|
|
}
|
|
|
|
type DayWiseData struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
Count float64 `json:"count"`
|
|
Size float64 `json:"size"`
|
|
UnitPrice float64 `json:"unitPrice"`
|
|
Quantity float64 `json:"quantity"`
|
|
Total float64 `json:"total"`
|
|
}
|
|
|
|
type tierBreakdown struct {
|
|
UnitPrice float64 `json:"unitPrice"`
|
|
Quantity float64 `json:"quantity"`
|
|
TierStart int64 `json:"tierStart"`
|
|
TierEnd int64 `json:"tierEnd"`
|
|
TierCost float64 `json:"tierCost"`
|
|
}
|
|
|
|
type usageResponse struct {
|
|
Type string `json:"type"`
|
|
Unit string `json:"unit"`
|
|
Tiers []tierBreakdown `json:"tiers"`
|
|
DayWiseBreakdown DayWiseBreakdown `json:"dayWiseBreakdown"`
|
|
}
|
|
|
|
type details struct {
|
|
Total float64 `json:"total"`
|
|
Breakdown []usageResponse `json:"breakdown"`
|
|
BaseFee float64 `json:"baseFee"`
|
|
BillTotal float64 `json:"billTotal"`
|
|
}
|
|
|
|
type billingDetails struct {
|
|
Status string `json:"status"`
|
|
Data struct {
|
|
BillingPeriodStart int64 `json:"billingPeriodStart"`
|
|
BillingPeriodEnd int64 `json:"billingPeriodEnd"`
|
|
Details details `json:"details"`
|
|
Discount float64 `json:"discount"`
|
|
SubscriptionStatus string `json:"subscriptionStatus"`
|
|
} `json:"data"`
|
|
}
|
|
|
|
func (ah *APIHandler) getBilling(w http.ResponseWriter, r *http.Request) {
|
|
licenseKey := r.URL.Query().Get("licenseKey")
|
|
|
|
if licenseKey == "" {
|
|
RespondError(w, model.BadRequest(fmt.Errorf("license key is required")), nil)
|
|
return
|
|
}
|
|
|
|
billingURL := fmt.Sprintf("%s/usage?licenseKey=%s", constants.LicenseSignozIo, licenseKey)
|
|
|
|
hClient := &http.Client{}
|
|
req, err := http.NewRequest("GET", billingURL, nil)
|
|
if err != nil {
|
|
RespondError(w, model.InternalError(err), nil)
|
|
return
|
|
}
|
|
req.Header.Add("X-SigNoz-SecretKey", constants.LicenseAPIKey)
|
|
billingResp, err := hClient.Do(req)
|
|
if err != nil {
|
|
RespondError(w, model.InternalError(err), nil)
|
|
return
|
|
}
|
|
|
|
// decode response body
|
|
var billingResponse billingDetails
|
|
if err := json.NewDecoder(billingResp.Body).Decode(&billingResponse); err != nil {
|
|
RespondError(w, model.InternalError(err), nil)
|
|
return
|
|
}
|
|
|
|
// TODO(srikanthccv):Fetch the current day usage and add it to the response
|
|
ah.Respond(w, billingResponse.Data)
|
|
}
|