supplier

package
v0.0.0-...-e2c201e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 10, 2023 License: GPL-3.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PRODUCT_SERVER     = iota
	PRODUCT_RACK       = iota
	PRODUCT_AC         = iota
	PRODUCT_GENERATOR  = iota
	PRODUCT_DECORATION = iota
)
View Source
const (
	POWERLINE_NONE = iota
	POWERLINE_10K  = iota
	POWERLINE_50K  = iota
	POWERLINE_200K = iota
	POWERLINE_1M   = iota
)
View Source
const (
	ASSIGNED_UNASSIGNED = 0
	ASSIGNED_PHYSICAL   = 1
	ASSIGNED_VPS        = 2
)
View Source
const (
	REPUTATION_NB_MONTH = 36
)

Variables

View Source
var AvailableConfs = []ServerConfType{
	ServerConfType{
		ServerName:     "T1000",
		NbProcessors:   [2]int32{1, 2},
		NbDisks:        [2]int32{1, 2},
		NbSlotRam:      [2]int32{1, 4},
		BackplanePrice: 200,
		ServerSprite:   "tower",
		NbU:            -1,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "R100",
		NbProcessors:   [2]int32{1, 2},
		NbDisks:        [2]int32{1, 1},
		NbSlotRam:      [2]int32{1, 2},
		BackplanePrice: 1000,
		ServerSprite:   "server.1u",
		NbU:            1,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "R200",
		NbProcessors:   [2]int32{1, 2},
		NbDisks:        [2]int32{1, 4},
		NbSlotRam:      [2]int32{1, 4},
		BackplanePrice: 2000,
		ServerSprite:   "server.2u",
		NbU:            2,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "R400",
		NbProcessors:   [2]int32{1, 2},
		NbDisks:        [2]int32{1, 10},
		NbSlotRam:      [2]int32{1, 8},
		BackplanePrice: 3000,
		ServerSprite:   "server.4u",
		NbU:            4,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "R600",
		NbProcessors:   [2]int32{2, 4},
		NbDisks:        [2]int32{1, 6},
		NbSlotRam:      [2]int32{1, 8},
		BackplanePrice: 3000,
		ServerSprite:   "server.4u",
		NbU:            4,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "B100",
		NbProcessors:   [2]int32{8, 8},
		NbDisks:        [2]int32{8, 8},
		NbSlotRam:      [2]int32{32, 32},
		BackplanePrice: 6000,
		ServerSprite:   "server.blade.8u",
		NbU:            8,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "B200",
		NbProcessors:   [2]int32{16, 16},
		NbDisks:        [2]int32{8, 8},
		NbSlotRam:      [2]int32{32, 32},
		BackplanePrice: 8000,
		ServerSprite:   "server.blade.8u",
		NbU:            8,
		Scrap:          false,
	},
	ServerConfType{
		ServerName:     "scrap1U",
		NbProcessors:   [2]int32{0, 0},
		NbDisks:        [2]int32{0, 0},
		NbSlotRam:      [2]int32{0, 0},
		BackplanePrice: 0,
		ServerSprite:   "scrap.1u",
		NbU:            1,
		Scrap:          true,
	},
	ServerConfType{
		ServerName:     "scrap2U",
		NbProcessors:   [2]int32{0, 0},
		NbDisks:        [2]int32{0, 0},
		NbSlotRam:      [2]int32{0, 0},
		BackplanePrice: 0,
		ServerSprite:   "scrap.2u",
		NbU:            2,
		Scrap:          true,
	},
	ServerConfType{
		ServerName:     "scrap4U",
		NbProcessors:   [2]int32{0, 0},
		NbDisks:        [2]int32{0, 0},
		NbSlotRam:      [2]int32{0, 0},
		BackplanePrice: 0,
		ServerSprite:   "scrap.4u",
		NbU:            4,
		Scrap:          true,
	},
	ServerConfType{
		ServerName:     "scrap8U",
		NbProcessors:   [2]int32{0, 0},
		NbDisks:        [2]int32{0, 0},
		NbSlotRam:      [2]int32{0, 0},
		BackplanePrice: 0,
		ServerSprite:   "scrap.8u",
		NbU:            8,
		Scrap:          true,
	},
}
View Source
var AvailableLocation = map[string]*LocationType{
	"siliconvalley": &LocationType{
		Name:                "Mountain View",
		Metersquareprice:    30,
		Internetfailrate:    0.005,
		Electricityfailrate: 0.010,
		Temperatureaverage:  16.11,
		Electricitycost:     0.1534,
		Taxrate:             0.12,
		Bankinterestrate:    0.03,
		Xmap:                772,
		Ymap:                1431,
	},
	"newyork": &LocationType{
		Name:                "New York",
		Metersquareprice:    26,
		Internetfailrate:    0.003,
		Electricityfailrate: 0.005,
		Temperatureaverage:  12.77,
		Electricitycost:     0.13,
		Taxrate:             0.10,
		Bankinterestrate:    0.03,
		Xmap:                1228,
		Ymap:                1388,
	},
	"london": &LocationType{
		Name:                "London",
		Metersquareprice:    36,
		Internetfailrate:    0.002,
		Electricityfailrate: 0.004,
		Temperatureaverage:  10.4,
		Electricitycost:     0.22,
		Taxrate:             0.19,
		Bankinterestrate:    0.03,
		Xmap:                1933,
		Ymap:                1233,
	},
	"lulea": &LocationType{
		Name:                "Luleå",
		Metersquareprice:    1,
		Internetfailrate:    0.002,
		Electricityfailrate: 0.003,
		Temperatureaverage:  0,
		Electricitycost:     0.0833,
		Taxrate:             0.22,
		Bankinterestrate:    0.03,
		Xmap:                2146,
		Ymap:                1003,
	},
	"shanghai": &LocationType{
		Name:                "Shanghai",
		Metersquareprice:    30,
		Internetfailrate:    0.002,
		Electricityfailrate: 0.003,
		Temperatureaverage:  22,
		Electricitycost:     0.042,
		Taxrate:             0.25,
		Bankinterestrate:    0.04,
		Xmap:                3085,
		Ymap:                1500,
	},
	"sydney": &LocationType{
		Name:                "Sydney",
		Metersquareprice:    28,
		Internetfailrate:    0.002,
		Electricityfailrate: 0.003,
		Temperatureaverage:  23,
		Electricitycost:     0.23,
		Taxrate:             0.29,
		Bankinterestrate:    0.04,
		Xmap:                3369,
		Ymap:                2183,
	},
	"bangalore": &LocationType{
		Name:                "Bangalore",
		Metersquareprice:    3.4,
		Internetfailrate:    0.003,
		Electricityfailrate: 0.004,
		Temperatureaverage:  30,
		Electricitycost:     0.07,
		Taxrate:             0.08,
		Bankinterestrate:    0.04,
		Xmap:                2673,
		Ymap:                1706,
	},
	"moscow": &LocationType{
		Name:                "Moscow",
		Metersquareprice:    11,
		Internetfailrate:    0.003,
		Electricityfailrate: 0.005,
		Temperatureaverage:  9,
		Electricitycost:     0.08,
		Taxrate:             0.20,
		Bankinterestrate:    0.06,
		Xmap:                2294,
		Ymap:                1172,
	},
}
View Source
var GlobalLocation string

