104 lines
4.1 KiB
Markdown
104 lines
4.1 KiB
Markdown
# oc-lib
|
|
|
|
oc-lib allows read/write/search operations into the main OpenCloud databases.
|
|
|
|
It also provides common initialization and configuration utilities for all OpenCloud components
|
|
|
|
## Usage example in a beego API
|
|
|
|
```go
|
|
const appname = "oc-mycomponent"
|
|
|
|
func main() {
|
|
// Init the oc-lib
|
|
oclib.Init(appname)
|
|
|
|
// Load the right config file
|
|
|
|
/* The configuration loader will load the configuration from the following sources:
|
|
* - the environment variables with the prefix OCAPPNAME_ - ex: OCMYCOMPONENT_MONGOURL
|
|
* - the file /etc/oc/appname.json - ex: /etc/oc/mycomponent.json
|
|
* - the file ./appname.json - ex: ./mycomponent.json
|
|
* The configuration loader will merge the configuration from the different sources
|
|
* The configuration loader will give priority to the environment variables
|
|
* The configuration loader will give priority to the local file over the default file
|
|
*/
|
|
o := oclib.GetConfLoader()
|
|
|
|
// init the local config object
|
|
models.GetConfig().Port = o.GetIntDefault("port", 8080)
|
|
models.GetConfig().LokiUrl = o.GetStringDefault("lokiurl", "")
|
|
models.GetConfig().LogLevel = o.GetStringDefault("loglevel", "info")
|
|
models.GetConfig().MongoUrl = o.GetStringDefault("mongourl", "mongodb://127.0.0.1:27017")
|
|
models.GetConfig().MongoDatabase = o.GetStringDefault("mongodatabase", "myDb")
|
|
models.GetConfig().NatsUrl = o.GetStringDefault("natsurl", "nats://localhost:4222")
|
|
|
|
models.GetConfig().mycomponentparam1 = o.GetStringDefault("mycomponentparam1", "mycomponentdefault1")
|
|
models.GetConfig().mycomponentparam2 = o.GetStringDefault("mycomponentparam2", "mycomponentdefault2")
|
|
|
|
// feed the library with the loaded config,
|
|
// this will also initialize a logger available via oclib.GetLogger()
|
|
oclib.SetConfig(
|
|
models.GetConfig().MongoUrl
|
|
models.GetConfig().MongoDatabase
|
|
models.GetConfig().NatsUrl
|
|
models.GetConfig().LokiUrl
|
|
models.GetConfig().LogLevel
|
|
)
|
|
|
|
// Beego init
|
|
beego.BConfig.AppName = appname
|
|
beego.BConfig.Listen.HTTPPort = models.GetConfig().Port
|
|
beego.BConfig.WebConfig.DirectoryIndex = true
|
|
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
|
|
|
|
beego.Run()
|
|
}
|
|
```
|
|
|
|
## SPECIAL FLOWS IN OC-LIB RESUME :
|
|
|
|
### WORKFLOW AS ITS OWN WORKSPACE
|
|
|
|
A workflow on post, put, delete, manage a workspace with resources.
|
|
This workspace is deeply related to workflow by sharing its naming such as : "<workflow_name>_worspace"
|
|
|
|
### WORKFLOW GENERATE ITS OWN EXECUTION
|
|
|
|
A workflow on post, put, delete, with a schedule && schedule_active to "true", must manage execution by adding, deleting execution
|
|
depending on change (update -> involved delete into add)
|
|
|
|
If schedule_active is set to "false" execution will be deleted.
|
|
|
|
### WORKFLOW GENERATE ITS OWN BOOKING ON PEERS
|
|
|
|
A workflow on post, put, delete, with a schedule && schedule_active to "true", must manage booking by adding, deleting execution
|
|
with http requests on peers
|
|
depending on change (update -> involved delete into add)
|
|
|
|
If schedule_active is set to "false" booking will be deleted.
|
|
|
|
### SHARED WORKSPACE : WORSPACE & WORKFLOW
|
|
|
|
You can create a share workspace with workspace & workflow.
|
|
When a share workspace is post, put, delete it update workspace or workflow <shared> field.
|
|
Workspace can be shared on one share workspace
|
|
Workflow can be shared in multiple workspace
|
|
|
|
### SHARED WORKSPACE SHARE TO PEER
|
|
|
|
When writing a shared workspace, it set up to date on peers involved in shared workspace
|
|
It create or delete shared workspace in remote peers by http requests on oc-shared (update -> involved delete into add)
|
|
|
|
It create or delete workspace involved in shared workspace by http requests on oc-workspace (update -> involved delete into add)
|
|
It create or delete workflow involved in shared workspace by http requests on oc-workflow (update -> involved delete into add)
|
|
|
|
### WORKFLOW WRITE BUT SHARED
|
|
|
|
On delete & update & post, workflow will send to peer in <shared> field by http request on oc-workflow
|
|
|
|
### WORKSPACE WRITE BUT SHARED
|
|
|
|
On delete & update & post, workspace will send to peer in <shared> field by http request on oc-workspace
|
|
|