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  }