mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-09 15:50:53 +00:00
Expose some functions
This commit is contained in:
parent
15658e58c3
commit
56b86ad4e3
2 changed files with 14 additions and 11 deletions
3
socketserver/cmd/statsweb/statsweb.go
Normal file
3
socketserver/cmd/statsweb/statsweb.go
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ type PeriodUniqueUsers struct {
|
||||||
type usageToken struct{}
|
type usageToken struct{}
|
||||||
|
|
||||||
const uniqCountDir = "./uniques"
|
const uniqCountDir = "./uniques"
|
||||||
const usersDailyFmt = "daily-%d-%d-%d.gob" // d-m-y
|
const UsersDailyFmt = "daily-%d-%d-%d.gob" // d-m-y
|
||||||
const CounterPrecision uint8 = 12
|
const CounterPrecision uint8 = 12
|
||||||
|
|
||||||
var uniqueCounter PeriodUniqueUsers
|
var uniqueCounter PeriodUniqueUsers
|
||||||
|
@ -45,19 +45,19 @@ var uniqueCtrWritingToken chan usageToken
|
||||||
|
|
||||||
var counterLocation *time.Location = time.FixedZone("UTC-5", int((time.Hour*-5)/time.Second))
|
var counterLocation *time.Location = time.FixedZone("UTC-5", int((time.Hour*-5)/time.Second))
|
||||||
|
|
||||||
// getCounterPeriod calculates the start and end timestamps for the HLL measurement period that includes the 'at' timestamp.
|
// GetCounterPeriod calculates the start and end timestamps for the HLL measurement period that includes the 'at' timestamp.
|
||||||
func getCounterPeriod(at time.Time) (start time.Time, end time.Time) {
|
func GetCounterPeriod(at time.Time) (start time.Time, end time.Time) {
|
||||||
year, month, day := at.Date()
|
year, month, day := at.Date()
|
||||||
start = time.Date(year, month, day, 0, 0, 0, 0, counterLocation)
|
start = time.Date(year, month, day, 0, 0, 0, 0, counterLocation)
|
||||||
end = time.Date(year, month, day+1, 0, 0, 0, 0, counterLocation)
|
end = time.Date(year, month, day+1, 0, 0, 0, 0, counterLocation)
|
||||||
return start, end
|
return start, end
|
||||||
}
|
}
|
||||||
|
|
||||||
// getHLLFilename returns the filename for the saved HLL whose measurement period covers the given time.
|
// GetHLLFilename returns the filename for the saved HLL whose measurement period covers the given time.
|
||||||
func getHLLFilename(at time.Time) string {
|
func GetHLLFilename(at time.Time) string {
|
||||||
var filename string
|
var filename string
|
||||||
year, month, day := at.Date()
|
year, month, day := at.Date()
|
||||||
filename = fmt.Sprintf(usersDailyFmt, day, month, year)
|
filename = fmt.Sprintf(UsersDailyFmt, day, month, year)
|
||||||
return fmt.Sprintf("%s/%s", uniqCountDir, filename)
|
return fmt.Sprintf("%s/%s", uniqCountDir, filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ func getHLLFilename(at time.Time) string {
|
||||||
// If dest.Counter is nil, it will be initialized. (This is a useful side-effect.)
|
// If dest.Counter is nil, it will be initialized. (This is a useful side-effect.)
|
||||||
// If dest is one of the uniqueCounters, the usageToken must be held.
|
// If dest is one of the uniqueCounters, the usageToken must be held.
|
||||||
func loadHLL(at time.Time, dest *PeriodUniqueUsers) error {
|
func loadHLL(at time.Time, dest *PeriodUniqueUsers) error {
|
||||||
fileBytes, err := ioutil.ReadFile(getHLLFilename(at))
|
fileBytes, err := ioutil.ReadFile(GetHLLFilename(at))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ func writeHLL() error {
|
||||||
// writeHLL_do writes out the HLL indicated by `which` to disk.
|
// writeHLL_do writes out the HLL indicated by `which` to disk.
|
||||||
// The usageToken must be held when calling this function.
|
// The usageToken must be held when calling this function.
|
||||||
func writeHLL_do(hll *PeriodUniqueUsers) (err error) {
|
func writeHLL_do(hll *PeriodUniqueUsers) (err error) {
|
||||||
filename := getHLLFilename(hll.Start)
|
filename := GetHLLFilename(hll.Start)
|
||||||
file, err := os.Create(filename)
|
file, err := os.Create(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -144,7 +144,7 @@ func loadUniqueUsers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
now := time.Now().In(counterLocation)
|
now := time.Now().In(counterLocation)
|
||||||
uniqueCounter.Start, uniqueCounter.End = getCounterPeriod(now)
|
uniqueCounter.Start, uniqueCounter.End = GetCounterPeriod(now)
|
||||||
err = loadHLL(now, &uniqueCounter)
|
err = loadHLL(now, &uniqueCounter)
|
||||||
isIgnorableError := err != nil && (false ||
|
isIgnorableError := err != nil && (false ||
|
||||||
(os.IsNotExist(err)) ||
|
(os.IsNotExist(err)) ||
|
||||||
|
@ -227,11 +227,11 @@ func rolloverCounters_do() {
|
||||||
enc := base64.NewEncoder(base64.StdEncoding, &buf)
|
enc := base64.NewEncoder(base64.StdEncoding, &buf)
|
||||||
enc.Write(bytes)
|
enc.Write(bytes)
|
||||||
enc.Close()
|
enc.Close()
|
||||||
log.Print("data for ", getHLLFilename(uniqueCounter.Start), ":", buf.String())
|
log.Print("data for ", GetHLLFilename(uniqueCounter.Start), ":", buf.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uniqueCounter.Start, uniqueCounter.End = getCounterPeriod(now)
|
uniqueCounter.Start, uniqueCounter.End = GetCounterPeriod(now)
|
||||||
// errors are bad precisions, so we can ignore
|
// errors are bad precisions, so we can ignore
|
||||||
uniqueCounter.Counter, _ = hyperloglog.NewPlus(CounterPrecision)
|
uniqueCounter.Counter, _ = hyperloglog.NewPlus(CounterPrecision)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue