From 86f9a01b8ecfa2d3a825d12150b046f6b220e534 Mon Sep 17 00:00:00 2001 From: Manfred Touron Date: Sat, 9 Apr 2016 01:29:54 +0200 Subject: [PATCH 1/3] Add new models pricing (#293) --- pkg/pricing/basket_test.go | 16 +++++++++------- pkg/pricing/pricing.go | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/pkg/pricing/basket_test.go b/pkg/pricing/basket_test.go index fbe71d9de2..5b831a39cf 100644 --- a/pkg/pricing/basket_test.go +++ b/pkg/pricing/basket_test.go @@ -64,26 +64,28 @@ func TestBasket_Total(t *testing.T) { basket.Add(NewUsageByPath("/compute/c2s/run")) basket.Add(NewUsageByPath("/compute/c2m/run")) basket.Add(NewUsageByPath("/compute/c2l/run")) - basket.Add(NewUsageByPath("/compute/vc1/run")) + basket.Add(NewUsageByPath("/compute/vc1s/run")) + basket.Add(NewUsageByPath("/compute/vc1m/run")) + basket.Add(NewUsageByPath("/compute/vc1l/run")) basket.SetDuration(1 * time.Minute) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(100, 1000)) // 0.1 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(116, 1000)) // 0.116 basket.SetDuration(1 * time.Hour) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(100, 1000)) // 0.1 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(116, 1000)) // 0.116 basket.SetDuration(2 * time.Hour) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(200, 1000)) // 0.2 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(232, 1000)) // 0.232 basket.SetDuration(24 * time.Hour) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(2400, 1000)) // 2.4 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(2784, 1000)) // 2.784 basket.SetDuration(30 * 24 * time.Hour) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(50000, 1000)) // 50 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(58000, 1000)) // 58 // FIXME: this test if false, the capacity is per month basket.SetDuration(365 * 24 * time.Hour) - So(basket.Total(), ShouldEqualBigRat, big.NewRat(50000, 1000)) // 40 + So(basket.Total(), ShouldEqualBigRat, big.NewRat(58000, 1000)) // 58 }) Convey("1 compute instance with 2 volumes and 1 ip", func() { basket := NewBasket() diff --git a/pkg/pricing/pricing.go b/pkg/pricing/pricing.go index 01639ddfe5..fb98f07ff1 100644 --- a/pkg/pricing/pricing.go +++ b/pkg/pricing/pricing.go @@ -64,7 +64,7 @@ func init() { UsageGranularity: time.Minute, }, { - Path: "/compute/vc1/run", + Path: "/compute/vc1s/run", Identifier: "cccccccc-6ab1-4131-a35e-000000000001", Currency: "EUR", UnitPrice: big.NewRat(2, 1000), // 0.002 @@ -72,6 +72,24 @@ func init() { UnitPriceCap: big.NewRat(1000, 1000), // 1 UsageGranularity: time.Minute, }, + { + Path: "/compute/vc1m/run", + Identifier: "cccccccc-6ab1-4131-a35e-000000000002", + Currency: "EUR", + UnitPrice: big.NewRat(6, 1000), // 0.006 + UnitQuantity: big.NewRat(60000, 1000), // 60 + UnitPriceCap: big.NewRat(3000, 1000), // 3 + UsageGranularity: time.Minute, + }, + { + Path: "/compute/vc1l/run", + Identifier: "cccccccc-6ab1-4131-a35e-000000000003", + Currency: "EUR", + UnitPrice: big.NewRat(10, 1000), // 0.01 + UnitQuantity: big.NewRat(60000, 1000), // 60 + UnitPriceCap: big.NewRat(5000, 1000), // 5 + UsageGranularity: time.Minute, + }, { Path: "/ip/dynamic", Identifier: "467116bf-4631-49fb-905b-e07701c21111", From 31261ffcb0db54605841c923bd65b74c75b9ea9e Mon Sep 17 00:00:00 2001 From: Manfred Touron Date: Sat, 9 Apr 2016 01:32:47 +0200 Subject: [PATCH 2/3] Using dynamic commercial type for 'scw _billing' (#293) --- pkg/cli/x_billing.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/cli/x_billing.go b/pkg/cli/x_billing.go index e9085fad44..af2e8d5886 100644 --- a/pkg/cli/x_billing.go +++ b/pkg/cli/x_billing.go @@ -7,6 +7,7 @@ package cli import ( "fmt" "math/big" + "strings" "text/tabwriter" "time" @@ -75,17 +76,18 @@ func runBilling(cmd *Command, rawArgs []string) error { if server.State != "running" { continue } + commercialType := strings.ToLower(server.CommercialType) shortID := utils.TruncIf(server.Identifier, 8, !args.NoTrunc) shortName := utils.TruncIf(utils.Wordify(server.Name), 25, !args.NoTrunc) modificationTime, _ := time.Parse("2006-01-02T15:04:05.000000+00:00", server.ModificationDate) modificationAgo := time.Now().UTC().Sub(modificationTime) shortModificationDate := units.HumanDuration(modificationAgo) - usage := pricing.NewUsageByPath("/compute/c1/run") + usage := pricing.NewUsageByPath(fmt.Sprintf("/compute/%s/run", commercialType)) usage.SetStartEnd(modificationTime, time.Now().UTC()) totalMonthPrice = totalMonthPrice.Add(totalMonthPrice, usage.Total()) - fmt.Fprintf(w, "server/%s\t%s\t%s\t%s\n", shortID, shortName, shortModificationDate, usage.TotalString()) + fmt.Fprintf(w, "server/%s/%s\t%s\t%s\t%s\n", commercialType, shortID, shortName, shortModificationDate, usage.TotalString()) } fmt.Fprintf(w, "TOTAL\t\t\t%s\n", pricing.PriceString(totalMonthPrice, "EUR")) From a2c30b361c32f95e59ec00099e53bacda2e6b73a Mon Sep 17 00:00:00 2001 From: Manfred Touron Date: Sat, 9 Apr 2016 01:33:16 +0200 Subject: [PATCH 3/3] Update Changelog --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index af8e42f64c..2b9dfe3547 100644 --- a/README.md +++ b/README.md @@ -1191,6 +1191,7 @@ $ scw inspect myserver | jq '.[0].public_ip.address' * Add `ScalewayIPV6Definition` * Add marketplace alias in the cache to resolve image ([#330](https://github.com/scaleway/scaleway-cli/issues/330)) * `scw _userdata` handles `@~/path/to/file` ([#321](https://github.com/scaleway/scaleway-cli/issues/321)) +* Update `scw _billing` for new instance types ([#293](https://github.com/scaleway/scaleway-cli/issues/293)) View full [commits list](https://github.com/scaleway/scaleway-cli/compare/v1.9.0...master)