Functions

func GetKilowattPowerline

func GetKilowattPowerline(powerline int32) float64

func PriceTrendListSave

func PriceTrendListSave(pt PriceTrend) string

func ServerDemandParsingNumbers

func ServerDemandParsingNumbers(m map[string]interface{}) [2]int32

Types

type Actor

type Actor interface {
	GetInventory() *Inventory
	GetLedger() *accounting.Ledger
	GetName() string // "you" = player
	GetLocation() *LocationType
	GetReputationScore() float64 // 0.0 <= score <= 1.0
	GetOffers() []*ServerOffer
}

Actor -> Player or NPDatacenter

type ActorAbstract

type ActorAbstract struct {
	// contains filtered or unexported fields
}

func NewActorAbstract

func NewActorAbstract() *ActorAbstract

func (*ActorAbstract) AddOffer

func (self *ActorAbstract) AddOffer(offer *ServerOffer)

func (*ActorAbstract) GetInventory

func (actor *ActorAbstract) GetInventory() *Inventory

GetInventory is part of the Actor interface

func (*ActorAbstract) GetLedger

func (actor *ActorAbstract) GetLedger() *accounting.Ledger

GetLedger is part of the Actor interface

func (*ActorAbstract) GetLocation

func (actor *ActorAbstract) GetLocation() *LocationType

func (*ActorAbstract) GetLocationName

func (actor *ActorAbstract) GetLocationName() string

func (*ActorAbstract) GetName

func (self *ActorAbstract) GetName() string

func (*ActorAbstract) GetOffers

func (self *ActorAbstract) GetOffers() []*ServerOffer

func (*ActorAbstract) GetReputationScore

func (self *ActorAbstract) GetReputationScore() float64

GetReputationScore is part of the Actor interface. 0.0 <= score <= 1.0

func (*ActorAbstract) Init

func (actor *ActorAbstract) Init(timer *timer.GameTimer, locationname, name string)

func (*ActorAbstract) LoadOffer

func (self *ActorAbstract) LoadOffer(offer map[string]interface{})

func (*ActorAbstract) RemoveOffer

func (self *ActorAbstract) RemoveOffer(offer *ServerOffer)

type BannerWidget

type BannerWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

ad widget

func NewBannerWidget

func NewBannerWidget(width, height int32) *BannerWidget

type CartItem

type CartItem struct {
	Typeitem   int32
	Serverconf *ServerConf // if it is an PRODUCT_SERVER
	Unitprice  float64
	Nb         int32
}

type CartPageItemUi

type CartPageItemUi struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

func NewCartPageItemUi

func NewCartPageItemUi(iconasset, desc string, price float64, qty int32, totalcallback func()) *CartPageItemUi

type CartPageWidget

type CartPageWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Cart page

the cart inventory is stored into the GlobalInventory object

func NewCartPageWidget

func NewCartPageWidget(width, height int32) *CartPageWidget

func (*CartPageWidget) AddItem

func (self *CartPageWidget) AddItem(productitem int32, conf *ServerConf, unitprice float64, nb int32)

func (*CartPageWidget) DeleteItem

func (self *CartPageWidget) DeleteItem(cartitem *CartItem)

func (*CartPageWidget) Reset

func (self *CartPageWidget) Reset()

func (*CartPageWidget) SetBuyCallback

func (self *CartPageWidget) SetBuyCallback(callback func())

func (*CartPageWidget) SetGame

func (self *CartPageWidget) SetGame(inventory *Inventory)

type CriteriaFilter

type CriteriaFilter interface {
	Filter(offers []*ServerOffer) []*ServerOffer
}

func NewFilterDisk

func NewFilterDisk(i map[string]interface{}) CriteriaFilter

func NewFilterNbcores

