func stopWordsReply(g *G.Gilmour, stopList *[]string) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("Filtering out stop words") g.Signal("example.log", G.NewMessage().SetData(line)) words := []string{} if err := req.Data(&words); err != nil { panic(words) } stopMap := map[string]bool{} for _, w := range *stopList { stopMap[w] = true } filtered := []string{} for _, w := range words { if _, ok := stopMap[w]; !ok { filtered = append(filtered, w) } } resp.SetData(filtered) } }
func saveReply(g *G.Gilmour) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("Save") g.Signal("example.log", G.NewMessage().SetData(line)) resp.SetData("Hello from Save") } }
func findReply(g *G.Gilmour) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("Find") g.Signal("example.log", G.NewMessage().SetData(line)) input := getInput(req) resp.SetData(input) } }
func wordsReply(g *G.Gilmour) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("WordCount") g.Signal("example.log", G.NewMessage().SetData(line)) input := getInput(req) wordRe := regexp.MustCompile("\\w+") words := wordRe.FindAllString(input, -1) resp.SetData(words) } }
func countReply(g *G.Gilmour) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("WordCount") g.Signal("example.log", G.NewMessage().SetData(line)) input := []string{} if err := req.Data(&input); err != nil { panic(err) } word_counts := make(map[string]int) for _, word := range input { word_counts[word]++ } resp.SetData(word_counts) } }
func popularReply(g *G.Gilmour, wordLen int) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { line := fmt.Sprintf("Popular %v", wordLen) g.Signal("example.log", G.NewMessage().SetData(line)) input := map[string]int{} if err := req.Data(&input); err != nil { panic(err) } popular := map[int][]string{} score := []int{} for k, v := range input { if len(k) != wordLen { continue } popular[v] = append(popular[v], k) } for k := range popular { score = append(score, k) } sort.Sort(sort.Reverse(sort.IntSlice(score))) output := struct { WordLength int Score int Words []string }{WordLength: wordLen} if len(score) > 0 { output.Score = score[0] output.Words = popular[score[0]] } resp.SetData(output) } }
//Fetch a remote file from the URL received in Request. func fetchReply(g *G.Gilmour) func(req *G.Request, resp *G.Message) { return func(req *G.Request, resp *G.Message) { url := getInput(req) line := fmt.Sprintf("Fetch %v", url) g.Signal("example.log", G.NewMessage().SetData(line)) response, err := http.Get(url) if err != nil { panic(err) } defer response.Body.Close() contents, err := ioutil.ReadAll(response.Body) if err != nil { panic(err) } //Send back the contents. resp.SetData(string(contents)) } }
func glog(g *G.Gilmour, msg string) { g.Signal("example.log", G.NewMessage().SetData(msg)) }