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  }