66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package datacenter
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 
 | |
| 	resources "cloud.o-forge.io/core/oc-lib/models/resources"
 | |
| 	"cloud.o-forge.io/core/oc-lib/models/utils"
 | |
| )
 | |
| 
 | |
| type DatacenterResource struct {
 | |
| 	resources.AbstractResource
 | |
| 	Owner        string `bson:"owner" json:"owner" required:"true"`
 | |
| 	BookingPrice int    `bson:"booking_price" json:"booking_price" required:"true"`
 | |
| 
 | |
| 	CPU DatacenterCpuModel    `bson:"cpu,omitempty" json:"cpu,omitempty"`
 | |
| 	RAM DatacenterMemoryModel `bson:"ram,omitempty" json:"ram,omitempty"`
 | |
| 	GPU []DatacenterGpuModel  `bson:"gpu,omitempty" json:"gpu,omitempty"`
 | |
| }
 | |
| 
 | |
| type DatacenterCpuModel struct {
 | |
| 	Cores         uint   `bson:"cores,omitempty" json:"cores,omitempty"`               //TODO: validate
 | |
| 	Architecture  string `bson:"architecture,omitempty" json:"architecture,omitempty"` //TOOD: enum
 | |
| 	Shared        bool   `bson:"shared,omitempty" json:"shared,omitempty"`
 | |
| 	MinimumMemory uint   `bson:"minimum_memory,omitempty" json:"minimum_memory,omitempty"`
 | |
| 	Platform      string `bson:"platform,omitempty" json:"platform,omitempty"`
 | |
| }
 | |
| 
 | |
| type DatacenterMemoryModel struct {
 | |
| 	Size uint `bson:"size,omitempty" json:"size,omitempty" description:"Units in MB"`
 | |
| 	Ecc  bool `bson:"ecc,omitempty" json:"ecc,omitempty"`
 | |
| }
 | |
| 
 | |
| type DatacenterGpuModel struct {
 | |
| 	CudaCores   uint   `bson:"cuda_cores,omitempty" json:"cuda_cores,omitempty"`
 | |
| 	Model       string `bson:"model,omitempty" json:"model,omitempty"`
 | |
| 	Memory      uint   `bson:"memory,omitempty" json:"memory,omitempty" description:"Units in MB"`
 | |
| 	TensorCores uint   `bson:"tensor_cores,omitempty" json:"tensor_cores,omitempty"`
 | |
| }
 | |
| 
 | |
| func (dma *DatacenterResource) Deserialize(j map[string]interface{}) utils.DBObject {
 | |
| 	b, err := json.Marshal(j)
 | |
| 	if err != nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 	json.Unmarshal(b, dma)
 | |
| 	dma.AbstractResource.ObjDeserialize(j)
 | |
| 	return dma
 | |
| }
 | |
| 
 | |
| func (dma *DatacenterResource) Serialize() map[string]interface{} {
 | |
| 	var m map[string]interface{}
 | |
| 	b, err := json.Marshal(dma)
 | |
| 	if err != nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 	json.Unmarshal(b, dma)
 | |
| 	dma.AbstractResource.ObjSerialize()
 | |
| 	return m
 | |
| }
 | |
| 
 | |
| func (d *DatacenterResource) GetAccessor() utils.Accessor {
 | |
| 	data := &DatacenterMongoAccessor{}
 | |
| 	data.SetLogger(utils.DATACENTER_RESOURCE)
 | |
| 	return data
 | |
| }
 |