improved UML documentation
This commit is contained in:
parent
57438ed215
commit
590a5070e9
35
README.md
35
README.md
@ -63,4 +63,37 @@ This script should be updated to be ran from anywhere.
|
|||||||
|
|
||||||
# More documentation
|
# More documentation
|
||||||
|
|
||||||
[Visit the docs/ directory](/docs/)
|
[Visit the docs/ directory](/docs/)
|
||||||
|
|
||||||
|
## UML
|
||||||
|
|
||||||
|
We are currently using [goplantuml](https://github.com/jfeliu007/goplantuml/) to generate the oject diagrams directly from the go files. This tools creates `.plums` files directly from the directory where the go files are located. These UML files can then be visualized using plantuml and the VS Code extensions plantuml.
|
||||||
|
|
||||||
|
**Setting up the plantuml environment** :
|
||||||
|
|
||||||
|
```
|
||||||
|
# Downloading the go tool goplantuml
|
||||||
|
go get github.com/jfeliu007/goplantuml/parser
|
||||||
|
go install github.com/jfeliu007/goplantuml/cmd/goplantuml@latest
|
||||||
|
|
||||||
|
# Install the plantuml environment
|
||||||
|
sudo apt install default-jre
|
||||||
|
sudo apt install plantuml
|
||||||
|
|
||||||
|
```
|
||||||
|
**Rich PlantUML extension Link**: https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml or search it in the marketplace panel of VS Code
|
||||||
|
|
||||||
|
**Generate and view an UML diagram**
|
||||||
|
|
||||||
|
```
|
||||||
|
goplantuml path/to/code/directory > path/to/dest/file.puml
|
||||||
|
```
|
||||||
|
|
||||||
|
- open the .puml file generated
|
||||||
|
- alt + d to have the extension preview the plantUML code
|
||||||
|
- right click inside the .puml and select 'Export Current Diagram' to create an image file
|
||||||
|
- the output will be generated in a `out/` directory in the current path
|
||||||
|
|
||||||
|
### Note
|
||||||
|
|
||||||
|
Only `.puml` files ought to be commited to the git repository, because their nature allows to track changes, while image file do not fit the purpose of versioning.
|
77
docs/UML/plantuml/diagram_object_controllers.puml
Normal file
77
docs/UML/plantuml/diagram_object_controllers.puml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
@startuml
|
||||||
|
namespace controllers {
|
||||||
|
class ComputingController << (S,Aquamarine) >> {
|
||||||
|
+ GetOneComputing(ID string)
|
||||||
|
+ PostComputing(body models.ComputingNEWModel)
|
||||||
|
+ GetMultipleComputing(IDs []string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class DataController << (S,Aquamarine) >> {
|
||||||
|
+ GetOneData(ID string)
|
||||||
|
+ GetMultipleData(IDs []string)
|
||||||
|
+ PostData(body models.DataNEWModel)
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterController << (S,Aquamarine) >> {
|
||||||
|
+ GetMultipleDatacenter(IDs []string)
|
||||||
|
+ GetOneDatacenter(ID string)
|
||||||
|
+ PostDatacenter(body models.DatacenterNEWModel)
|
||||||
|
|
||||||
|
}
|
||||||
|
class ScheduleController << (S,Aquamarine) >> {
|
||||||
|
+ CreateSchedule(dcName string, workflowName string, cron string, duration uint, startDate time.Time, stopDate time.Time, requirements models.ExecutionRequirementsModel)
|
||||||
|
+ CheckSchedule(cron string, duration uint, startDate time.Time, stopDate time.Time, requirements models.ExecutionRequirementsModel)
|
||||||
|
+ GetSchedules(startDate time.Time, stopDate time.Time)
|
||||||
|
+ GetNextSchedules(baseDate time.Time)
|
||||||
|
+ GetPreviousSchedules(baseDate time.Time)
|
||||||
|
|
||||||
|
}
|
||||||
|
class SearchController << (S,Aquamarine) >> {
|
||||||
|
+ FindByWord(word string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class StorageController << (S,Aquamarine) >> {
|
||||||
|
+ GetOneStorage(ID string)
|
||||||
|
+ GetMultipleStorage(IDs []string)
|
||||||
|
+ PostStorage(body models.StorageNEWModel)
|
||||||
|
|
||||||
|
}
|
||||||
|
class UserController << (S,Aquamarine) >> {
|
||||||
|
+ Login()
|
||||||
|
+ Logout()
|
||||||
|
|
||||||
|
}
|
||||||
|
class WorkflowController << (S,Aquamarine) >> {
|
||||||
|
+ CreateWorkflow(workflowName string)
|
||||||
|
+ ListWorkflows()
|
||||||
|
+ GetWorkflow(workflowName string)
|
||||||
|
+ AddElementWorkflow(workflowName string, rID string)
|
||||||
|
+ MxGraphParser(workflowName string, xmlData string)
|
||||||
|
+ MxGraphParserConsume(workflowName string)
|
||||||
|
+ LinkElementsWorkflow(workflowName string, rObjIDsource string, rObjIDtarger string, isInput bool)
|
||||||
|
+ GetWorkflowSchedule(workflowName string)
|
||||||
|
+ SetWorkflowSchedule(workflowName string, cronString string, events string, isService bool, startDate time.Time, stopDate time.Time, duration uint)
|
||||||
|
+ CheckWorkflowSchedule(workflowName string)
|
||||||
|
+ BookWorkflowSchedule(workflowName string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class WorkspaceController << (S,Aquamarine) >> {
|
||||||
|
+ AddModel(id string, rtype string)
|
||||||
|
+ ListWorkspace()
|
||||||
|
+ ListWorkspaceModel()
|
||||||
|
+ DeleteElement(id string, rtype string)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"web.Controller" *-- "controllers.ComputingController"
|
||||||
|
"web.Controller" *-- "controllers.DataController"
|
||||||
|
"web.Controller" *-- "controllers.DatacenterController"
|
||||||
|
"web.Controller" *-- "controllers.ScheduleController"
|
||||||
|
"web.Controller" *-- "controllers.SearchController"
|
||||||
|
"web.Controller" *-- "controllers.StorageController"
|
||||||
|
"web.Controller" *-- "controllers.UserController"
|
||||||
|
"web.Controller" *-- "controllers.WorkflowController"
|
||||||
|
"web.Controller" *-- "controllers.WorkspaceController"
|
||||||
|
|
||||||
|
|
||||||
|
@enduml
|
347
docs/UML/plantuml/diagram_object_models.puml
Normal file
347
docs/UML/plantuml/diagram_object_models.puml
Normal file
@ -0,0 +1,347 @@
|
|||||||
|
@startuml
|
||||||
|
namespace models {
|
||||||
|
class ComputingModel << (S,Aquamarine) >> {
|
||||||
|
+ ID string
|
||||||
|
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() string
|
||||||
|
|
||||||
|
+ AddUserInput(inputs <font color=blue>map</font>[string]<font color=blue>interface</font>{})
|
||||||
|
|
||||||
|
}
|
||||||
|
class ComputingNEWModel << (S,Aquamarine) >> {
|
||||||
|
+ Name string
|
||||||
|
+ Description string
|
||||||
|
+ ShortDescription string
|
||||||
|
+ Logo string
|
||||||
|
+ Type string
|
||||||
|
+ Owner string
|
||||||
|
+ License string
|
||||||
|
+ Price uint
|
||||||
|
+ ExecutionRequirements ExecutionRequirementsModel
|
||||||
|
+ Dinputs []string
|
||||||
|
+ Doutputs []string
|
||||||
|
+ Image string
|
||||||
|
+ Command string
|
||||||
|
+ Arguments []string
|
||||||
|
+ Environment []string
|
||||||
|
+ Ports []string
|
||||||
|
|
||||||
|
}
|
||||||
|
class ComputingObject << (S,Aquamarine) >> {
|
||||||
|
+ ReferenceID primitive.ObjectID
|
||||||
|
+ Inputs []string
|
||||||
|
+ Outputs []string
|
||||||
|
+ DataCenterID string
|
||||||
|
|
||||||
|
- getHost() *string
|
||||||
|
- setReference(rID primitive.ObjectID)
|
||||||
|
- getReference() primitive.ObjectID
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getModel() (ResourceModel, error)
|
||||||
|
- getName() *string
|
||||||
|
- isLinked(rObjID string) LinkingState
|
||||||
|
- addLink(direction LinkingState, rID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class DCstatus << (S,Aquamarine) >> {
|
||||||
|
+ DCname string
|
||||||
|
+ DCobjID string
|
||||||
|
+ IsReachable bool
|
||||||
|
+ IsAvailable bool
|
||||||
|
+ Booked *ScheduleInfo
|
||||||
|
+ ErrorMessage string
|
||||||
|
|
||||||
|
}
|
||||||
|
class DataIO << (S,Aquamarine) >> {
|
||||||
|
+ Counter uint
|
||||||
|
|
||||||
|
}
|
||||||
|
class DataModel << (S,Aquamarine) >> {
|
||||||
|
+ ID string
|
||||||
|
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() string
|
||||||
|
|
||||||
|
}
|
||||||
|
class DataNEWModel << (S,Aquamarine) >> {
|
||||||
|
+ Name string
|
||||||
|
+ Description string
|
||||||
|
+ ShortDescription string
|
||||||
|
+ Logo string
|
||||||
|
+ Dtype string
|
||||||
|
+ Type string
|
||||||
|
+ Example string
|
||||||
|
+ Protocol []string
|
||||||
|
+ Location string
|
||||||
|
|
||||||
|
}
|
||||||
|
class DataObject << (S,Aquamarine) >> {
|
||||||
|
+ ReferenceID primitive.ObjectID
|
||||||
|
|
||||||
|
- getHost() *string
|
||||||
|
- getModel() (ResourceModel, error)
|
||||||
|
- setReference(rID primitive.ObjectID)
|
||||||
|
- getReference() primitive.ObjectID
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() *string
|
||||||
|
- isLinked(rID string) LinkingState
|
||||||
|
- addLink(direction LinkingState, rObjID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterCpuModel << (S,Aquamarine) >> {
|
||||||
|
+ Cores uint
|
||||||
|
+ Architecture string
|
||||||
|
+ Shared bool
|
||||||
|
+ MinimumMemory uint
|
||||||
|
+ Platform string
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterGpuModel << (S,Aquamarine) >> {
|
||||||
|
+ CudaCores uint
|
||||||
|
+ Model string
|
||||||
|
+ Memory uint
|
||||||
|
+ TensorCores uint
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterMemoryModel << (S,Aquamarine) >> {
|
||||||
|
+ Size uint
|
||||||
|
+ Ecc bool
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterModel << (S,Aquamarine) >> {
|
||||||
|
+ ID string
|
||||||
|
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() string
|
||||||
|
|
||||||
|
+ GetTotalCPUs() uint
|
||||||
|
+ GetTotalGPUs() uint
|
||||||
|
+ GetTotalRAM() uint
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterNEWModel << (S,Aquamarine) >> {
|
||||||
|
+ Name string
|
||||||
|
+ Type string
|
||||||
|
+ Acronym string
|
||||||
|
+ Hosts []string
|
||||||
|
+ Description string
|
||||||
|
+ ShortDescription string
|
||||||
|
+ Logo string
|
||||||
|
+ CPU DatacenterCpuModel
|
||||||
|
+ RAM DatacenterMemoryModel
|
||||||
|
+ GPU []DatacenterGpuModel
|
||||||
|
+ Owner string
|
||||||
|
+ BookingPrice int
|
||||||
|
|
||||||
|
}
|
||||||
|
class DatacenterObject << (S,Aquamarine) >> {
|
||||||
|
+ ReferenceID primitive.ObjectID
|
||||||
|
|
||||||
|
- setReference(rID primitive.ObjectID)
|
||||||
|
- getModel() (ResourceModel, error)
|
||||||
|
- getReference() primitive.ObjectID
|
||||||
|
- getHost() *string
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() *string
|
||||||
|
- isLinked(rID string) LinkingState
|
||||||
|
- addLink(direction LinkingState, rObjID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class ExecutionRequirementsModel << (S,Aquamarine) >> {
|
||||||
|
+ CPUs uint
|
||||||
|
+ GPUs uint
|
||||||
|
+ RAM uint
|
||||||
|
+ Parallel bool
|
||||||
|
+ ScalingModel uint
|
||||||
|
+ DiskIO string
|
||||||
|
|
||||||
|
}
|
||||||
|
class MxCell << (S,Aquamarine) >> {
|
||||||
|
+ XMLName xml.Name
|
||||||
|
+ ID string
|
||||||
|
+ Parent *string
|
||||||
|
+ RID *string
|
||||||
|
+ Source *string
|
||||||
|
+ Target *string
|
||||||
|
|
||||||
|
}
|
||||||
|
class MxGraphModel << (S,Aquamarine) >> {
|
||||||
|
+ XMLName xml.Name
|
||||||
|
+ Root <font color=blue>struct</font>{xml.Name, []MxCell, *[]Object}
|
||||||
|
|
||||||
|
}
|
||||||
|
class Object << (S,Aquamarine) >> {
|
||||||
|
+ XMLName xml.Name
|
||||||
|
+ ID string
|
||||||
|
+ Command *string
|
||||||
|
+ Args *string
|
||||||
|
+ Env *string
|
||||||
|
+ MxCell MxCell
|
||||||
|
|
||||||
|
}
|
||||||
|
class RepositoryModel << (S,Aquamarine) >> {
|
||||||
|
+ Credentials string
|
||||||
|
+ Url string
|
||||||
|
|
||||||
|
}
|
||||||
|
interface ResourceModel {
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() string
|
||||||
|
|
||||||
|
}
|
||||||
|
interface ResourceObject {
|
||||||
|
- getHost() *string
|
||||||
|
- getName() *string
|
||||||
|
- getModel() (ResourceModel, error)
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- setReference(rObjID primitive.ObjectID)
|
||||||
|
- getReference() primitive.ObjectID
|
||||||
|
- isLinked(rObjID string) LinkingState
|
||||||
|
- addLink(direction LinkingState, rObjID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class ScheduleDB << (S,Aquamarine) >> {
|
||||||
|
+ StartDate time.Time
|
||||||
|
+ StopDate time.Time
|
||||||
|
+ Workflow string
|
||||||
|
+ ResourceQty ExecutionRequirementsModel
|
||||||
|
|
||||||
|
}
|
||||||
|
class ScheduleInfo << (S,Aquamarine) >> {
|
||||||
|
+ Total int
|
||||||
|
+ NextExecutions []string
|
||||||
|
|
||||||
|
}
|
||||||
|
class SearchResult << (S,Aquamarine) >> {
|
||||||
|
+ Computing []ComputingModel
|
||||||
|
+ Datacenter []DatacenterModel
|
||||||
|
+ Storage []StorageModel
|
||||||
|
+ Data []DataModel
|
||||||
|
|
||||||
|
}
|
||||||
|
class StorageModel << (S,Aquamarine) >> {
|
||||||
|
+ ID string
|
||||||
|
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() string
|
||||||
|
|
||||||
|
+ AddUserInput(inputs <font color=blue>map</font>[string]<font color=blue>interface</font>{})
|
||||||
|
|
||||||
|
}
|
||||||
|
class StorageNEWModel << (S,Aquamarine) >> {
|
||||||
|
+ Name string
|
||||||
|
+ Description string
|
||||||
|
+ ShortDescription string
|
||||||
|
+ Logo string
|
||||||
|
+ Type string
|
||||||
|
+ DCacronym string
|
||||||
|
+ URL string
|
||||||
|
+ Size uint
|
||||||
|
+ Encryption bool
|
||||||
|
+ Redundancy string
|
||||||
|
+ Throughput string
|
||||||
|
+ BookingPrice uint
|
||||||
|
|
||||||
|
}
|
||||||
|
class StorageObject << (S,Aquamarine) >> {
|
||||||
|
+ ReferenceID primitive.ObjectID
|
||||||
|
+ Inputs []string
|
||||||
|
+ Outputs []string
|
||||||
|
|
||||||
|
- getHost() *string
|
||||||
|
- getModel() (ResourceModel, error)
|
||||||
|
- setReference(rID primitive.ObjectID)
|
||||||
|
- getReference() primitive.ObjectID
|
||||||
|
- getRtype() rtype.Rtype
|
||||||
|
- getName() *string
|
||||||
|
- isLinked(rObjID string) LinkingState
|
||||||
|
- addLink(direction LinkingState, rObjID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class UserModel << (S,Aquamarine) >> {
|
||||||
|
+ ID string
|
||||||
|
+ Username string
|
||||||
|
+ Password string
|
||||||
|
+ Email string
|
||||||
|
|
||||||
|
}
|
||||||
|
class Workflow << (S,Aquamarine) >> {
|
||||||
|
+ Data <font color=blue>map</font>[string]DataObject
|
||||||
|
+ Computing <font color=blue>map</font>[string]ComputingObject
|
||||||
|
+ Storage <font color=blue>map</font>[string]StorageObject
|
||||||
|
+ Datacenter <font color=blue>map</font>[string]DatacenterObject
|
||||||
|
+ Schedules WorkflowSchedule
|
||||||
|
+ MxgraphXML string
|
||||||
|
|
||||||
|
+ GetExecutionRequirements(dcIDobj string) (ExecutionRequirementsModel, error)
|
||||||
|
+ GetResource(rObjID *string) ResourceObject
|
||||||
|
+ GetResourceMapByRtype(rt rtype.Rtype) <font color=blue>interface</font>{}
|
||||||
|
+ CreateResourceObject(rt rtype.Rtype) ResourceObject
|
||||||
|
+ AddObj(robj ResourceObject) *primitive.ObjectID
|
||||||
|
+ UpdateDB(userID string, workflowName string) error
|
||||||
|
+ UpdateObj(robj ResourceObject, objID string)
|
||||||
|
|
||||||
|
}
|
||||||
|
class WorkflowSchedule << (S,Aquamarine) >> {
|
||||||
|
+ IsService bool
|
||||||
|
+ StartDate time.Time
|
||||||
|
+ StopDate time.Time
|
||||||
|
+ Cron string
|
||||||
|
+ Duration uint
|
||||||
|
+ Events string
|
||||||
|
+ IsBooked bool
|
||||||
|
|
||||||
|
}
|
||||||
|
class Workspace << (S,Aquamarine) >> {
|
||||||
|
+ UserID string
|
||||||
|
+ Workflows <font color=blue>map</font>[string]Workflow
|
||||||
|
+ Data []string
|
||||||
|
+ Computing []string
|
||||||
|
+ Datacenter []string
|
||||||
|
+ Storage []string
|
||||||
|
|
||||||
|
- getRtype(rID string) rtype.Rtype
|
||||||
|
- updateDB() error
|
||||||
|
|
||||||
|
+ ConsumeMxGraphModel(xmlmodel MxGraphModel) (*Workflow, error, []error)
|
||||||
|
+ GetResources() <font color=blue>map</font>[rtype.Rtype][]string
|
||||||
|
+ GetWorkflow(workflowName string) *Workflow
|
||||||
|
+ GetWorkflows() []string
|
||||||
|
+ NewResource(rID string, rType string) error
|
||||||
|
+ GetAllWorkspacesProjects() <font color=blue>chan</font> *Workflow
|
||||||
|
|
||||||
|
}
|
||||||
|
class WorkspaceModel << (S,Aquamarine) >> {
|
||||||
|
+ UserID string
|
||||||
|
+ Data []DataModel
|
||||||
|
+ Computing []ComputingModel
|
||||||
|
+ Datacenter []DatacenterModel
|
||||||
|
+ Storage []StorageModel
|
||||||
|
|
||||||
|
}
|
||||||
|
class models.LinkingState << (T, #FF7700) >> {
|
||||||
|
}
|
||||||
|
class mxissue << (S,Aquamarine) >> {
|
||||||
|
- msg string
|
||||||
|
|
||||||
|
+ Error() string
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"models.ComputingNEWModel" *-- "models.ComputingModel"
|
||||||
|
"models.DataNEWModel" *-- "models.DataModel"
|
||||||
|
"models.DatacenterNEWModel" *-- "models.DatacenterModel"
|
||||||
|
"models.StorageNEWModel" *-- "models.StorageModel"
|
||||||
|
|
||||||
|
"models.ResourceModel" <|-- "models.ComputingModel"
|
||||||
|
"models.ResourceObject" <|-- "models.ComputingObject"
|
||||||
|
"models.ResourceModel" <|-- "models.DataModel"
|
||||||
|
"models.ResourceObject" <|-- "models.DataObject"
|
||||||
|
"models.ResourceModel" <|-- "models.DatacenterModel"
|
||||||
|
"models.ResourceObject" <|-- "models.DatacenterObject"
|
||||||
|
"models.ResourceModel" <|-- "models.StorageModel"
|
||||||
|
"models.ResourceObject" <|-- "models.StorageObject"
|
||||||
|
|
||||||
|
"__builtin__.uint" #.. "models.LinkingState"
|
||||||
|
@enduml
|
Loading…
Reference in New Issue
Block a user