func (s SerialReader) processSerialData(redisConnection *redis.Client) { serialConnection := s.newSerialConnection() reader := bufio.NewReader(serialConnection) re := regexp.MustCompile("^([^:]+):(.+)$") for { reply, err := reader.ReadBytes('\n') if err != nil { log.Printf("processSerialData() #1: %s", err) continue } data := strings.TrimSpace(string(reply)) if len(data) == 0 { continue } log.Printf("%s", data) raw_data := re.FindStringSubmatch(data) if len(raw_data) == 0 { continue } metrics := strings.Split(raw_data[2], ",") channel := fmt.Sprintf("rpi-moteino-collector:%s", raw_data[1]) for i := 0; i < len(metrics); i++ { metric_key_and_value := strings.Split(metrics[i], ":") if len(metric_key_and_value) != 2 { continue } value := fmt.Sprintf("%s,%d,%s", metric_key_and_value[0], uint64(time.Now().Unix()), metric_key_and_value[1]) _, err := redisConnection.LPush(channel, value) if err != nil { log.Printf("processSerialData() #2: %s", err) } _, err = redisConnection.Publish(channel, value) if err != nil { log.Printf("processSerialData() #3: %s", err) } } _, err = redisConnection.LTrim(channel, 0, 10) if err != nil { log.Printf("processSerialData() #4: %s", err) } } }
func spawnPublisher() error { var err error var publisher *redis.Client publisher = redis.New() err = publisher.Connect(host, port) if err != nil { log.Fatalf("Publisher failed to connect: %s\n", err.Error()) return err } log.Println("Publisher connected to redis-server.") log.Println("Publishing some messages...") publisher.Publish("channel", "Hello world!") publisher.Publish("channel", "Do you know how to count?") for i := 0; i < 3; i++ { publisher.Publish("channel", i) } log.Printf("Closing publisher...\n") publisher.Quit() return nil }