# 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 : "_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 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 field by http request on oc-workflow ### WORKSPACE WRITE BUT SHARED On delete & update & post, workspace will send to peer in field by http request on oc-workspace