95 lines
2.0 KiB
Go
95 lines
2.0 KiB
Go
package counter
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
"encoding/json"
|
|
)
|
|
|
|
type statsTuple_t struct {
|
|
Successful int `json:"good"`
|
|
Failed int `json:"bad"`
|
|
}
|
|
|
|
type stats_t struct {
|
|
Received statsTuple_t `json:"received"`
|
|
Archived statsTuple_t `json:"archived"`
|
|
Dispatched statsTuple_t `json:"dispatched"`
|
|
Handled map[string]statsTuple_t `json:"handled"`
|
|
Stored statsTuple_t `json:"stored"`
|
|
}
|
|
|
|
var stats stats_t
|
|
|
|
func S(id string) {
|
|
switch id {
|
|
case "Received":
|
|
stats.Received.Successful = stats.Received.Successful + 1
|
|
case "Archived":
|
|
stats.Archived.Successful += 1
|
|
case "Dispatched":
|
|
stats.Dispatched.Successful += 1
|
|
case "Stored":
|
|
stats.Stored.Successful += 1
|
|
default:
|
|
log.Printf("Unknown stats id %s", id)
|
|
}
|
|
}
|
|
|
|
func F(id string) {
|
|
switch id {
|
|
case "Received":
|
|
stats.Received.Failed += 1
|
|
case "Archived":
|
|
stats.Archived.Failed += 1
|
|
case "Dispatched":
|
|
stats.Dispatched.Failed += 1
|
|
case "Stored":
|
|
stats.Stored.Failed += 1
|
|
default:
|
|
log.Printf("Unknown stats id %s", id)
|
|
}
|
|
}
|
|
|
|
func SH(id string) {
|
|
if _, ok := stats.Handled[id]; ok {
|
|
tuple := stats.Handled[id]
|
|
tuple.Successful += 1
|
|
stats.Handled[id] = tuple
|
|
} else {
|
|
stats.Handled[id] = statsTuple_t { Successful:1, Failed:0, }
|
|
}
|
|
}
|
|
|
|
func FH(id string) {
|
|
if _, ok := stats.Handled[id]; ok {
|
|
tuple := stats.Handled[id]
|
|
tuple.Failed += 1
|
|
stats.Handled[id] = tuple
|
|
} else {
|
|
stats.Handled[id] = statsTuple_t { Successful:0, Failed:1, }
|
|
}
|
|
}
|
|
|
|
func InitCounter() {
|
|
stats = stats_t {
|
|
Received: statsTuple_t {Successful:0,Failed:0,},
|
|
Archived: statsTuple_t {Successful:0,Failed:0,},
|
|
Dispatched: statsTuple_t {Successful:0,Failed:0,},
|
|
Stored: statsTuple_t {Successful:0,Failed:0,},
|
|
Handled: make(map[string]statsTuple_t),
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
sj, err := json.Marshal(stats)
|
|
if err != nil {
|
|
log.Printf("Unable to marshal stats object: %s", err)
|
|
}
|
|
log.Println(string(sj))
|
|
time.Sleep(time.Second * 60)
|
|
}
|
|
}()
|
|
}
|
|
|