func NewFilterNbcores(i map[string]interface{}) CriteriaFilter

func NewFilterPrice

func NewFilterPrice(i map[string]interface{}) CriteriaFilter

func NewFilterRam

func NewFilterRam(i map[string]interface{}) CriteriaFilter

func ServerDemandParsingFilters

func ServerDemandParsingFilters(m map[string]interface{}) []CriteriaFilter

type CriteriaFilterDisk

type CriteriaFilterDisk struct {
	Disksize int32
}

func (*CriteriaFilterDisk) Filter

func (self *CriteriaFilterDisk) Filter(offers []*ServerOffer) []*ServerOffer

type CriteriaFilterNbcores

type CriteriaFilterNbcores struct {
	Nbcores int32
}

func (*CriteriaFilterNbcores) Filter

func (self *CriteriaFilterNbcores) Filter(offers []*ServerOffer) []*ServerOffer

type CriteriaFilterPrice

type CriteriaFilterPrice struct {
	Price float64
}

func (*CriteriaFilterPrice) Filter

func (self *CriteriaFilterPrice) Filter(offers []*ServerOffer) []*ServerOffer

type CriteriaFilterRam

type CriteriaFilterRam struct {
	Ramsize int32
}

func (*CriteriaFilterRam) Filter

func (self *CriteriaFilterRam) Filter(offers []*ServerOffer) []*ServerOffer

type DemandInstance

type DemandInstance struct {
	Template *DemandTemplate
	Nb       map[string]int32 // number of instance per specs
}

func (*DemandInstance) FindOffer

func (self *DemandInstance) FindOffer(actors []Actor, now time.Time) (*ServerBundle, Actor)

we should check across the inventory of different competitors

and from these inventory checks across all the offers

func (*DemandInstance) ToString

func (self *DemandInstance) ToString() string

type DemandTemplate

type DemandTemplate struct {
	Specs         map[string]*ServerDemandTemplate
	Beginningdate time.Time
	Howoften      int32   // per year
	Renewalfactor float64 // per year
}

func DemandParsing

func DemandParsing(j map[string]interface{}) *DemandTemplate

DemandParsing parse a complete demand template such as

 {
		"specs": {
			"app": {
				"filters": {
					"diskfilter": { "mindisk": 40}
				},
				"priorities": {
					"price": 2,
					"disk": 1,
					"network":1,
					"reputation":1,
					"captive":2
				},
				"numbers": { "low": 1, "high": 1}
			},
			"db": {
				"filters": {
					"diskfilter": { "mindisk": 40}
				},
				"priorities": {
					"disk": 1,
					"network":1,
					"reputation":1
				},
				"numbers": { "low": 1, "high": 1}
			}
		},
		"beginningdate": "1996-12-01",
		"howoften": 40
	}

func DemandTemplateAssetLoad

func DemandTemplateAssetLoad(assetname string) *DemandTemplate

func (*DemandTemplate) InstanciateDemand

func (self *DemandTemplate) InstanciateDemand() *DemandInstance

this function is called every "howoften" per year

type HardwareServerPool

type HardwareServerPool struct {
	Name string
	// contains filtered or unexported fields
}

func NewHardwareServerPool

func NewHardwareServerPool(name string) *HardwareServerPool

func (*HardwareServerPool) AddPoolSubscriber

func (self *HardwareServerPool) AddPoolSubscriber(subscriber PoolSubscriber)

func (*HardwareServerPool) Allocate

func (self *HardwareServerPool) Allocate(nbcores, ramsize, disksize int32, vt bool) *InventoryItem

func (*HardwareServerPool) GetName

func (self *HardwareServerPool) GetName() string

func (*HardwareServerPool) HowManyFit

func (self *HardwareServerPool) HowManyFit(nbcores, ramsize, disksize int32, vt bool) int32

func (*HardwareServerPool) IsAllocated

func (self *HardwareServerPool) IsAllocated(item *InventoryItem) bool

func (*HardwareServerPool) IsInside

func (self *HardwareServerPool) IsInside(item *InventoryItem) bool

func (*HardwareServerPool) IsVps

func (self *HardwareServerPool) IsVps() bool

func (*HardwareServerPool) Release

func (self *HardwareServerPool) Release(item *InventoryItem, nbcores, ramsize, disksize int32)

func (*HardwareServerPool) RemovePoolSubscriber

func (self *HardwareServerPool) RemovePoolSubscriber(subscriber PoolSubscriber)

type Inventory

type Inventory struct {
	Cart  []*CartItem
	Items map[int32]*InventoryItem
	// contains filtered or unexported fields
}

Inventory structure owns the inventory of - InventoryItems: servers, AC, rack, generator - pools

func NewInventory

func NewInventory(globaltimer *timer.GameTimer) *Inventory

func (*Inventory) AddInventoryPoolSubscriber

func (self *Inventory) AddInventoryPoolSubscriber(subscriber InventoryPoolSubscriber)

func (*Inventory) AddInventorySubscriber

func (self *Inventory) AddInventorySubscriber(subscriber InventorySubscriber)

func (*Inventory) AddPool

func (self *Inventory) AddPool(pool ServerPool)

func (*Inventory) AddPowerStatSubscriber

func (self *Inventory) AddPowerStatSubscriber(subscriber InventoryPowerChangeSubscriber)

func (*Inventory) AddServerBundle

func (self *Inventory) AddServerBundle(bundle *ServerBundle)

func (*Inventory) AssignPool

func (self *Inventory) AssignPool(item *InventoryItem, pool ServerPool)

