Bug fixes
[ealt-edge.git] / mecm / mepm / applcm / broker / pkg / handlers / adapter / dbAdapter / dbAdapter.go
1 /*
2  * Copyright 2020 Huawei Technologies Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package dbAdapter
17
18 import (
19         "broker/pkg/handlers/model"
20         "github.com/jinzhu/gorm"
21         "github.com/sirupsen/logrus"
22         "os"
23 )
24
25 // DB name
26 const DbName = "applcmDB"
27
28 // Database adapter
29 type DbAdapter struct {
30         logger *logrus.Logger
31         db     *gorm.DB
32 }
33
34 func NewDbAdapter(logger *logrus.Logger) *DbAdapter {
35         return &DbAdapter{logger: logger}
36 }
37
38 // Creates database
39 func (adapter *DbAdapter) CreateDatabase() {
40         adapter.logger.Infof("creating Database...")
41
42         usrpswd := os.Getenv("MYSQL_USER") + ":" + os.Getenv("MYSQL_PASSWORD")
43         host := "@tcp(" + "dbhost" + ":3306)/"
44
45         db, err := gorm.Open("mysql", usrpswd + host)
46         if err != nil {
47                 adapter.logger.Fatalf("Database connect error", err.Error())
48         }
49
50         db.Exec("CREATE DATABASE  " + DbName)
51         db.Exec("USE applcmDB")
52         gorm.DefaultCallback.Create().Remove("mysql:set_identity_insert")
53
54         adapter.logger.Infof("Migrating models...")
55         db.AutoMigrate(&model.AppPackageInfo{})
56         db.AutoMigrate(&model.AppInstanceInfo{})
57         adapter.db = db
58 }
59
60 func (adapter *DbAdapter) InsertAppInstanceInfo(n model.AppInstanceInfo) {
61         adapter.logger.Infof("Insert App Instance Info (%v, %T)\n", n, n)
62         adapter.db.Create(&model.AppInstanceInfo{ID: n.ID, AppInstanceName: n.AppInstanceName, AppInstanceDescription: n.AppInstanceDescription,
63                 AppDID: n.AppDID, AppProvider: n.AppProvider, AppName: n.AppName, AppSoftVersion: n.AppSoftVersion, AppDVersion: n.AppDVersion, AppPkgID: n.AppPkgID, InstantiationState: n.InstantiationState})
64
65         adapter.logger.Infof("Inserting Done")
66 }
67
68 func (adapter *DbAdapter) GetAppInstanceInfo(key string) (appInstInfo model.AppInstanceInfo) {
69         adapter.logger.Infof("Get App Instance Info %s", key)
70         var appInstanceInfo model.AppInstanceInfo
71         returnVal := adapter.db.First(&appInstanceInfo, "id=?", key).Error
72         if returnVal !=  nil {
73                 return
74         }
75
76         return appInstanceInfo
77 }
78
79 func (adapter *DbAdapter) UpdateAppInstanceInfoInstStatusHostAndWorkloadId(id string, instantiationState string, host string, workloadId string) {
80         adapter.logger.Infof("update into DB (%v, %T)\n", id, instantiationState, host, workloadId)
81
82         var appInstInfo model.AppInstanceInfo
83         adapter.db.Where("id=?", id).First(&appInstInfo).Update("instantiationState", instantiationState).Update("host", host).Update("workloadID", workloadId)
84         adapter.logger.Infof("AppName: %s\nAppDID: %s\nAppInstanceDescription:%t\n\n",
85                 appInstInfo.AppName, appInstInfo.AppDID, appInstInfo.AppInstanceDescription)
86
87         adapter.logger.Infof("Update Done")
88 }
89
90 func (adapter *DbAdapter) UpdateAppInstanceInfoInstStatusAndWorkload(id string, instantiationState string, workloadId string) {
91         adapter.logger.Infof("update DB (%v, %T)\n", id, instantiationState)
92
93         var appInstInfo model.AppInstanceInfo
94         adapter.db.Where("id=?", id).First(&appInstInfo).Update("instantiationState", instantiationState).Update("workloadID", workloadId)
95         adapter.logger.Infof("AppName: %s\nAppDID: %s\nAppInstanceDescription:%t\n\n",
96                 appInstInfo.AppName, appInstInfo.AppDID, appInstInfo.AppInstanceDescription)
97         adapter.logger.Infof("Update Done")
98 }
99
100 func (adapter *DbAdapter) DeleteAppInstanceInfo(key string) {
101         adapter.db.Where("id=?", key).Delete(&model.AppInstanceInfo{})
102         adapter.logger.Infof("Delete App Instance Info: $s", key)
103 }
104
105 func (adapter *DbAdapter) InsertAppPackageInfo(n model.AppPackageInfo) {
106         adapter.logger.Infof("Insert App Package Info (%v, %T)\n", n, n)
107         adapter.db.Create(&model.AppPackageInfo{ID: n.ID, AppDID: n.AppDID, AppProvider: n.AppProvider,
108                 AppName: n.AppName, AppSoftwareVersion: n.AppSoftwareVersion, AppDVersion: n.AppDVersion,
109                 OnboardingState: n.OnboardingState, DeployType: n.DeployType, AppPackage: n.AppPackage})
110         adapter.logger.Infof("Inserting done")
111 }
112
113 func (adapter *DbAdapter) GetAppPackageInfo(key string) (appPackageInfo model.AppPackageInfo) {
114         adapter.logger.Infof("Get App Package Info: %s", key)
115         var appPkgInfo model.AppPackageInfo
116         err := adapter.db.First(&appPkgInfo, "id=?", key).Error
117         if err !=  nil {
118                 return
119         }
120         return appPkgInfo
121 }
122
123 func (adapter *DbAdapter) DeleteAppPackageInfo(key string) {
124         adapter.logger.Infof("Delete App Package Info: %s", key)
125         adapter.db.Where("id=?", key).Delete(&model.AppPackageInfo{})
126         adapter.logger.Infof("Delete App Package Info: $s", key)
127 }