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) } }() }