func (*Inventory) BuyCart

func (self *Inventory) BuyCart(buydate time.Time) []*InventoryItem

func (*Inventory) ComputeGlobalPower

func (self *Inventory) ComputeGlobalPower()

GetGlobalPower list all machines on the map and compute - the power machines consumes (positive number) - the power generator can sustain (positive number) normaly called by Inventory only

func (*Inventory) DecommissionServer

func (self *Inventory) DecommissionServer(item *InventoryItem, smoothly bool) bool

DecommissionServer try to relocate an offer on a given item to other servers. return true decomission was possible

func (*Inventory) DiscardItem

func (self *Inventory) DiscardItem(item *InventoryItem) bool

to discard an item, it must not be placed or be a scrap item

func (*Inventory) GeneratePowerlineOutage

func (self *Inventory) GeneratePowerlineOutage(probability float64) bool

PowerlineOutage is called everyday to see if we have an electricity outage return true if outage

func (*Inventory) GetDefaultPhysicalPool

func (self *Inventory) GetDefaultPhysicalPool() ServerPool

func (*Inventory) GetDefaultPoolAllocation

func (self *Inventory) GetDefaultPoolAllocation() int32

func (*Inventory) GetDefaultVpsPool

func (self *Inventory) GetDefaultVpsPool() ServerPool

func (*Inventory) GetGlobalPower

func (self *Inventory) GetGlobalPower() (consumption, generation, cooler float64)

GetGlobalPower allow to get the current consumption and generator capacity

func (*Inventory) GetHotspotValue

func (self *Inventory) GetHotspotValue(y, x int32) float64

GetHotspotValue allow to get the heat map for each tile It returns the amount of wH

func (*Inventory) GetMonthlyPowerlinesPrice

func (self *Inventory) GetMonthlyPowerlinesPrice() float64

func (*Inventory) GetPools

func (self *Inventory) GetPools() []ServerPool

func (*Inventory) GetPowerlines

func (self *Inventory) GetPowerlines() [3]int32

GetPowerlines is used to collect the current situation

func (*Inventory) GetServerBundlePerItem

func (self *Inventory) GetServerBundlePerItem(item *InventoryItem) *ServerBundle

func (*Inventory) GetServerBundles

func (self *Inventory) GetServerBundles() []*ServerBundle

func (*Inventory) InstallItem

func (self *Inventory) InstallItem(item *InventoryItem, x, y, z int32) bool

func (*Inventory) Load

func (self *Inventory) Load(conf map[string]interface{})

func (*Inventory) LoadItem

func (self *Inventory) LoadItem(product map[string]interface{})

func (*Inventory) RemoveInventorySubscriber

func (self *Inventory) RemoveInventorySubscriber(subscriber InventorySubscriber)

func (*Inventory) RemovePool

func (self *Inventory) RemovePool(pool ServerPool)

func (*Inventory) RemovePowerChangeSubscriber

func (self *Inventory) RemovePowerChangeSubscriber(subscriber InventoryPowerChangeSubscriber)

func (*Inventory) RemoveServerBundle

func (self *Inventory) RemoveServerBundle(bundle *ServerBundle)

func (*Inventory) Save

func (self *Inventory) Save() string

func (*Inventory) ScrapItem

func (self *Inventory) ScrapItem(item *InventoryItem)

ScrapItem replace a given item by a scrap part: - it decomission the server - transform the server into a scrap part

func (*Inventory) SetDefaultPoolAllocation

func (self *Inventory) SetDefaultPoolAllocation(poolallocation int32)

func (*Inventory) SetPowerline

func (self *Inventory) SetPowerline(index, power int32)

ChangePowerline is used to adjust one of the 3 main power line arrival power = [POWERLINE_NONE,POWERLINE_10K,POWERLINE_100K,POWERLINE_1M,POWERLINE_10M] we call subscribers systematically

func (*Inventory) UninstallItem

func (self *Inventory) UninstallItem(item *InventoryItem)

type InventoryItem

type InventoryItem struct {
	Id               int32
	Typeitem         int32
	Serverconf       *ServerConf // if it is a PRODUCT_SERVER
	Buydate          time.Time   // for the amortizement
	Deliverydate     time.Time   // to know when to show it
	Xplaced, Yplaced int32       // -1 if not placed (yet)
	Zplaced          int32       //only for racking servers
	Pool             ServerPool

	//allocation
	Coresallocated int32
	Ramallocated   int32 // in Mo
	Diskallocated  int32 // in Mo
}

InventoryItem is used: - to know what we have (immobilization) - where it is situated (rack) - which customer it is linked to

func (*InventoryItem) GetSprite

func (self *InventoryItem) GetSprite() string

func (*InventoryItem) HasArrived

func (self *InventoryItem) HasArrived(t time.Time) bool

HasArrived(time) is an helper method to know if a bough item arrived in the datacenter i.e. InnventoryItem.Deliverydate <= now

func (*InventoryItem) IsPlaced

func (self *InventoryItem) IsPlaced() bool

IsPlaced() is an helper method to know if a given item is on the map (in a rack or placed)

func (*InventoryItem) Save

func (self *InventoryItem) Save() string

func (*InventoryItem) ShortDescription

func (self *InventoryItem) ShortDescription(condensed bool) string

type InventoryPoolSubscriber

type InventoryPoolSubscriber interface {
	PoolCreate(ServerPool)
	PoolRemove(ServerPool)
}

type InventoryPowerChangeSubscriber

