Skip to content

Commit 011d29d

Browse files
author
Vladimir Smirnov
committed
Minor fixes and improvements
* Refactor a bit * Fix an issue with updating last tag (introduced in PR merged) * Add simple migration path for sqlite and bump schema version
1 parent 79056ad commit 011d29d

4 files changed

Lines changed: 65 additions & 45 deletions

File tree

db/interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
type Database interface {
88
GetLastUpdateTime(url, filter string) time.Time
99
GetLastTag(url, filter string) string
10-
UpdateLastUpdateTime(url, filter string, t time.Time, tag string)
10+
UpdateLastUpdateTime(url, filter, tag string, t time.Time)
1111

1212
AddFeed(name, repo, filter, messagePattern string) (int, error)
1313
GetFeed(name string) (*Feed, error)

db/sqlite.go

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func NewSQLite(db *sql.DB) *SQLite {
1919
}
2020
}
2121

22-
var ErrAlreadyExists error = fmt.Errorf("Already exists")
22+
var ErrAlreadyExists error = fmt.Errorf("already exists")
2323

2424
// GetLastUpdateTime - gets Last Update Time
2525
func (d *SQLite) GetLastUpdateTime(url, filter string) time.Time {
@@ -34,21 +34,21 @@ func (d *SQLite) GetLastUpdateTime(url, filter string) time.Time {
3434
}
3535
rows, err := stmt.Query(url, filter)
3636
if err != nil {
37-
logger.Error("error retreiving data",
37+
logger.Error("error retrieving data",
3838
zap.Error(err),
3939
)
4040
return t
4141
}
4242
for rows.Next() {
4343
err = rows.Scan(&t)
4444
if err != nil {
45-
logger.Error("error retreiving data",
45+
logger.Error("error retrieving data",
4646
zap.Error(err),
4747
)
4848
break
4949
}
5050
}
51-
rows.Close()
51+
_ = rows.Close()
5252
return t
5353
}
5454

@@ -65,21 +65,21 @@ func (d *SQLite) GetLastTag(url, filter string) string {
6565
}
6666
rows, err := stmt.Query(url, filter)
6767
if err != nil {
68-
logger.Error("error retreiving data",
68+
logger.Error("error retrieving data",
6969
zap.Error(err),
7070
)
7171
return tag
7272
}
7373
for rows.Next() {
7474
err = rows.Scan(&tag)
7575
if err != nil {
76-
logger.Error("error retreiving data",
76+
logger.Error("error retrieving data",
7777
zap.Error(err),
7878
)
7979
break
8080
}
8181
}
82-
rows.Close()
82+
_ = rows.Close()
8383
return tag
8484
}
8585

@@ -100,10 +100,10 @@ func (d *SQLite) AddFeed(name, repo, filter, messagePattern string) (int, error)
100100
if err != nil {
101101
return -1, err
102102
}
103-
rows.Close()
103+
_ = rows.Close()
104104
return id, ErrAlreadyExists
105105
}
106-
rows.Close()
106+
_ = rows.Close()
107107

108108
stmt, err = d.db.Prepare("INSERT INTO 'feeds' (name, repo, filter, message_pattern) VALUES (?, ?, ?, ?)")
109109
if err != nil {
@@ -131,7 +131,7 @@ func (d *SQLite) AddFeed(name, repo, filter, messagePattern string) (int, error)
131131
return -1, err
132132
}
133133
}
134-
rows.Close()
134+
_ = rows.Close()
135135

136136
return id, nil
137137
}
@@ -154,7 +154,7 @@ func (d *SQLite) GetFeed(name string) (*Feed, error) {
154154
continue
155155
}
156156
}
157-
rows.Close()
157+
_ = rows.Close()
158158

159159
return result, nil
160160
}
@@ -175,12 +175,9 @@ func (d *SQLite) ListFeeds() ([]*Feed, error) {
175175
}
176176

177177
f := &Feed{id, repo, filter, name, pattern}
178-
if err != nil {
179-
continue
180-
}
181178
result = append(result, f)
182179
}
183-
rows.Close()
180+
_ = rows.Close()
184181

185182
return result, nil
186183
}
@@ -197,10 +194,10 @@ func (d *SQLite) AddSubscribtion(endpoint, url, filter string, chatID int64) err
197194
}
198195

