fix(pkg/sensors): Use channel of data type []measuredValues instead of measuredValues
This commit is contained in:
@ -5,45 +5,54 @@ import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"github.com/go-flucky/flucky/pkg/internal/collect"
|
||||
"github.com/go-flucky/flucky/pkg/internal/prittyprint"
|
||||
|
||||
"github.com/go-flucky/flucky/pkg/types"
|
||||
)
|
||||
|
||||
// Read measured values from sensors
|
||||
func Read(ctx context.Context, sensors []Sensor) ([]types.MeasuredValue, error) {
|
||||
|
||||
// TODO: Execute Read with go function
|
||||
cachesMeasuredValues := make([]types.MeasuredValue, 0)
|
||||
measuredValuesChannel := make(chan []types.MeasuredValue, len(sensors))
|
||||
errorChannel := make(chan error, len(sensors))
|
||||
|
||||
for _, sensor := range sensors {
|
||||
measuredValues, err := sensor.Read()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cachesMeasuredValues = append(cachesMeasuredValues, measuredValues...)
|
||||
ReadChannel(ctx, sensors, measuredValuesChannel, errorChannel)
|
||||
|
||||
errors := collect.Errors(errorChannel)
|
||||
if len(errors) > 0 {
|
||||
return nil, prittyprint.FormatErrors(errors)
|
||||
}
|
||||
|
||||
return cachesMeasuredValues, nil
|
||||
measuredValues := collect.MeasuredValues(measuredValuesChannel)
|
||||
|
||||
return measuredValues, nil
|
||||
}
|
||||
|
||||
// ReadChannel reads the measured values from sensors and writes them to a
|
||||
// channel.
|
||||
func ReadChannel(ctx context.Context, sensors []Sensor, measuredValueChannel chan<- types.MeasuredValue, errorChannel chan<- error, wg *sync.WaitGroup) {
|
||||
// TODO: Execute ReadCallel with go function if wg is available
|
||||
func ReadChannel(ctx context.Context, sensors []Sensor, measuredValuesChannel chan<- []types.MeasuredValue, errorChannel chan<- error) {
|
||||
|
||||
wg := new(sync.WaitGroup)
|
||||
wg.Add(len(sensors))
|
||||
|
||||
for _, sensor := range sensors {
|
||||
sensor.ReadChannel(measuredValueChannel, errorChannel, wg)
|
||||
go sensor.ReadChannel(measuredValuesChannel, errorChannel, wg)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
// ReadContinuously reads the measured values continously from sensors and writes
|
||||
// them to a channel.
|
||||
func ReadContinuously(ctx context.Context, sensors []Sensor, measuredValueChannel chan<- types.MeasuredValue, errorChannel chan<- error) {
|
||||
func ReadContinuously(ctx context.Context, sensors []Sensor, measuredValuesChannel chan<- []types.MeasuredValue, errorChannel chan<- error) {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
errorChannel <- fmt.Errorf("Context closed: %v", ctx.Err())
|
||||
return
|
||||
default:
|
||||
ReadChannel(ctx, sensors, measuredValueChannel, errorChannel, nil)
|
||||
ReadChannel(ctx, sensors, measuredValuesChannel, errorChannel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user