Skip to content

Commit afb53dc

Browse files
bietkulsiddharthlatest
authored andcommitted
fix(billing): hosted arc (#41)
* fix: arc_hosted billing * fix: serious billing issue with time_validity * feat: add ingnoreBillingMiddleware flag * fix: revert acc_api * fix: minor fixes * fix: minor changes
1 parent 9c937e4 commit afb53dc

4 files changed

Lines changed: 23 additions & 11 deletions

File tree

Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ ENV HOSTED_BILLING="${HOSTED_BILLING}"
1313
ARG CLUSTER_BILLING=false
1414
ENV CLUSTER_BILLING="${CLUSTER_BILLING}"
1515

16+
# Run `--build-arg IGNORE_BILLING_MIDDLEWARE=true` to disable billing middleware for testing
17+
ARG IGNORE_BILLING_MIDDLEWARE=false
18+
ENV IGNORE_BILLING_MIDDLEWARE="${IGNORE_BILLING_MIDDLEWARE}"
19+
1620
# Run `--build-arg PLAN_REFRESH_INTERVAL=X` to change the default interval of 1 hour, where 'X' is an integer represent the hours unit
1721
ARG PLAN_REFRESH_INTERVAL=1
1822
ENV PLAN_REFRESH_INTERVAL="${PLAN_REFRESH_INTERVAL}"

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ PLUGIN_MAIN_LOC_FUNC=plugins/$(1)/main/$(1).$(2)
99
PLUGIN_LOC_FUNC=$(foreach PLUGIN,$(PLUGINS),$(call PLUGIN_MAIN_LOC_FUNC,$(PLUGIN),$(1)))
1010

1111
cmd: plugins
12-
$(GC) -ldflags "-X main.Billing=$(BILLING) -X main.HostedBilling=$(HOSTED_BILLING) -X main.ClusterBilling=$(CLUSTER_BILLING) -X main.PlanRefreshInterval=$(PLAN_REFRESH_INTERVAL)" -o $(BUILD_DIR)/arc main.go
12+
$(GC) -ldflags "-X main.Billing=$(BILLING) -X main.HostedBilling=$(HOSTED_BILLING) -X main.ClusterBilling=$(CLUSTER_BILLING) -X main.PlanRefreshInterval=$(PLAN_REFRESH_INTERVAL) -X main.IgnoreBillingMiddleware=$(IGNORE_BILLING_MIDDLEWARE)" -o $(BUILD_DIR)/arc main.go
1313

1414
plugins: $(call PLUGIN_LOC_FUNC,so)
1515

main.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ var (
4343
HostedBilling string
4444
// ClusterBilling is a build time flag
4545
ClusterBilling string
46+
// IgnoreBillingMiddleware ignores the billing middleware
47+
IgnoreBillingMiddleware string
4648
)
4749

4850
func init() {
@@ -103,22 +105,28 @@ func main() {
103105
cronjob := cron.New()
104106
cronjob.AddFunc(interval, util.ReportUsage)
105107
cronjob.Start()
106-
router.Use(util.BillingMiddleware)
108+
if IgnoreBillingMiddleware != "true" {
109+
router.Use(util.BillingMiddleware)
110+
}
107111
} else if HostedBilling == "true" {
108112
log.Println("You're running Arc with hosted billing module enabled.")
109113
util.ReportHostedArcUsage()
110114
cronjob := cron.New()
111115
cronjob.AddFunc(interval, util.ReportHostedArcUsage)
112116
cronjob.Start()
113-
router.Use(util.BillingMiddleware)
117+
if IgnoreBillingMiddleware != "true" {
118+
router.Use(util.BillingMiddleware)
119+
}
114120
} else if ClusterBilling == "true" {
115121
log.Println("You're running Arc with cluster billing module enabled.")
116122
util.SetClusterPlan()
117123
// refresh plan
118124
cronjob := cron.New()
119125
cronjob.AddFunc(interval, util.SetClusterPlan)
120126
cronjob.Start()
121-
router.Use(util.BillingMiddleware)
127+
if IgnoreBillingMiddleware != "true" {
128+
router.Use(util.BillingMiddleware)
129+
}
122130
} else {
123131
log.Println("You're running Arc with billing module disabled.")
124132
}

util/billing.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func BillingMiddleware(next http.Handler) http.Handler {
105105
log.Println("current time validity value: ", TimeValidity)
106106
if TimeValidity > 0 { // Valid plan
107107
next.ServeHTTP(w, r)
108-
} else if TimeValidity <= 0 && TimeValidity < -3600*MaxErrorTime { // Negative validity, plan has been expired
108+
} else if TimeValidity <= 0 && -TimeValidity < 3600*MaxErrorTime { // Negative validity, plan has been expired
109109
// Print warning message if remaining time is less than max allowed time
110110
log.Println("Warning: Payment is required. Arc will start sending out error messages in next", MaxErrorTime, "hours")
111111
next.ServeHTTP(w, r)
@@ -192,12 +192,12 @@ func getArcClusterInstance(clusterID string) (ArcInstance, error) {
192192
return arcInstance, err
193193
}
194194
if len(response.ArcInstances) != 0 {
195-
arcInstanceByID := getArcInstanceByID(clusterID, response.ArcInstances)
196-
arcInstance.SubscriptionID = arcInstanceByID.SubscriptionID
197-
TimeValidity = arcInstanceByID.TimeValidity
198-
Tier = arcInstanceByID.Tier
199-
FeatureCustomEvents = arcInstanceByID.FeatureCustomEvents
200-
FeatureSuggestions = arcInstanceByID.FeatureSuggestions
195+
arcInstanceDetails := response.ArcInstances[0]
196+
arcInstance.SubscriptionID = arcInstanceDetails.SubscriptionID
197+
TimeValidity = arcInstanceDetails.TimeValidity
198+
Tier = arcInstanceDetails.Tier
199+
FeatureCustomEvents = arcInstanceDetails.FeatureCustomEvents
200+
FeatureSuggestions = arcInstanceDetails.FeatureSuggestions
201201
} else {
202202
return arcInstance, errors.New("No valid instance found for the provided CLUSTER_ID")
203203
}

0 commit comments

Comments
 (0)