98 lines
1.8 KiB
Go
98 lines
1.8 KiB
Go
// llmongo.go
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
_VERSION = "v2.3.1"
|
|
)
|
|
|
|
var (
|
|
opts = Options{
|
|
RedisTTL: time.Hour * 11688, // 16 mesi
|
|
LogFile: "log/llmongo.log",
|
|
}
|
|
|
|
loop []bool
|
|
|
|
done []chan bool
|
|
consume []chan produced
|
|
remove []chan consumed
|
|
|
|
wg sync.WaitGroup
|
|
|
|
count *Counter
|
|
)
|
|
|
|
func main() {
|
|
flag.Usage = usage
|
|
flag.Parse()
|
|
|
|
if opts.Version {
|
|
fmt.Println(os.Args[0], _VERSION)
|
|
os.Exit(0)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
count = NewCounter()
|
|
|
|
for i := 0; i < opts.Concurrent; i++ {
|
|
consume = append(consume, make(chan produced))
|
|
remove = append(remove, make(chan consumed))
|
|
loop = append(loop, true)
|
|
done = append(done, make(chan bool))
|
|
|
|
go producer(i)
|
|
go consumer(i)
|
|
go remover(i)
|
|
}
|
|
|
|
for i := 0; i < opts.Concurrent; i++ {
|
|
<-done[i]
|
|
fmt.Printf("Done %d\n", i)
|
|
close(done[i])
|
|
}
|
|
|
|
fmt.Println("Waiting WG")
|
|
for i := 0; i < opts.Concurrent; i++ {
|
|
fmt.Printf("ID (%d): %d\n", i, count.GetWG(i))
|
|
}
|
|
wg.Wait()
|
|
|
|
fmt.Printf("Stop %v - user: %d - login: %d - errors: %d - rem: %d - duplicate: %d\n\r", time.Since(start), count.GetUser(), count.GetLog(), count.GetErr(), count.GetRem(), count.GetDup())
|
|
log.Printf("Stop %v - user: %d - login: %d - errors: %d - rem: %d - duplicate: %d\n\r", time.Since(start), count.GetUser(), count.GetLog(), count.GetErr(), count.GetRem(), count.GetDup())
|
|
}
|