github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/devicetwin/dtclient/device_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 //Device the struct of device 10 type Device struct { 11 ID string `orm:"column(id); size(64); pk"` 12 Name string `orm:"column(name); null; type(text)"` 13 Description string `orm:"column(description); null; type(text)"` 14 State string `orm:"column(state); null; type(text)"` 15 LastOnline string `orm:"column(last_online); null; type(text)"` 16 } 17 18 //SaveDevice save device 19 func SaveDevice(doc *Device) error { 20 num, err := dbm.DBAccess.Insert(doc) 21 klog.V(4).Infof("Insert affected Num: %d, %v", num, err) 22 return err 23 } 24 25 //DeleteDeviceByID delete device by id 26 func DeleteDeviceByID(id string) error { 27 num, err := dbm.DBAccess.QueryTable(DeviceTableName).Filter("id", id).Delete() 28 if err != nil { 29 klog.Errorf("Something wrong when deleting data: %v", err) 30 return err 31 } 32 klog.V(4).Infof("Delete affected Num: %d", num) 33 return nil 34 } 35 36 // UpdateDeviceField update special field 37 func UpdateDeviceField(deviceID string, col string, value interface{}) error { 38 num, err := dbm.DBAccess.QueryTable(DeviceTableName).Filter("id", deviceID).Update(map[string]interface{}{col: value}) 39 klog.V(4).Infof("Update affected Num: %d, %s", num, err) 40 return err 41 } 42 43 // UpdateDeviceFields update special fields 44 func UpdateDeviceFields(deviceID string, cols map[string]interface{}) error { 45 num, err := dbm.DBAccess.QueryTable(DeviceTableName).Filter("id", deviceID).Update(cols) 46 klog.V(4).Infof("Update affected Num: %d, %s", num, err) 47 return err 48 } 49 50 // QueryDevice query Device 51 func QueryDevice(key string, condition string) (*[]Device, error) { 52 devices := new([]Device) 53 _, err := dbm.DBAccess.QueryTable(DeviceTableName).Filter(key, condition).All(devices) 54 if err != nil { 55 return nil, err 56 } 57 return devices, nil 58 59 } 60 61 // QueryDeviceAll query twin 62 func QueryDeviceAll() (*[]Device, error) { 63 devices := new([]Device) 64 _, err := dbm.DBAccess.QueryTable(DeviceTableName).All(devices) 65 if err != nil { 66 return nil, err 67 } 68 return devices, nil 69 70 } 71 72 //DeviceUpdate the struct for updating device 73 type DeviceUpdate struct { 74 DeviceID string 75 Cols map[string]interface{} 76 } 77 78 //UpdateDeviceMulti update device multi 79 func UpdateDeviceMulti(updates []DeviceUpdate) error { 80 var err error 81 for _, update := range updates { 82 err = UpdateDeviceFields(update.DeviceID, update.Cols) 83 if err != nil { 84 return err 85 } 86 } 87 return nil 88 } 89 90 //AddDeviceTrans the transaction of add device 91 func AddDeviceTrans(adds []Device, addAttrs []DeviceAttr, addTwins []DeviceTwin) error { 92 var err error 93 obm := dbm.DBAccess 94 obm.Begin() 95 for _, add := range adds { 96 err = SaveDevice(&add) 97 98 if err != nil { 99 klog.Errorf("save device failed: %v", err) 100 obm.Rollback() 101 return err 102 } 103 } 104 105 for _, attr := range addAttrs { 106 err = SaveDeviceAttr(&attr) 107 if err != nil { 108 obm.Rollback() 109 return err 110 } 111 } 112 113 for _, twin := range addTwins { 114 err = SaveDeviceTwin(&twin) 115 if err != nil { 116 obm.Rollback() 117 return err 118 } 119 } 120 obm.Commit() 121 return nil 122 } 123 124 //DeleteDeviceTrans the transaction of delete device 125 func DeleteDeviceTrans(deletes []string) error { 126 var err error 127 obm := dbm.DBAccess 128 obm.Begin() 129 for _, delete := range deletes { 130 err = DeleteDeviceByID(delete) 131 if err != nil { 132 obm.Rollback() 133 return err 134 } 135 err = DeleteDeviceAttrByDeviceID(delete) 136 if err != nil { 137 obm.Rollback() 138 return err 139 } 140 err = DeleteDeviceTwinByDeviceID(delete) 141 if err != nil { 142 obm.Rollback() 143 return err 144 } 145 146 } 147 obm.Commit() 148 return nil 149 150 }