func (m *MessageMonitor) distributeBroadcast() { for len(m.Targets) != m.Success && time.Now().After(m.Expiry) == false { wg := new(sync.WaitGroup) for k, t := range m.Targets { wg.Add(1) go func(wg *sync.WaitGroup, k int, t string) { defer wg.Done() if m.Status[k] != "OK" && m.retry[k] < RetryWhenFail() { var command, url string /* if m.Command != "" { command = m.Command } else { command = "msg" } */ sub := m.broadcaster.Subscibers[t] if sub != nil { command = "pushmessage" url = fmt.Sprintf("http://%s/subscriber/%s", t, command) r, ecall := toolkit.HttpCall(url, "POST", toolkit.M{}.Set("secret", sub.Secret).Set("Data", m.Data).Set("Key", m.Key).ToBytes("json", nil), nil) if ecall != nil { m.setSuccessFail(k, "CALL ERROR: "+url+" ERR:"+ecall.Error()) } else if r.StatusCode != 200 { m.setSuccessFail(k, fmt.Sprintf("CALL STATUS ERROR: %s ERR: %s", url, r.Status)) } else { var result toolkit.Result bs := toolkit.HttpContent(r) edecode := toolkit.Unjson(bs, &result) if edecode != nil { m.setSuccessFail(k, "DECODE ERROR: "+string(bs)+" ERR:"+edecode.Error()) } else { m.setSuccessFail(k, toolkit.IfEq(result.Status, toolkit.Status_OK, "OK", result.Message).(string)) } } } } }(wg, k, t) } wg.Wait() //time.Sleep(1 * time.Second) //fmt.Printf("%d = %d \n", len(m.Targets), m.Success+m.Fail) } }
func (m *MessageMonitor) ditributeBroadcast() { //for len(m.Targets) != m.Success && time.Now().After(m.Expiry) == false { wg := new(sync.WaitGroup) for k, t := range m.Targets { wg.Add(1) go func(wg *sync.WaitGroup, k int, t string) { defer wg.Done() if m.Status[k] != "OK" { var command, url string if m.Command != "" { command = m.Command } else { command = "msg" } url = fmt.Sprintf("http://%s/%s", t, command) r, ecall := toolkit.HttpCall(url, "POST", toolkit.Jsonify(Message{Key: m.Key, Data: m.Data, Expiry: m.Expiry}), nil) if ecall != nil { m.setSuccessFail(k, "CALL ERROR: "+url+" ERR:"+ecall.Error()) } else if r.StatusCode != 200 { m.setSuccessFail(k, fmt.Sprintf("CALL STATUS ERROR: %s ERR: %s", url, r.Status)) } else { var result toolkit.Result bs := toolkit.HttpContent(r) edecode := toolkit.Unjson(bs, &result) if edecode != nil { m.setSuccessFail(k, "DECODE ERROR: "+string(bs)+" ERR:"+edecode.Error()) } else { m.setSuccessFail(k, toolkit.IfEq(result.Status, toolkit.Status_OK, "OK", result.Message).(string)) } } } }(wg, k, t) } wg.Wait() //time.Sleep(1 * time.Millisecond) //fmt.Printf("%d = %d \n", len(m.Targets), m.Success+m.Fail) //} }
func TestLoadAll(t *testing.T) { ctx, e := prepareContext() if e != nil { t.Errorf("Error Connect: %s", e.Error()) return } defer ctx.Close() tk.Println("Test Load All") c, _ := ctx.Find(new(UserModel), tk.M{ "where": nil, "order": []string{"_id"}, "take": 0, "limit": 0, }) defer c.Close() if c == nil { t.Errorf("Error Load: Unable to init cursor") return } else { count := c.Count() users := []UserModel{} if count > 0 { e = c.Fetch(&users, 0, false) } if e == nil { fmt.Printf("OK...") fmt.Printf("Record(s) found: %d\nSample of first record: %s \n", count, tk.IfEq(count, 0, "", users[0].Email)) fmt.Println("") } else { fmt.Println("NOK") t.Error(e.Error()) } } }