type InventoryPowerChangeSubscriber interface {
	PowerChange(time time.Time, consumed, generated, delivered, cooler float64)
}

InventoryPowerChangeSubscriber interface is used to know when the comsumption or the number of generators have changed

type InventorySubscriber

type InventorySubscriber interface {
	ItemInTransit(*InventoryItem)
	ItemInStock(*InventoryItem)
	ItemRemoveFromStock(*InventoryItem)
	ItemInstalled(*InventoryItem)
	ItemUninstalled(*InventoryItem)
	ItemChangedPool(*InventoryItem)
}

The lifecycle of an InventoryItem is item is created -> ItemInTransit item arrived -> ItemInStock item is installed/racked -> ItemRemovedFromStock + ItemInstalled item is uninstall/unracked -> ItemUninstalled + ItemInStock

type LocationType

type LocationType struct {
	Name                string
	Metersquareprice    float64 // renting price per month
	Internetfailrate    float64 // per day
	Electricityfailrate float64 // per day
	Temperatureaverage  float64 // in may?
	Electricitycost     float64 // per kwh
	Taxrate             float64
	Bankinterestrate    float64 // per year
	Xmap                int32   // x worldmap
	Ymap                int32   // y worldmap
}

type PoolManagementFilter

type PoolManagementFilter struct {
	// contains filtered or unexported fields
}

type PoolManagementLineWidget

type PoolManagementLineWidget struct {
	sws.CoreWidget
	Checkbox *sws.CheckboxWidget
	// contains filtered or unexported fields
}

func NewPoolManagementLineWidget

func NewPoolManagementLineWidget(item *InventoryItem) *PoolManagementLineWidget

func (*PoolManagementLineWidget) AddChild

func (self *PoolManagementLineWidget) AddChild(child sws.Widget)

func (*PoolManagementLineWidget) MousePressDown

func (self *PoolManagementLineWidget) MousePressDown(x, y int32, button uint8)

func (*PoolManagementLineWidget) MousePressUp

func (self *PoolManagementLineWidget) MousePressUp(x, y int32, button uint8)

func (*PoolManagementLineWidget) UpdateBgColor

func (self *PoolManagementLineWidget) UpdateBgColor()

Update the bg color depending on the pool the item belongs to

func (*PoolManagementLineWidget) UpdateStatus

func (self *PoolManagementLineWidget) UpdateStatus()

type PoolManagementWidget

type PoolManagementWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

func NewPoolManagementWidget

func NewPoolManagementWidget(root *sws.RootWidget) *PoolManagementWidget

func (*PoolManagementWidget) InventoryItemAdd

func (self *PoolManagementWidget) InventoryItemAdd(*InventoryItem)

is part of PoolSubscriber interface

func (*PoolManagementWidget) InventoryItemAllocate

func (self *PoolManagementWidget) InventoryItemAllocate(item *InventoryItem)

InventoryItemAllocate is part of PoolSubscriber interface

func (*PoolManagementWidget) InventoryItemRelease

func (self *PoolManagementWidget) InventoryItemRelease(item *InventoryItem)

InventoryItemRelease is part of PoolSubscriber interface

func (*PoolManagementWidget) InventoryItemRemove

func (self *PoolManagementWidget) InventoryItemRemove(*InventoryItem)

InventoryItemRemove is part of PoolSubscriber interface

func (*PoolManagementWidget) ItemChangedPool

func (self *PoolManagementWidget) ItemChangedPool(*InventoryItem)

func (*PoolManagementWidget) ItemInStock

func (self *PoolManagementWidget) ItemInStock(item *InventoryItem)

func (*PoolManagementWidget) ItemInTransit

func (self *PoolManagementWidget) ItemInTransit(*InventoryItem)

InventorySubscriber interface

func (*PoolManagementWidget) ItemInstalled

func (self *PoolManagementWidget) ItemInstalled(item *InventoryItem)

func (*PoolManagementWidget) ItemRemoveFromStock

func (self *PoolManagementWidget) ItemRemoveFromStock(item *InventoryItem)

func (*PoolManagementWidget) ItemUninstalled

func (self *PoolManagementWidget) ItemUninstalled(item *InventoryItem)

func (*PoolManagementWidget) Resize

func (self *PoolManagementWidget) Resize(width, height int32)

func (*PoolManagementWidget) Search

func (self *PoolManagementWidget) Search(search string)

func (*PoolManagementWidget) SelectLine

func (self *PoolManagementWidget) SelectLine(line *PoolManagementLineWidget, selected bool)

select the line, update action buttons to show

func (*PoolManagementWidget) SetGame

func (self *PoolManagementWidget) SetGame(inventory *Inventory, currenttime time.Time)

type PoolSubscriber

type PoolSubscriber interface {
	InventoryItemAdd(*InventoryItem)
	InventoryItemRemove(*InventoryItem)
	InventoryItemAllocate(*InventoryItem)
	InventoryItemRelease(*InventoryItem)
}

type PriceTrend

type PriceTrend struct {
	Trend PriceTrendList
	Noise PriceTrendList
}

func PriceTrendListLoad

func PriceTrendListLoad(noise []interface{}, trend []PriceTrendItem) PriceTrend

func (*PriceTrend) CurrentValue

func (self *PriceTrend) CurrentValue(now time.Time) float64

function to compute the price+noise for a given date

type PriceTrendItem

type PriceTrendItem struct {
	Pit   time.Time
	Value float64
}

Other type of trend: price trends (+noise):

- cpu price / core + noise.

- disk price / Go + noise.

- ram price / Go + noise.

type PriceTrendList

