Some 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         "fmt"
21         "github.com/jinzhu/gorm"
22         _ "github.com/jinzhu/gorm/dialects/postgres"
23         "github.com/sirupsen/logrus"
24         "os"
25 )
26
27 var (
28         username = os.Getenv("POSTGRES_USER")
29         password = os.Getenv("POSTGRES_PASSWORD")
30         dbName = os.Getenv("POSTGRES_DATABASE")
31         dbHost = os.Getenv("DBHOST")
32
33 )
34
35 // Database adapter
36 type DbAdapter struct {
37         logger *logrus.Logger
38         db     *gorm.DB
39 }
40
41 func NewDbAdapter(logger *logrus.Logger) *DbAdapter {
42         return &DbAdapter{logger: logger}
43 }
44
45 // Creates database
46 func (adapter *DbAdapter) CreateDatabase() {
47         adapter.logger.Infof("creating Database...")
48
49         dbUri := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s", dbHost, username, dbName, password) //Build connection string
50
51         conn, err := gorm.Open("postgres", dbUri)
52         if err != nil {
53                 fmt.Print(err)
54         }
55
56         db := conn
57         db.AutoMigrate(&model.AppPackageInfo{})
58         db.AutoMigrate(&model.AppInstanceInfo{})
59         adapter.db = db
60 }
61
62 func (adapter *DbAdapter) InsertAppInstanceInfo(n model.AppInstanceInfo) {
63         adapter.logger.Infof("Insert App Instance Info (%v, %T)\n", n, n)
64         adapter.db.Create(&model.AppInstanceInfo{ID: n.ID, AppInstanceName: n.AppInstanceName, AppInstanceDescription: n.AppInstanceDescription,
65                 AppDID: n.AppDID, AppProvider: n.AppProvider, AppName: n.AppName, AppSoftVersion: n.AppSoftVersion, AppDVersion: n.AppDVersion, AppPkgID: n.AppPkgID, InstantiationState: n.InstantiationState})
66
67         adapter.logger.Infof("Inserting Done")
68 }
69
70 func (adapter *DbAdapter) GetAppInstanceInfo(key string) (appInstInfo model.AppInstanceInfo) {
71         adapter.logger.Infof("Get App Instance Info %s", key)
72         var appInstanceInfo model.AppInstanceInfo
73         returnVal := adapter.db.First(&appInstanceInfo, "id=?", key).Error
74         if returnVal != nil {
75                 return
76         }
77
78         return appInstanceInfo
79 }
80
81 func (adapter *DbAdapter) UpdateAppInstanceInfoInstStatusHostAndWorkloadId(id string, instantiationState string, host string, workloadId string) {
82         adapter.logger.Infof("update into DB (%v, %T)\n", id, instantiationState, host, workloadId)
83
84         var appInstInfo model.AppInstanceInfo
85         adapter.db.Where("id=?", id).First(&appInstInfo).Update("instantiationState", instantiationState).Update("host", host).Update("workloadID", workloadId)
86         adapter.logger.Infof("AppName: %s\nAppDID: %s\nAppInstanceDescription:%t\n\n",
87                 appInstInfo.AppName, appInstInfo.AppDID, appInstInfo.AppInstanceDescription)
88
89         adapter.logger.Infof("Update Done")
90 }
91
92 func (adapter *DbAdapter) UpdateAppInstanceInfoInstStatusAndWorkload(id string, instantiationState string, workloadId string) {
93         adapter.logger.Infof("update DB (%v, %T)\n", id, instantiationState)
94
95         var appInstInfo model.AppInstanceInfo
96         adapter.db.Where("id=?", id).First(&appInstInfo).Update("instantiationState", instantiationState).Update("workloadID", workloadId)
97         adapter.logger.Infof("AppName: %s\nAppDID: %s\nAppInstanceDescription:%t\n\n",
98                 appInstInfo.AppName, appInstInfo.AppDID, appInstInfo.AppInstanceDescription)
99         adapter.logger.Infof("Update Done")
100 }
101
102 func (adapter *DbAdapter) DeleteAppInstanceInfo(key string) {
103         adapter.db.Where("id=?", key).Delete(&model.AppInstanceInfo{})
104         adapter.logger.Infof("Delete App Instance Info: $s", key)
105 }
106
107 func (adapter *DbAdapter) InsertAppPackageInfo(n model.AppPackageInfo) {
108         adapter.logger.Infof("Insert App Package Info (%v, %T)\n", n, n)
109         adapter.db.Create(&model.AppPackageInfo{ID: n.ID, AppDID: n.AppDID, AppProvider: n.AppProvider,
110                 AppName: n.AppName, AppSoftwareVersion: n.AppSoftwareVersion, AppDVersion: n.AppDVersion,
111                 OnboardingState: n.OnboardingState, DeployType: n.DeployType, AppPackage: n.AppPackage})
112         adapter.logger.Infof("Inserting done")
113 }
114
115 func (adapter *DbAdapter) GetAppPackageInfo(key string) (appPackageInfo model.AppPackageInfo) {
116         adapter.logger.Infof("Get App Package Info: %s", key)
117         var appPkgInfo model.AppPackageInfo
118         err := adapter.db.First(&appPkgInfo, "id=?", key).Error
119         if err != nil {
120                 return
121         }
122         return appPkgInfo
123 }
124
125 func (adapter *DbAdapter) DeleteAppPackageInfo(key string) {
126         adapter.logger.Infof("Delete App Package Info: %s", key)
127         adapter.db.Where("id=?", key).Delete(&model.AppPackageInfo{})
128         adapter.logger.Infof("Delete App Package Info: $s", key)
129 }