github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/devicetwin/dtclient/deviceattr_db.go (about) 1 package dtclient 2 3 import ( 4 "k8s.io/klog" 5 6 "github.com/kubeedge/kubeedge/edge/pkg/common/dbm" 7 ) 8 9 //DeviceAttr the struct of device attributes 10 type DeviceAttr struct { 11 ID int64 `orm:"column(id);size(64);auto;pk"` 12 DeviceID string `orm:"column(deviceid); null; type(text)"` 13 Name string `orm:"column(name);null;type(text)"` 14 Description string `orm:"column(description);null;type(text)"` 15 Value string `orm:"column(value);null;type(text)"` 16 Optional bool `orm:"column(optional);null;type(integer)"` 17 AttrType string `orm:"column(attr_type);null;type(text)"` 18 Metadata string `orm:"column(metadata);null;type(text)"` 19 } 20 21 //SaveDeviceAttr save device attributes 22 func SaveDeviceAttr(doc *DeviceAttr) error { 23 num, err := dbm.DBAccess.Insert(doc) 24 klog.V(4).Infof("Insert affected Num: %d, %s", num, err) 25 return err 26 } 27 28 //DeleteDeviceAttrByDeviceID delete device attr 29 func DeleteDeviceAttrByDeviceID(deviceID string) error { 30 num, err := dbm.DBAccess.QueryTable(DeviceAttrTableName).Filter("deviceid", deviceID).Delete() 31 if err != nil { 32 klog.Errorf("Something wrong when deleting data: %v", err) 33 return err 34 } 35 klog.V(4).Infof("Delete affected Num: %d", num) 36 return nil 37 } 38 39 //DeleteDeviceAttr delete device attr 40 func DeleteDeviceAttr(deviceID string, name string) error { 41 num, err := dbm.DBAccess.QueryTable(DeviceAttrTableName).Filter("deviceid", deviceID).Filter("name", name).Delete() 42 if err != nil { 43 klog.Errorf("Something wrong when deleting data: %v", err) 44 return err 45 } 46 klog.V(4).Infof("Delete affected Num: %d", num) 47 return nil 48 } 49 50 // UpdateDeviceAttrField update special field 51 func UpdateDeviceAttrField(deviceID string, name string, col string, value interface{}) error { 52 num, err := dbm.DBAccess.QueryTable(DeviceAttrTableName).Filter("deviceid", deviceID).Filter("name", name).Update(map[string]interface{}{col: value}) 53 klog.V(4).Infof("Update affected Num: %d, %s", num, err) 54 return err 55 } 56 57 // UpdateDeviceAttrFields update special fields 58 func UpdateDeviceAttrFields(deviceID string, name string, cols map[string]interface{}) error { 59 num, err := dbm.DBAccess.QueryTable(DeviceAttrTableName).Filter("deviceid", deviceID).Filter("name", name).Update(cols) 60 klog.V(4).Infof("Update affected Num: %d, %s", num, err) 61 return err 62 } 63 64 // QueryDeviceAttr query Device 65 func QueryDeviceAttr(key string, condition string) (*[]DeviceAttr, error) { 66 attrs := new([]DeviceAttr) 67 _, err := dbm.DBAccess.QueryTable(DeviceAttrTableName).Filter(key, condition).All(attrs) 68 if err != nil { 69 return nil, err 70 } 71 return attrs, nil 72 73 } 74 75 //DeviceDelete the struct for deleting device 76 type DeviceDelete struct { 77 DeviceID string 78 Name string 79 } 80 81 //DeviceAttrUpdate the struct for updating device attr 82 type DeviceAttrUpdate struct { 83 DeviceID string 84 Name string 85 Cols map[string]interface{} 86 } 87 88 //UpdateDeviceAttrMulti update device attr multi 89 func UpdateDeviceAttrMulti(updates []DeviceAttrUpdate) error { 90 var err error 91 for _, update := range updates { 92 err = UpdateDeviceAttrFields(update.DeviceID, update.Name, update.Cols) 93 if err != nil { 94 return err 95 } 96 } 97 return nil 98 } 99 100 //DeviceAttrTrans transaction of device attr 101 func DeviceAttrTrans(adds []DeviceAttr, deletes []DeviceDelete, updates []DeviceAttrUpdate) error { 102 var err error 103 obm := dbm.DBAccess 104 obm.Begin() 105 for _, add := range adds { 106 err = SaveDeviceAttr(&add) 107 if err != nil { 108 obm.Rollback() 109 return err 110 } 111 } 112 113 for _, delete := range deletes { 114 err = DeleteDeviceAttr(delete.DeviceID, delete.Name) 115 if err != nil { 116 obm.Rollback() 117 return err 118 } 119 } 120 121 for _, update := range updates { 122 err = UpdateDeviceAttrFields(update.DeviceID, update.Name, update.Cols) 123 if err != nil { 124 obm.Rollback() 125 return err 126 } 127 } 128 obm.Commit() 129 return nil 130 }