199196
if rows.Next() {
200-
rows.Close()
197+
_ = rows.Close()
201198
return ErrAlreadyExists
202199
}
203-
rows.Close()
200+
_ = rows.Close()
204201

205202
stmt, err = d.db.Prepare("INSERT INTO 'subscriptions' (endpoint, url, filter, chat_id) VALUES (?, ?, ?, ?)")
206203
if err != nil {
@@ -244,14 +241,14 @@ func (d *SQLite) GetNotificationMethods(url, filter string) ([]string, error) {
244241
for rows.Next() {
245242
err = rows.Scan(&tmp)
246243
if err != nil {
247-
logger.Error("error retreiving data",
244+
logger.Error("error retrieving data",
248245
zap.Error(err),
249246
)
250247
continue
251248
}
252249
result = append(result, tmp)
253250
}
254-
rows.Close()
251+
_ = rows.Close()
255252

256253
return result, nil
257254
}
@@ -278,19 +275,19 @@ func (d *SQLite) GetEndpointInfo(endpoint, url, filter string) ([]int64, error)
278275
for rows.Next() {
279276
err = rows.Scan(&tmp)
280277
if err != nil {
281-
logger.Error("error retreiving data",
278+
logger.Error("error retrieving data",
282279
zap.Error(err),
283280
)
284281
continue
285282
}
286283
result = append(result, tmp)
287284
}
288-
rows.Close()
285+
_ = rows.Close()
289286

290287
return result, nil
291288
}
292289

293-
func (d *SQLite) UpdateLastUpdateTime(url, filter string, t time.Time, tag string) {
290+
func (d *SQLite) UpdateLastUpdateTime(url, filter, tag string, t time.Time) {
294291
logger := zapwriter.Logger("updater")
295292
id := -1
296293
stmt, err := d.db.Prepare("SELECT id FROM 'last_version' where url=? and filter=?;")
@@ -302,21 +299,22 @@ func (d *SQLite) UpdateLastUpdateTime(url, filter string, t time.Time, tag strin
302299
}
303300
rows, err := stmt.Query(url, filter)
304301
if err != nil {
305-
logger.Error("error retreiving data",
302+
logger.Error("error retrieving data",
306303
zap.Error(err),
307304
)
308305
return
309306
}
307+
310308
for rows.Next() {
311309
err = rows.Scan(&id)
312310
if err != nil {
313-
logger.Error("error retreiving data",
311+
logger.Error("error retrieving data",
314312
zap.Error(err),
315313
)
316314
break
317315
}
318316
}
319-
rows.Close()
317+
_ = rows.Close()
320318

321319
if id != -1 {
322320
stmt, err = d.db.Prepare("UPDATE 'last_version' SET date=?, last_tag=? where id=?")
@@ -331,7 +329,7 @@ func (d *SQLite) UpdateLastUpdateTime(url, filter string, t time.Time, tag strin
331329
}
332330

333331
if id != -1 {
334-
_, err = stmt.Exec(t, id, tag)
332+
_, err = stmt.Exec(t, tag, id)
335333
} else {
336334
_, err = stmt.Exec(url, filter, t, tag)
337335
}

feeds/process.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -206,17 +206,13 @@ func (f *Feed) ProcessFeed() {
206206
var changeType UpdateType
207207
var notification string
208208

209-
// we check here if last tag hasnt changed
209+
// check if last tag haven't changed
210210
if item.Title == cfg.Filters[i].LastTag {
211211
changeType = DescriptionChange
212+
notification = cfg.Repo + " description changed: " + item.Title + "\nLink: " + item.Link
212213
} else {
213214
changeType = NewRelease
214-
}
215-
216-
if changeType == NewRelease {
217-
notification += cfg.Repo + " was tagged: " + item.Title + "\nLink: " + item.Link
218-
} else if changeType == DescriptionChange {
219-
notification += cfg.Repo + " description was changed: " + item.Title + "\nLink: " + item.Link
215+
notification = cfg.Repo + " tagged: " + item.Title + "\nLink: " + item.Link
220216
}
221217

222218
content := html2md.Convert(item.Content)
@@ -235,6 +231,7 @@ func (f *Feed) ProcessFeed() {
235231
zap.String("release", item.Title),
236232
zap.String("notification", notification),
237233
zap.String("content", item.Content),
234+
zap.Any("changeType", changeType),
238235
)
239236

240237
methods, err := f.db.GetNotificationMethods(cfg.Repo, cfg.Filters[i].Name)
@@ -252,12 +249,17 @@ func (f *Feed) ProcessFeed() {
252249
zap.String("method", m),
253250
zap.Any("senders", configs.Config.Senders),
254251
)
255-
configs.Config.Senders[m].Send(cfg.Repo, cfg.Filters[i].Name, notification)
252+
err = configs.Config.Senders[m].Send(cfg.Repo, cfg.Filters[i].Name, notification)
253+
if err != nil {
254+
f.logger.Error("failed to send an update",
255+
zap.Error(err),
256+
)
257+
}
256258
}
257259

258260
cfg.Filters[i].FilterProcessed = true
259261
cfg.Filters[i].LastUpdateTime = *item.UpdatedParsed
260-
f.db.UpdateLastUpdateTime(url, cfg.Filters[i].Filter, cfg.Filters[i].LastUpdateTime, item.Title)
262+
f.db.UpdateLastUpdateTime(url, cfg.Filters[i].Filter, item.Title, cfg.Filters[i].LastUpdateTime)
261263
}
262264
}
263265

main.go

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
)
2020

2121
const (
22-
current_schema_version = 1
22+
currentSchemaVersion = 2
2323
)
2424

2525
func initSqlite() db.Database {
@@ -49,6 +49,7 @@ func initSqlite() db.Database {
4949
'id' INTEGER PRIMARY KEY AUTOINCREMENT,
5050
'url' VARCHAR(255) NOT NULL,
5151
'filter' VARCHAR(255) NOT NULL,
52+
'last_tag' VARCHAR(255) NOT NULL DEFAULT '',
5253
'date' DATE NOT NULL
5354
);
5455
@@ -68,7 +69,7 @@ func initSqlite() db.Database {
6869
'message_pattern' VARCHAR(255) NOT NULL
6970
);
7071
71-
INSERT INTO 'schema_version' (id, version) values (1, 1);
72+
INSERT INTO 'schema_version' (id, version) values (1, 2);
7273
`)
7374
if err != nil {
7475
logger.Fatal("failed to initialize database",
@@ -82,9 +83,9 @@ func initSqlite() db.Database {
8283
)
8384
}
8485
} else {
85-
schema_version := int(0)
86+
schemaVersion := int(0)
8687
for rows.Next() {
87-
err = rows.Scan(&schema_version)
88+
err = rows.Scan(&schemaVersion)
8889
if err != nil {
8990
logger.Fatal("unable to fetch value",
9091
zap.Error(err),
@@ -93,10 +94,29 @@ func initSqlite() db.Database {
9394
}
9495
rows.Close()
9596

96-
if schema_version != current_schema_version {
97-
logger.Fatal("Unknown schema version specified",
98-
zap.Int("version", schema_version),
99-
)
97+
if schemaVersion != currentSchemaVersion {
98+
switch schemaVersion {
99+
case 1:
100+
_, err = configs.Config.DB.Exec(`
101+
ALTER TABLE last_version ADD COLUMN 'last_tag' VARCHAR(255) NOT NULL DEFAULT '';
102+
103+
UPDATE schema_version SET version = 2 WHERE id=1;
104+
`)
105+
106+
if err != nil {
107+
logger.Fatal("failed to migrate database",
108+
zap.Int("databaseVersion", schemaVersion),
109+
zap.Int("upgradingTo", currentSchemaVersion),
110+
zap.Error(err),
111+
)
112+
}
113+
// 'last_tag' VARCHAR(255) NOT NULL DEFAULT '',
114+
default:
115+
// Don't know how to migrate from this version
116+
logger.Fatal("Unknown schema version specified",
117+
zap.Int("version", schemaVersion),
118+
)
119+
}
100120
}
101121
}
102122

@@ -152,7 +172,7 @@ func main() {
152172

153173
// TODO: Generalize to support other databases (e.x. mysql)
154174
var db db.Database
155-
if configs.Config.DatabaseType == "sqlite3" {
175+
if configs.Config.DatabaseType == "sqlite3" || configs.Config.DatabaseType == "sqlite" {
156176
db = initSqlite()
157177
}
158178

0 commit comments

Comments
 (0)