88 lines
1.4 KiB
Go
88 lines
1.4 KiB
Go
// llmongo.go
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
_VERSION = "v2.2.1"
|
|
)
|
|
|
|
var (
|
|
opts = Options{
|
|
RedisTTL: time.Hour * 11688, // 16 mesi
|
|
LogFile: "log/llmongo.log",
|
|
}
|
|
|
|
loop = true
|
|
|
|
count = 0
|
|
errCount = 0
|
|
|
|
done = make(chan bool)
|
|
|
|
wg sync.WaitGroup
|
|
)
|
|
|
|
func main() {
|
|
flag.Usage = usage
|
|
flag.Parse()
|
|
|
|
if opts.Version {
|
|
fmt.Println(os.Args[0], _VERSION)
|
|
os.Exit(0)
|
|
}
|
|
defer close(done)
|
|
|
|
setTerm()
|
|
|
|
fs, err := os.OpenFile(opts.LogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
|
|
if err != nil {
|
|
fmt.Println("Log file error: ", err.Error())
|
|
os.Exit(-4)
|
|
}
|
|
defer fs.Close()
|
|
|
|
log.SetOutput(fs)
|
|
|
|
pid.Write(true)
|
|
defer pid.Remove()
|
|
|
|
start := time.Now()
|
|
fmt.Printf("Start: %+v\n", opts)
|
|
log.Printf("Start: %+v\n", opts)
|
|
|
|
dbs.poolRedis()
|
|
defer dbs.rdb.Close()
|
|
|
|
dbs.connectMongo()
|
|
defer dbs.mdb.Close()
|
|
|
|
if opts.Timeout > 0 {
|
|
time.AfterFunc(opts.Timeout, exit)
|
|
}
|
|
|
|
for i := 0; i < opts.Concurrent; i++ {
|
|
consume := make(chan produced)
|
|
remove := make(chan consumed)
|
|
// defer close(consume)
|
|
// defer close(remove)
|
|
|
|
go producer(consume, done)
|
|
go consumer(consume, remove)
|
|
go remover(remove)
|
|
}
|
|
|
|
<-done
|
|
|
|
wg.Wait()
|
|
|
|
fmt.Printf("Stop %v - login: %d - errors: %d - conn: %d\n\r", time.Since(start), count, errCount, dbs.rdb.ActiveCount())
|
|
log.Printf("Stop %v - login: %d - errors: %d - conn: %d\n\r", time.Since(start), count, errCount, dbs.rdb.ActiveCount())
|
|
}
|