summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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
+}
pre>
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