-
Notifications
You must be signed in to change notification settings - Fork 0
/
sqlite.go
147 lines (114 loc) · 3.24 KB
/
sqlite.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package clientdevices
import (
"database/sql"
log "github.com/sirupsen/logrus"
_ "github.com/mattn/go-sqlite3"
)
//SqlLiteDevicesLib implements the ClientDevice interface
type SqlLiteDevices struct {
db *sql.DB
}
func initDB(db *sql.DB) error {
stmt, _ := db.Prepare("create table if not exists client_devices( " +
" name text, platform text, mac_address text, ip_address varchar(15), stats_table text);")
_, err := stmt.Exec()
return err
}
type SqlLiteOptions struct {
databaseName string
}
func NewSqlLiteDefaultOptions() SqlLiteOptions {
return SqlLiteOptions{
databaseName: "devices",
}
}
// NewClient will initialize the Database and return the client
func NewSqlLiteClient(options SqlLiteOptions) (ClientDevices, error) {
sldl := SqlLiteDevices{}
db, err := sql.Open("sqlite3", options.databaseName)
if err != nil {
return nil, err
}
//db.SetMaxIdleConns(50)
err = db.Ping() // make sure the database conn is alive
if err != nil {
return nil, err
}
err = initDB(db)
if err != nil {
return nil, err
}
sldl.db = db
log.WithFields(log.Fields{"error": err, "db": db}).Debug("New SqlLiteDevicesLib db conn")
return &sldl, err
}
// AddDevice - Insert into table
func (s *SqlLiteDevices) AddDevice(newDevice Device) error {
stmt, err := s.db.Prepare("INSERT INTO client_devices( " +
" name, platform, mac_address, ip_address " +
" ) values(?,?,?,?)")
if err != nil {
return err
}
_, err2 := stmt.Exec(newDevice.Name, newDevice.Platform, newDevice.Mac, newDevice.Ip)
if err2 != nil {
return err
}
return nil
}
// UpdateDevice - update information on a specific device
func (s *SqlLiteDevices) UpdateDevice(device Device) error {
stmt, err := s.db.Prepare("UPDATE client_devices SET " +
" mac_address = ?, ip_address = ? " +
" WHERE name = ?")
if err != nil {
return err
}
_, err = stmt.Exec(device.Mac, device.Ip, device.Name)
if err != nil {
return err
}
return nil
}
// FindDeviceByName - find a device by its nickname
func (s *SqlLiteDevices) FindDeviceByName(device_name string) (Device, error) {
rows, err := s.db.Query("SELECT * from client_devices WHERE name = ?", device_name)
defer rows.Close()
if err != nil {
return Device{}, err
}
device := Device{}
if rows.Next() {
rows.Scan(&device.Name, &device.Platform, &device.Mac, &device.Ip)
}
log.WithFields(log.Fields{"err": err, "device": device}).Debug("FindDeviceByName")
return device, nil
}
// RemoveDeviceByName - remove device given its nickname
func (s *SqlLiteDevices) RemoveDeviceByName(device_name string) error {
stmt, err := s.db.Prepare("DELETE FROM client_devices WHERE name = ?")
if err != nil {
return err
}
_, err = stmt.Exec(device_name)
if err != nil {
return err
}
return nil
}
// GetAllDevices - get all registered devices
func (s *SqlLiteDevices) GetAllDevices() (Devices, error) {
devices := Devices{}
rows, err := s.db.Query("SELECT name, platform, mac_address, ip_address from client_devices")
defer rows.Close()
if err != nil {
return devices, err
}
for rows.Next() {
device := Device{}
rows.Scan(&device.Name, &device.Platform, &device.Mac, &device.Ip)
devices = append(devices, device)
}
log.WithFields(log.Fields{"err": err, "devices": devices}).Debug("GetAllDevices")
return devices, nil
}