From 4ad32401fdea91d15309be6c9599b15397237030 Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 10 Feb 2025 13:04:13 +0100 Subject: [PATCH] add purchase resource in model catalog --- models/resources/compute.go | 18 +++++++++++------ models/resources/data.go | 15 ++++++++++++-- models/resources/priced_resource.go | 31 +++++++++++++---------------- models/resources/storage.go | 16 +++++++++++---- 4 files changed, 51 insertions(+), 29 deletions(-) diff --git a/models/resources/compute.go b/models/resources/compute.go index 3042637..071aaf4 100644 --- a/models/resources/compute.go +++ b/models/resources/compute.go @@ -2,7 +2,6 @@ package resources import ( "errors" - "fmt" "strings" "time" @@ -139,14 +138,21 @@ func (r *PricedComputeResource) GetType() tools.DataType { } func (r *PricedComputeResource) GetPrice() (float64, error) { - fmt.Println("GetPrice", r.UsageStart, r.UsageEnd) - if r.UsageStart == nil || r.UsageEnd == nil { - return 0, errors.New("usage start and end must be set") + now := time.Now() + if r.UsageStart == nil { + r.UsageStart = &now } - if r.SelectedPricing == nil { - return 0, errors.New("selected pricing must be set") + if r.UsageEnd == nil { + add := r.UsageStart.Add(time.Duration(1 * time.Hour)) + r.UsageEnd = &add } pricing := *r.SelectedPricing + if pricing == nil { + if len(r.PricingProfiles) == 0 { + return 0, errors.New("pricing profile must be set") + } + pricing = r.PricingProfiles[0] + } price := float64(0) for _, l := range []map[string]float64{r.CPUsLocated, r.GPUsLocated} { for model, amountOfData := range l { diff --git a/models/resources/data.go b/models/resources/data.go index 058c08a..2b1636d 100644 --- a/models/resources/data.go +++ b/models/resources/data.go @@ -152,13 +152,24 @@ func (r *PricedDataResource) GetType() tools.DataType { func (r *PricedDataResource) GetPrice() (float64, error) { fmt.Println("GetPrice", r.UsageStart, r.UsageEnd) - if r.UsageStart == nil || r.UsageEnd == nil { - return 0, errors.New("usage start and end must be set") + now := time.Now() + if r.UsageStart == nil { + r.UsageStart = &now + } + if r.UsageEnd == nil { + add := r.UsageStart.Add(time.Duration(1 * time.Hour)) + r.UsageEnd = &add } if r.SelectedPricing == nil { return 0, errors.New("selected pricing must be set") } pricing := *r.SelectedPricing + if pricing == nil { + if len(r.PricingProfiles) == 0 { + return 0, errors.New("pricing profile must be set") + } + pricing = r.PricingProfiles[0] + } var err error amountOfData := float64(1) if pricing.GetOverrideStrategyValue() >= 0 { diff --git a/models/resources/priced_resource.go b/models/resources/priced_resource.go index d9a9471..4184d68 100644 --- a/models/resources/priced_resource.go +++ b/models/resources/priced_resource.go @@ -35,18 +35,6 @@ func (abs *PricedResource) GetCreatorID() string { return abs.CreatorID } -func (abs *PricedResource) SetStartUsage(start time.Time) { - if abs.UsageStart == nil { - abs.UsageStart = &start - } -} - -func (abs *PricedResource) SetEndUsage(end time.Time) { - if abs.UsageEnd == nil { - abs.UsageEnd = &end - } -} - func (abs *PricedResource) IsPurchased() bool { if abs.SelectedPricing == nil { return false @@ -86,11 +74,20 @@ func (abs *PricedResource) GetExplicitDurationInS() float64 { func (r *PricedResource) GetPrice() (float64, error) { fmt.Println("GetPrice", r.UsageStart, r.UsageEnd) - if r.UsageStart == nil || r.UsageEnd == nil { - return 0, errors.New("usage start and end must be set") + now := time.Now() + if r.UsageStart == nil { + r.UsageStart = &now } - if r.SelectedPricing == nil { - return 0, errors.New("selected pricing must be set") + if r.UsageEnd == nil { + add := r.UsageStart.Add(time.Duration(1 * time.Hour)) + r.UsageEnd = &add } - return (*r.SelectedPricing).GetPrice(1, 0, *r.UsageStart, *r.UsageEnd) + pricing := *r.SelectedPricing + if pricing == nil { + if len(r.PricingProfiles) == 0 { + return 0, errors.New("pricing profile must be set") + } + pricing = r.PricingProfiles[0] + } + return pricing.GetPrice(1, 0, *r.UsageStart, *r.UsageEnd) } diff --git a/models/resources/storage.go b/models/resources/storage.go index 3ecac88..02212ed 100644 --- a/models/resources/storage.go +++ b/models/resources/storage.go @@ -163,13 +163,21 @@ func (r *PricedStorageResource) GetType() tools.DataType { func (r *PricedStorageResource) GetPrice() (float64, error) { fmt.Println("GetPrice", r.UsageStart, r.UsageEnd) - if r.UsageStart == nil || r.UsageEnd == nil { - return 0, errors.New("usage start and end must be set") + now := time.Now() + if r.UsageStart == nil { + r.UsageStart = &now } - if r.SelectedPricing == nil { - return 0, errors.New("selected pricing must be set") + if r.UsageEnd == nil { + add := r.UsageStart.Add(time.Duration(1 * time.Hour)) + r.UsageEnd = &add } pricing := *r.SelectedPricing + if pricing == nil { + if len(r.PricingProfiles) == 0 { + return 0, errors.New("pricing profile must be set") + } + pricing = r.PricingProfiles[0] + } var err error amountOfData := float64(1) if pricing.GetOverrideStrategyValue() >= 0 {