func()

in plugins/inputs/raindrops/raindrops.go [58:159]


func (r *Raindrops) gatherUrl(addr *url.URL, acc telegraf.Accumulator) error {
	resp, err := r.http_client.Get(addr.String())
	if err != nil {
		return fmt.Errorf("error making HTTP request to %s: %s", addr.String(), err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("%s returned HTTP status %s", addr.String(), resp.Status)
	}
	buf := bufio.NewReader(resp.Body)

	// Calling
	_, err = buf.ReadString(':')
	if err != nil {
		return err
	}
	line, err := buf.ReadString('\n')
	if err != nil {
		return err
	}
	calling, err := strconv.ParseUint(strings.TrimSpace(line), 10, 64)
	if err != nil {
		return err
	}

	// Writing
	_, err = buf.ReadString(':')
	if err != nil {
		return err
	}
	line, err = buf.ReadString('\n')
	if err != nil {
		return err
	}
	writing, err := strconv.ParseUint(strings.TrimSpace(line), 10, 64)
	if err != nil {
		return err
	}
	tags := r.getTags(addr)
	fields := map[string]interface{}{
		"calling": calling,
		"writing": writing,
	}
	acc.AddFields("raindrops", fields, tags)

	iterate := true
	var queued_line_str string
	var active_line_str string
	var active_err error
	var queued_err error

	for iterate {
		// Listen
		var tags map[string]string

		lis := map[string]interface{}{
			"active": 0,
			"queued": 0,
		}
		active_line_str, active_err = buf.ReadString('\n')
		if active_err != nil {
			iterate = false
			break
		}
		if strings.Compare(active_line_str, "\n") == 0 {
			break
		}
		queued_line_str, queued_err = buf.ReadString('\n')
		if queued_err != nil {
			iterate = false
		}
		active_line := strings.Split(active_line_str, " ")
		listen_name := active_line[0]

		active, err := strconv.ParseUint(strings.TrimSpace(active_line[2]), 10, 64)
		if err != nil {
			active = 0
		}
		lis["active"] = active

		queued_line := strings.Split(queued_line_str, " ")
		queued, err := strconv.ParseUint(strings.TrimSpace(queued_line[2]), 10, 64)
		if err != nil {
			queued = 0
		}
		lis["queued"] = queued
		if strings.Contains(listen_name, ":") {
			listener := strings.Split(listen_name, ":")
			tags = map[string]string{
				"ip":   listener[0],
				"port": listener[1],
			}

		} else {
			tags = map[string]string{
				"socket": listen_name,
			}
		}
		acc.AddFields("raindrops_listen", lis, tags)
	}
	return nil
}