type PriceTrendList []PriceTrendItem

func (PriceTrendList) Len

func (self PriceTrendList) Len() int

func (PriceTrendList) Less

func (self PriceTrendList) Less(i, j int) bool

func (PriceTrendList) Sort

func (self PriceTrendList) Sort()

func (PriceTrendList) Swap

func (self PriceTrendList) Swap(i, j int)

type PriorityAbstract

type PriorityAbstract struct {
	// contains filtered or unexported fields
}

PriorityAbstract is a base class for PriorityPrice, PriorityDisk, PriorityRam, ...

type PriorityDisk

type PriorityDisk struct {
	PriorityAbstract
}

func (*PriorityDisk) Score

func (self *PriorityDisk) Score(offer []*ServerOffer, points *map[*ServerOffer]float64)

type PriorityNbcores

type PriorityNbcores struct {
	PriorityAbstract
}

func (*PriorityNbcores) Score

func (self *PriorityNbcores) Score(offer []*ServerOffer, points *map[*ServerOffer]float64)

type PriorityPoint

type PriorityPoint interface {
	// point = the bigger, the better
	Score(offer []*ServerOffer, points *map[*ServerOffer]float64)
}

func NewPriorityDisk

func NewPriorityDisk(value int32) PriorityPoint

func NewPriorityNbcores

func NewPriorityNbcores(value int32) PriorityPoint

func NewPriorityPrice

func NewPriorityPrice(value int32) PriorityPoint

func NewPriorityRam

func NewPriorityRam(value int32) PriorityPoint

func NewPriorityReputation

func NewPriorityReputation(value int32) PriorityPoint

func ServerDemandParsingPriorities

func ServerDemandParsingPriorities(m map[string]interface{}) []PriorityPoint

type PriorityPrice

type PriorityPrice struct {
	PriorityAbstract
}

func (*PriorityPrice) Score

func (self *PriorityPrice) Score(offer []*ServerOffer, points *map[*ServerOffer]float64)

type PriorityRam

type PriorityRam struct {
	PriorityAbstract
}

func (*PriorityRam) Score

func (self *PriorityRam) Score(offer []*ServerOffer, points *map[*ServerOffer]float64)

type PriorityReputation

type PriorityReputation struct {
	PriorityAbstract
}

func (*PriorityReputation) Score

func (self *PriorityReputation) Score(offer []*ServerOffer, points *map[*ServerOffer]float64)

type Reputation

type Reputation struct {
	// contains filtered or unexported fields
}

Reputation stores all positive and negative "review" and create a [0-1] score. we forget what is older than REPUTATION_NB_MONTH It means the score is only based on the last 36 months

func NewReputation

func NewReputation() *Reputation

func (*Reputation) AddReputationSubscriber

func (self *Reputation) AddReputationSubscriber(subscriber ReputationSubscriber)

func (*Reputation) GetScore

func (self *Reputation) GetScore() float64

func (*Reputation) Load

func (self *Reputation) Load(data map[string]interface{})

func (*Reputation) RecordNegativePoint

func (self *Reputation) RecordNegativePoint(time time.Time)

func (*Reputation) RecordPositivePoint

func (self *Reputation) RecordPositivePoint(time time.Time)

func (*Reputation) RemoveReputationSubscriber

func (self *Reputation) RemoveReputationSubscriber(subscriber ReputationSubscriber)

func (*Reputation) Save

func (self *Reputation) Save() string

type ReputationSubscriber

type ReputationSubscriber interface {
	NewReputationScore(t time.Time, score float64)
}

ReputationSubscriber is mainly used by the MainStatsWidget

type ServerBundle

type ServerBundle struct {
	Contracts   []*ServerContract
	Renewalrate float64
	Date        time.Time
}

func (*ServerBundle) PayMontlyFee

func (self *ServerBundle) PayMontlyFee(ledger *accounting.Ledger, t time.Time)

func (*ServerBundle) Save

func (self *ServerBundle) Save() string

type ServerConf

type ServerConf struct {
	NbProcessors int32 //chosen
	NbCore       int32 // depend on the current trend
	VtSupport    bool  // depend on the current trend
	NbDisks      int32 // chosen
	NbSlotRam    int32 // chosen
	DiskSize     int32 // 3 options: Trend.Disksize: 1,1/2,1/4
	RamSize      int32 // 4 options: Trend.Ramsize: 1,1/2,1/4,1/8
	ConfType     *ServerConfType
}

based on the different type of chassis available and the vendor(s) options, the final server conf will have these caracteristics

func (*ServerConf) PowerConsumption

func (self *ServerConf) PowerConsumption() float64

PowerConsumption return the Wh consumption

func (*ServerConf) Price

func (self *ServerConf) Price(trend *Trend, now time.Time) float64

type ServerConfType

type ServerConfType struct {
	ServerName     string
	NbProcessors   [2]int32
	NbDisks        [2]int32
	NbSlotRam      [2]int32
	BackplanePrice float64
	ServerSprite   string
	NbU            int32
	Scrap          bool
}

func GetServerConfTypeByName

func GetServerConfTypeByName(name string) *ServerConfType

type ServerContract

type ServerContract struct {
	Item      *InventoryItem
	OfferName string
	Vps       bool
	Nbcores   int32
	Ramsize   int32
	Disksize  int32
	Vt        bool    // only for non vps offer
	Price     float64 // per month
}

func (*ServerContract) Save

func (self *ServerContract) Save() string

type ServerDemandTemplate

type ServerDemandTemplate struct {
	Filters []CriteriaFilter
	// contains filtered or unexported fields
}

