summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBen Morrison <ben@gbmor.dev>2019-06-11 04:48:01 -0400
committerBen Morrison <ben@gbmor.dev>2019-06-11 04:54:55 -0400
commitfb328631e55830f3a2cab79bf18115324910c93c (patch)
treece92b5e91f1588bd5dcafdd466c368f37bf5d2de
parent00eaadc6ed2859ccf3683486667fe20374893421 (diff)
downloadgetwtxt-fb328631e55830f3a2cab79bf18115324910c93c.tar.gz
moved timed/periodic functions and types to periodic.go
-rw-r--r--svc/conf.go77
-rw-r--r--svc/init.go23
-rw-r--r--svc/periodic.go103
3 files changed, 108 insertions, 95 deletions
diff --git a/svc/conf.go b/svc/conf.go
index 8abb4a6..2e9d671 100644
--- a/svc/conf.go
+++ b/svc/conf.go
@@ -8,7 +8,6 @@ import (
 	"sync"
 	"time"
 
-	"github.com/fsnotify/fsnotify"
 	"github.com/spf13/viper"
 )
 
@@ -38,58 +37,6 @@ type Instance struct {
 	Desc  string `yaml:"Instance.Description"`
 }
 
-// This is a wrapper for a *time.Ticker
-// that adds another channel. It's used
-// to signal to the ticker goroutines
-// that they should stop the tickers
-// and exit.
-type tick struct {
-	isDB bool
-	t    *time.Ticker
-	exit chan bool
-}
-
-// Creates a new instance of a tick
-func initTicker(db bool, interval time.Duration) *tick {
-	return &tick{
-		isDB: db,
-		t:    time.NewTicker(interval),
-		exit: make(chan bool, 1),
-	}
-}
-
-// Sends the signal to stop the tickers
-// and for their respective goroutines
-// to exit.
-func killTickers() {
-	ct := <-cTickC
-	dt := <-dbTickC
-	ct.exit <- true
-	dt.exit <- true
-}
-
-// Waits for a signal from the database
-// *tick. Either stops the ticker and
-// kills the goroutine or it will
-// update cache / push the DB to disk
-func dataTimer(tkr *tick) {
-	for {
-		select {
-		case signal := <-tkr.t.C:
-			if tkr.isDB {
-				errLog("", pushDB())
-				log.Printf("Database push took: %v\n", time.Since(signal))
-				continue
-			}
-			cacheUpdate()
-			log.Printf("Cache update took: %v\n", time.Since(signal))
-		case <-tkr.exit:
-			tkr.t.Stop()
-			return
-		}
-	}
-}
-
 // Called on start-up. Initializes everything
 // related to configuration values.
 func initConfig() {
@@ -110,30 +57,6 @@ func initConfig() {
 	bindConfig()
 }
 
-// Called when a change is detected in the
-// configuration file. Closes log file,
-// closes database connection, stops all
-// tickers, then binds new configuration
-// values, opens new log file, connects to
-// new database, and starts new cache and
-// database tickers.
-func reInit(e fsnotify.Event) {
-	log.Printf("%v. Reloading...\n", e.String())
-
-	if !confObj.StdoutLogging {
-		closeLog <- true
-	}
-
-	killTickers()
-	killDB()
-
-	bindConfig()
-
-	initLogging()
-	initDatabase()
-	initPersistence()
-}
-
 // Registers either stdout or a specified file
 // to the default logger.
 func initLogging() {
diff --git a/svc/init.go b/svc/init.go
index 71527cf..537119c 100644
--- a/svc/init.go
+++ b/svc/init.go
@@ -30,9 +30,12 @@ var confObj = &Configuration{}
 // Signals to close the log file
 var closeLog = make(chan bool, 1)
 
-// Used to transmit database pointer, database ticker,
-// and cache ticker after initialization
+// Used to transmit database pointer
 var dbChan = make(chan dbase, 1)
+
+// Used to transmit the wrapped tickers
+// corresponding to the in-memory cache
+// or the on-disk database.
 var dbTickC = make(chan *tick, 1)
 var cTickC = make(chan *tick, 1)
 
@@ -100,22 +103,6 @@ func checkFlags() {
 	}
 }
 
-// Starts the tickers that periodically:
-//  - pull new user statuses into cache
-//  - push cached data to disk
-func initPersistence() {
-	confObj.Mu.RLock()
-	cacheTkr := initTicker(false, confObj.CacheInterval)
-	dbTkr := initTicker(true, confObj.DBInterval)
-	confObj.Mu.RUnlock()
-
-	go dataTimer(cacheTkr)
-	go dataTimer(dbTkr)
-
-	dbTickC <- dbTkr
-	cTickC <- cacheTkr
-}
-
 // Watch for SIGINT aka ^C
 // Close the log file then exit
 func watchForInterrupt() {
diff --git a/svc/periodic.go b/svc/periodic.go
new file mode 100644
index 0000000..f27b08e
--- /dev/null
+++ b/svc/periodic.go
@@ -0,0 +1,103 @@
+package svc // import "github.com/getwtxt/getwtxt/svc"
+
+import (
+	"log"
+	"time"
+
+	"github.com/fsnotify/fsnotify"
+)
+
+// Functions and types in this file pertain
+// to periodic, regular actions.
+
+// This is a wrapper for a *time.Ticker
+// that adds another channel. It's used
+// to signal to the ticker goroutines
+// that they should stop the tickers
+// and exit.
+type tick struct {
+	isDB bool
+	t    *time.Ticker
+	exit chan bool
+}
+
+// Creates a new instance of a tick
+func initTicker(db bool, interval time.Duration) *tick {
+	return &tick{
+		isDB: db,
+		t:    time.NewTicker(interval),
+		exit: make(chan bool, 1),
+	}
+}
+
+// Sends the signal to stop the tickers
+// and for their respective goroutines
+// to exit.
+func killTickers() {
+	ct := <-cTickC
+	dt := <-dbTickC
+	ct.exit <- true
+	dt.exit <- true
+}
+
+// Waits for a signal from the database
+// *tick. Either stops the ticker and
+// kills the goroutine or it will
+// update cache / push the DB to disk
+func dataTimer(tkr *tick) {
+	for {
+		select {
+		case signal := <-tkr.t.C:
+			if tkr.isDB {
+				errLog("", pushDB())
+				log.Printf("Database push took: %v\n", time.Since(signal))
+				continue
+			}
+			cacheUpdate()
+			log.Printf("Cache update took: %v\n", time.Since(signal))
+		case <-tkr.exit:
+			tkr.t.Stop()
+			return
+		}
+	}
+}
+
+// Called when a change is detected in the
+// configuration file. Closes log file,
+// closes database connection, stops all
+// tickers, then binds new configuration
+// values, opens new log file, connects to
+// new database, and starts new cache and
+// database tickers.
+func reInit(e fsnotify.Event) {
+	log.Printf("%v. Reloading...\n", e.String())
+
+	if !confObj.StdoutLogging {
+		closeLog <- true
+	}
+
+	killTickers()
+	killDB()
+
+	bindConfig()
+
+	initLogging()
+	initDatabase()
+	initPersistence()
+}
+
+// Starts the tickers that periodically:
+//  - pull new user statuses into cache
+//  - push cached data to disk
+func initPersistence() {
+	confObj.Mu.RLock()
+	cacheTkr := initTicker(false, confObj.CacheInterval)
+	dbTkr := initTicker(true, confObj.DBInterval)
+	confObj.Mu.RUnlock()
+
+	go dataTimer(cacheTkr)
+	go dataTimer(dbTkr)
+
+	dbTickC <- dbTkr
+	cTickC <- cacheTkr
+}
d4e ^
cdf0f349 ^

cdf0f349 ^
ea19d0dc ^
cdf0f349 ^



59085fca ^



c442a5ad ^
6c96a437 ^
cdf0f349 ^
c442a5ad ^
6c96a437 ^
cdf0f349 ^
c442a5ad ^
cdf0f349 ^
6c96a437 ^
cdf0f349 ^
c442a5ad ^
cdf0f349 ^

59e47aca ^
cdf0f349 ^











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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236