diff options
author | Ben Morrison <ben@gbmor.dev> | 2019-06-05 15:36:23 -0400 |
---|---|---|
committer | Ben Morrison <ben@gbmor.dev> | 2019-06-05 15:36:23 -0400 |
commit | fd43c61bd128ad77b22db0537a9a4eb58490b0b5 (patch) | |
tree | 4c5fa7b33fadbf7c3e14e69b7d68ce280bc3810a /cache.go | |
parent | 4658fe82be3e9d95e93fa5c7c7ca64a15cf2f1a1 (diff) | |
download | getwtxt-fd43c61bd128ad77b22db0537a9a4eb58490b0b5.tar.gz |
moved bulk of code to its own package to clean up source tree
Diffstat (limited to 'cache.go')
-rw-r--r-- | cache.go | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/cache.go b/cache.go deleted file mode 100644 index 7f15d45..0000000 --- a/cache.go +++ /dev/null @@ -1,130 +0,0 @@ -package main - -import ( - "bytes" - "io/ioutil" - "log" - "os" - "time" -) - -func checkCacheTime() bool { - confObj.Mu.RLock() - answer := time.Since(confObj.LastCache) > confObj.CacheInterval - confObj.Mu.RUnlock() - - return answer -} - -// Launched by init as a coroutine to watch -// for the update intervals to pass. -func cacheAndPush() { - for { - if checkCacheTime() { - refreshCache() - } - if checkDBtime() { - if err := pushDatabase(); err != nil { - log.Printf("Error pushing cache to database: %v\n", err.Error()) - } - } - time.Sleep(1000 * time.Millisecond) - } -} - -func refreshCache() { - - // This clusterfuck of mutex read locks is - // necessary to avoid deadlock. This mess - // also avoids a panic that would occur - // should twtxtCache be written to during - // this loop. - twtxtCache.Mu.RLock() - for k := range twtxtCache.Users { - twtxtCache.Mu.RUnlock() - err := twtxtCache.UpdateUser(k) - if err != nil { - log.Printf("%v\n", err.Error()) - } - twtxtCache.Mu.RLock() - } - twtxtCache.Mu.RUnlock() - - remoteRegistries.Mu.RLock() - for _, v := range remoteRegistries.List { - err := twtxtCache.CrawlRemoteRegistry(v) - if err != nil { - log.Printf("Error while refreshing local copy of remote registry user data: %v\n", err.Error()) - } - } - remoteRegistries.Mu.RUnlock() - confObj.Mu.Lock() - confObj.LastCache = time.Now() - confObj.Mu.Unlock() -} - -// pingAssets checks if the local static assets -// need to be re-cached. If they do, they are -// pulled back into memory from disk. -func pingAssets() { - - confObj.Mu.RLock() - assetsDir := confObj.AssetsDir - confObj.Mu.RUnlock() - - cssStat, err := os.Stat(assetsDir + "/style.css") - if err != nil { - log.Printf("%v\n", err.Error()) - } - - indexStat, err := os.Stat(assetsDir + "/tmpl/index.html") - if err != nil { - log.Printf("%v\n", err.Error()) - } - - indexMod := staticCache.indexMod - cssMod := staticCache.cssMod - - if !indexMod.Equal(indexStat.ModTime()) { - tmpls = initTemplates() - - var b []byte - buf := bytes.NewBuffer(b) - - confObj.Mu.RLock() - err = tmpls.ExecuteTemplate(buf, "index.html", confObj.Instance) - confObj.Mu.RUnlock() - if err != nil { - log.Printf("%v\n", err.Error()) - } - - staticCache.index = buf.Bytes() - staticCache.indexMod = indexStat.ModTime() - } - - if !cssMod.Equal(cssStat.ModTime()) { - - css, err := ioutil.ReadFile(assetsDir + "/style.css") - if err != nil { - log.Printf("%v\n", err.Error()) - } - - staticCache.css = css - staticCache.cssMod = cssStat.ModTime() - } -} - -// Simple function to deduplicate entries in a []string -func dedupe(list []string) []string { - var out []string - var seen = map[string]bool{} - - for _, e := range list { - if !seen[e] { - out = append(out, e) - seen[e] = true - } - } - - return out -} |