json: demand: {

"spec":{
 "app": {
   filters: {
     diskfilter: { mindisk: 40 // Go
     }
   },
   priorities: [ {"price": 2}, {"disk": 1}, {"network":1}, {"image":1},{"captive":2} ]
   numbers: { low: 1, high: 4} // randomly?
   },
 "db": ...
},

"beginningdate": "2000-12-01" // when this demand begins to appear "howoften": 40 // /par an (modulo la courbe de penetration du marché?) "renewalfactorperyear": 0.7 // sur 1 } }

type ServerOffer

type ServerOffer struct {
	Active   bool
	Name     string
	Actor    Actor
	Pool     ServerPool
	Vps      bool
	Nbcores  int32
	Ramsize  int32
	Disksize int32
	Vt       bool    // only for non vps offer
	Price    float64 // per month

}

func (*ServerOffer) Allocate

func (self *ServerOffer) Allocate() *InventoryItem

func (*ServerOffer) Release

func (self *ServerOffer) Release(item *InventoryItem)

func (*ServerOffer) Save

func (self *ServerOffer) Save() string

type ServerPageBladeWidget

type ServerPageBladeWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop>>Explore>>Blade servers

func NewServerPageBladeWidget

func NewServerPageBladeWidget(width, height int32) *ServerPageBladeWidget

func (*ServerPageBladeWidget) SetConfigureBlade1Callback

func (self *ServerPageBladeWidget) SetConfigureBlade1Callback(callback func())

func (*ServerPageBladeWidget) SetConfigureBlade2Callback

func (self *ServerPageBladeWidget) SetConfigureBlade2Callback(callback func())

type ServerPageConfigureWidget

type ServerPageConfigureWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop>>Explore>>xxx servers>>Configure

func NewServerPageConfigureWidget

func NewServerPageConfigureWidget(width, height int32) *ServerPageConfigureWidget

func (*ServerPageConfigureWidget) GetConf

func (self *ServerPageConfigureWidget) GetConf() *ServerConf

func (*ServerPageConfigureWidget) GetNbUnit

func (self *ServerPageConfigureWidget) GetNbUnit() int32

func (*ServerPageConfigureWidget) GetProductType

func (self *ServerPageConfigureWidget) GetProductType() int32

func (*ServerPageConfigureWidget) GetUnitPrice

func (self *ServerPageConfigureWidget) GetUnitPrice() float64

func (*ServerPageConfigureWidget) SetAddCartCallback

func (self *ServerPageConfigureWidget) SetAddCartCallback(callback func())

func (*ServerPageConfigureWidget) SetConfType

func (self *ServerPageConfigureWidget) SetConfType(trend *Trend, conftypename string, today time.Time)

func (*ServerPageConfigureWidget) SetGame

func (self *ServerPageConfigureWidget) SetGame(trend *Trend)

type ServerPageExploreWidget

type ServerPageExploreWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop>>Explore

func NewServerPageExploreWidget

func NewServerPageExploreWidget(width, height int32) *ServerPageExploreWidget

func (*ServerPageExploreWidget) SetAcCallback

func (self *ServerPageExploreWidget) SetAcCallback(callback func())

func (*ServerPageExploreWidget) SetBladeCallback

func (self *ServerPageExploreWidget) SetBladeCallback(callback func())

func (*ServerPageExploreWidget) SetGeneratorCallback

func (self *ServerPageExploreWidget) SetGeneratorCallback(callback func())

func (*ServerPageExploreWidget) SetRackCallback

func (self *ServerPageExploreWidget) SetRackCallback(callback func())

func (*ServerPageExploreWidget) SetRackServerCallback

func (self *ServerPageExploreWidget) SetRackServerCallback(callback func())

func (*ServerPageExploreWidget) SetTowerCallback

func (self *ServerPageExploreWidget) SetTowerCallback(callback func())

type ServerPageRackWidget

type ServerPageRackWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop>>Explore>>Rack servers

func NewServerPageRackWidget

func NewServerPageRackWidget(width, height int32) *ServerPageRackWidget

func (*ServerPageRackWidget) SetConfigureRack1Callback

func (self *ServerPageRackWidget) SetConfigureRack1Callback(callback func())

func (*ServerPageRackWidget) SetConfigureRack2Callback

func (self *ServerPageRackWidget) SetConfigureRack2Callback(callback func())

func (*ServerPageRackWidget) SetConfigureRack4Callback

func (self *ServerPageRackWidget) SetConfigureRack4Callback(callback func())

func (*ServerPageRackWidget) SetConfigureRack6Callback

func (self *ServerPageRackWidget) SetConfigureRack6Callback(callback func())

type ServerPageTowerWidget

type ServerPageTowerWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop>>Explore>>Tower servers

func NewServerPageTowerWidget

func NewServerPageTowerWidget(width, height int32) *ServerPageTowerWidget

func (*ServerPageTowerWidget) SetConfigureTower1Callback

func (self *ServerPageTowerWidget) SetConfigureTower1Callback(callback func())

type ServerPageWidget

type ServerPageWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Page Shop

func NewServerPageWidget

func NewServerPageWidget(width, height int32) *ServerPageWidget

func (*ServerPageWidget) SetAcCallback

func (self *ServerPageWidget) SetAcCallback(callback func())

func (*ServerPageWidget) SetBladeCallback

func (self *ServerPageWidget) SetBladeCallback(callback func())

func (*ServerPageWidget) SetGeneratorCallback

func (self *ServerPageWidget) SetGeneratorCallback(callback func())

func (*ServerPageWidget) SetRackCallback

func (self *ServerPageWidget) SetRackCallback(callback func())

func (*ServerPageWidget) SetRackServerCallback

func (self *ServerPageWidget) SetRackServerCallback(callback func())

func (*ServerPageWidget) SetTowerCallback

func (self *ServerPageWidget) SetTowerCallback(callback func())

type ServerPool

type ServerPool interface {
	GetName() string

	IsInside(item *InventoryItem) bool

	Allocate(nbcores, ramsize, disksize int32, vt bool) *InventoryItem
	IsAllocated(item *InventoryItem) bool
	Release(item *InventoryItem, nbcores, ramsize, disksize int32)
	IsVps() bool
	HowManyFit(nbcores, ramsize, disksize int32, vt bool) int32
	AddPoolSubscriber(subscriber PoolSubscriber)
	RemovePoolSubscriber(subscriber PoolSubscriber)
	// contains filtered or unexported methods
}

type SortedOffer

type SortedOffer struct {
	// contains filtered or unexported fields
}

helper structure for PriortyPoint objects

type SortedOffers

type SortedOffers []*SortedOffer

func (SortedOffers) Len

func (s SortedOffers) Len() int

func (SortedOffers) Less

func (s SortedOffers) Less(i, j int) bool

func (SortedOffers) Swap

func (s SortedOffers) Swap(i, j int)

type TrackPageItemUi

type TrackPageItemUi struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

func NewTrackPageItemUi

func NewTrackPageItemUi(asseticon, desc string, deliveryDate time.Time) *TrackPageItemUi

type TrackPageWidget

type TrackPageWidget struct {
	sws.CoreWidget
	// contains filtered or unexported fields
}

Track page

the track inventory is stored into the GlobalInventory object

func NewTrackPageWidget

func NewTrackPageWidget(width, height int32) *TrackPageWidget

func (*TrackPageWidget) ItemChangedPool

func (self *TrackPageWidget) ItemChangedPool(*InventoryItem)

func (*TrackPageWidget) ItemInStock

func (self *TrackPageWidget) ItemInStock(item *InventoryItem)

func (*TrackPageWidget) ItemInTransit

func (self *TrackPageWidget) ItemInTransit(item *InventoryItem)

func (*TrackPageWidget) ItemInstalled

func (self *TrackPageWidget) ItemInstalled(*InventoryItem)

func (*TrackPageWidget) ItemRemoveFromStock

func (self *TrackPageWidget) ItemRemoveFromStock(*InventoryItem)

func (*TrackPageWidget) ItemUninstalled

func (self *TrackPageWidget) ItemUninstalled(*InventoryItem)

func (*TrackPageWidget) SetGame

func (self *TrackPageWidget) SetGame(inventory *Inventory, currenttime time.Time)

type Trend

type Trend struct {
	Corepercpu TrendList
	Vt         TrendList
	Disksize   TrendList
	Ramsize    TrendList

	Cpuprice  PriceTrend
	Diskprice PriceTrend
	Ramprice  PriceTrend
}

global structure to store all the trends

func NewTrend

func NewTrend() *Trend

func (*Trend) Init

func (self *Trend) Init(publishservice timer.EventPublisherService, timer *timer.GameTimer)

func (*Trend) Load

func (self *Trend) Load(json map[string]interface{}, publishservice timer.EventPublisherService, timer *timer.GameTimer)

func (Trend) Save

func (self Trend) Save() string

type TrendItem

type TrendItem struct {
	Pit       time.Time
	Value     int32
	ShortDesc string
	LongDesc  string
}

We will have different trends to follow:

- number of cores/CPU.

- vt.

- disk size / plateau.

- ram size / slot.

type TrendList

type TrendList []TrendItem

func (TrendList) CurrentValue

func (self TrendList) CurrentValue(now time.Time) int32

func (TrendList) Len

func (self TrendList) Len() int

func (TrendList) Less

func (self TrendList) Less(i, j int) bool

func (TrendList) Sort

func (self TrendList) Sort()

func (TrendList) Swap

func (self TrendList) Swap(i, j int)

type VpsServerPool

type VpsServerPool struct {
	Name string
	// contains filtered or unexported fields
}

func NewVpsServerPool

func NewVpsServerPool(name string, cpuoverallocation, ramoverallocation float64) *VpsServerPool

func (*VpsServerPool) AddPoolSubscriber

func (self *VpsServerPool) AddPoolSubscriber(subscriber PoolSubscriber)

func (*VpsServerPool) Allocate

func (self *VpsServerPool) Allocate(nbcores, ramsize, disksize int32, vt bool) *InventoryItem

func (*VpsServerPool) GetName

func (self *VpsServerPool) GetName() string

func (*VpsServerPool) HowManyFit

func (self *VpsServerPool) HowManyFit(nbcores, ramsize, disksize int32, vt bool) int32

func (*VpsServerPool) IsAllocated

func (self *VpsServerPool) IsAllocated(item *InventoryItem) bool

func (*VpsServerPool) IsInside

func (self *VpsServerPool) IsInside(item *InventoryItem) bool

func (*VpsServerPool) IsVps

func (self *VpsServerPool) IsVps() bool

func (*VpsServerPool) Release

func (self *VpsServerPool) Release(item *InventoryItem, nbcores, ramsize, disksize int32)

func (*VpsServerPool) RemovePoolSubscriber

func (self *VpsServerPool) RemovePoolSubscriber(subscriber PoolSubscriber)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL