fix(pkg/logfile): use one instead of several logfiles for all measured values
This commit is contained in:
		| @@ -33,7 +33,7 @@ func Start(cnf *config.Configuration, cleanCacheInterval time.Duration, compress | ||||
| 	ctx := context.Background() | ||||
| 	childContext, cancel := context.WithCancel(ctx) | ||||
|  | ||||
| 	logfile := logfile.New(cnf.Device.TemperatureLogfile) | ||||
| 	logfile := logfile.New(cnf.Device.Logfile) | ||||
|  | ||||
| 	measuredValuesCache := make([]types.MeasuredValue, 0) | ||||
|  | ||||
|   | ||||
| @@ -185,6 +185,8 @@ func (jl *jsonLogfile) Write(measuredValues []types.MeasuredValue) error { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	writeCreationDate(measuredValues) | ||||
|  | ||||
| 	f, err := os.Create(jl.logfile) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("%v %v: %v", errorLogfileCreate, jl.logfile, err) | ||||
|   | ||||
| @@ -3,39 +3,13 @@ package logfile | ||||
| import ( | ||||
| 	"path/filepath" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/go-flucky/flucky/pkg/types" | ||||
| ) | ||||
|  | ||||
| // var validUUID = regexp.MustCompile("^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[8|9|aA|bB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$") | ||||
| var timeFormat = time.RFC3339 | ||||
|  | ||||
| // // AppendTemperatures with temperature values from a logfile. As additional | ||||
| // // option it's possible to compress the temperature data. | ||||
| // func AppendTemperatures(logfile Logfile, compression bool, temperatures []*types.Temperature) error { | ||||
|  | ||||
| // 	allTemperatures := make([]*types.Temperature, 0) | ||||
|  | ||||
| // 	if _, err := os.Stat(logfile.GetLogfile()); err == nil { | ||||
| // 		temperaturesFromLogfile, err := logfile.ReadTemperatures() | ||||
| // 		if err != nil { | ||||
| // 			return err | ||||
| // 		} | ||||
|  | ||||
| // 		allTemperatures = append(allTemperatures, temperaturesFromLogfile...) | ||||
| // 	} | ||||
|  | ||||
| // 	allTemperatures = append(allTemperatures, temperatures...) | ||||
|  | ||||
| // 	if compression { | ||||
| // 		allTemperatures = CompressTemperature(allTemperatures) | ||||
| // 	} | ||||
|  | ||||
| // 	err := logfile.WriteTemperatures(allTemperatures) | ||||
| // 	if err != nil { | ||||
| // 		return err | ||||
| // 	} | ||||
| // 	return nil | ||||
| // } | ||||
|  | ||||
| // CompressTemperature compresses the temperatures from an array. It is checked | ||||
| // whether the measured temperature of a value corresponds to that of the | ||||
| // predecessor. If this is the case, the current value is discarded and the | ||||
| @@ -91,10 +65,10 @@ func New(logfile string) Logfile { | ||||
| 		return &jsonLogfile{ | ||||
| 			logfile: logfile, | ||||
| 		} | ||||
| 	// case ".xml": | ||||
| 	// 	return &xmlLogfile{ | ||||
| 	// 		logfile: logfile, | ||||
| 	// 	} | ||||
| 		// case ".xml": | ||||
| 		// 	return &xmlLogfile{ | ||||
| 		// 		logfile: logfile, | ||||
| 		// 	} | ||||
| 	default: | ||||
| 		return &jsonLogfile{ | ||||
| 			logfile: logfile, | ||||
| @@ -103,56 +77,11 @@ func New(logfile string) Logfile { | ||||
|  | ||||
| } | ||||
|  | ||||
| // // SplittTemperatures into multiple arrays. The Size can be defined by | ||||
| // // temperatureSplitBy parameter. | ||||
| // func SplittTemperatures(temperatures []*types.Temperature, templeratureSplitBy int) [][]*types.Temperature { | ||||
| // 	splittedTemperatures := make([][]*types.Temperature, 0) | ||||
| // 	newTemperatures := make([]*types.Temperature, 0) | ||||
| // 	for _, temperature := range temperatures { | ||||
| // 		if len(newTemperatures) == templeratureSplitBy { | ||||
| // 			splittedTemperatures = append(splittedTemperatures, newTemperatures) | ||||
| // 			newTemperatures = make([]*types.Temperature, 0) | ||||
| // 		} | ||||
| // 		newTemperatures = append(newTemperatures, temperature) | ||||
| // 	} | ||||
| // 	splittedTemperatures = append(splittedTemperatures, newTemperatures) | ||||
| // 	return splittedTemperatures | ||||
| // } | ||||
|  | ||||
| // // SortTemperatures by TemperatureFromDate | ||||
| // func SortTemperatures(temperatures []*types.Temperature) { | ||||
| // 	sort.SliceStable(temperatures, func(i int, j int) bool { | ||||
| // 		return temperatures[i].TemperatureFromDate.Before(temperatures[j].TemperatureFromDate) | ||||
| // 	}) | ||||
| // } | ||||
|  | ||||
| // // ValidateTemperatures Checks if the temperature data is valid. | ||||
| // // - Check the temperature id (uuid) | ||||
| // // - Checks whether the time specifications are historically in a sequence. | ||||
| // // - Check the sensor id (uuid) | ||||
| // func ValidateTemperatures(temperatures []*types.Temperature) error { | ||||
| // 	for _, temperature := range temperatures { | ||||
| // 		if !validUUID.MatchString(temperature.TemperatureID) { | ||||
| // 			return errorNoValidTemperatureID | ||||
| // 		} else if temperature.TemperatureValue == 0 { | ||||
| // 			return errorNoValidMesuredValue | ||||
| // 		} else if temperature.TemperatureFromDate.After(temperature.TemperatureTillDate) { | ||||
| // 			return errorNoValidTimePeriods | ||||
| // 		} else if !validUUID.MatchString(temperature.SensorID) { | ||||
| // 			return errorNoValidSensorID | ||||
| // 		} else if temperature.CreationDate.After(*temperature.UpdateDate) && temperature.UpdateDate != nil { | ||||
| // 			return errorNoValidTimePeriods | ||||
| // 		} | ||||
| // 	} | ||||
|  | ||||
| // 	return nil | ||||
| // } | ||||
|  | ||||
| // func writeCreationDate(temperatures []*types.Temperature) { | ||||
| // 	now := time.Now() | ||||
| // 	for _, temperature := range temperatures { | ||||
| // 		if temperature.CreationDate == nil { | ||||
| // 			temperature.CreationDate = &now | ||||
| // 		} | ||||
| // 	} | ||||
| // } | ||||
| func writeCreationDate(measuredValues []types.MeasuredValue) { | ||||
| 	now := time.Now() | ||||
| 	for _, measuredValue := range measuredValues { | ||||
| 		if measuredValue.GetCreationDate() == nil { | ||||
| 			measuredValue.SetCreationDate(&now) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -4,11 +4,10 @@ import "time" | ||||
|  | ||||
| // Device ... | ||||
| type Device struct { | ||||
| 	DeviceID           string    `json:"device_id" xml:"device_id"` | ||||
| 	DeviceName         string    `json:"device_name" xml:"device_name"` | ||||
| 	DeviceLocation     *string   `json:"device_location" xml:"device_location"` | ||||
| 	DeviceLastContact  time.Time `json:"device_last_contact" xml:"device_last_contact"` | ||||
| 	HumidityLogfile    string    `json:"humidity_logfile" xml:"humidity_logfile"` | ||||
| 	TemperatureLogfile string    `json:"temperature_logfile" xml:"temperature_logfile"` | ||||
| 	CreationDate       time.Time `json:"creation_date" xml:"creation_date"` | ||||
| 	DeviceID          string    `json:"device_id" xml:"device_id"` | ||||
| 	DeviceName        string    `json:"device_name" xml:"device_name"` | ||||
| 	DeviceLocation    *string   `json:"device_location" xml:"device_location"` | ||||
| 	DeviceLastContact time.Time `json:"device_last_contact" xml:"device_last_contact"` | ||||
| 	Logfile           string    `json:"logfile" xml:"logfile"` | ||||
| 	CreationDate      time.Time `json:"creation_date" xml:"creation_date"` | ||||
| } | ||||
|   | ||||
| @@ -13,6 +13,10 @@ type Humidity struct { | ||||
| 	UpdateDate       *time.Time `json:"update_date" xml:"update_date"` | ||||
| } | ||||
|  | ||||
| func (h *Humidity) GetCreationDate() *time.Time { | ||||
| 	return h.CreationDate | ||||
| } | ||||
|  | ||||
| func (h *Humidity) GetID() string { | ||||
| 	return h.HumidityID | ||||
| } | ||||
| @@ -24,3 +28,15 @@ func (h *Humidity) GetSensorID() string { | ||||
| func (h *Humidity) GetValue() float64 { | ||||
| 	return h.HumidityValue | ||||
| } | ||||
|  | ||||
| func (h *Humidity) SetTillDate(date time.Time) { | ||||
| 	h.HumidityTillDate = date | ||||
| } | ||||
|  | ||||
| func (h *Humidity) SetCreationDate(date *time.Time) { | ||||
| 	h.CreationDate = date | ||||
| } | ||||
|  | ||||
| func (h *Humidity) SetUpdateDate(date *time.Time) { | ||||
| 	h.UpdateDate = date | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,13 @@ | ||||
| package types | ||||
|  | ||||
| import "time" | ||||
|  | ||||
| type MeasuredValue interface { | ||||
| 	GetID() string | ||||
| 	GetCreationDate() *time.Time | ||||
| 	GetSensorID() string | ||||
| 	GetValue() float64 | ||||
| 	SetCreationDate(date *time.Time) | ||||
| 	SetTillDate(date time.Time) | ||||
| 	SetUpdateDate(date *time.Time) | ||||
| } | ||||
|   | ||||
| @@ -13,6 +13,10 @@ type Temperature struct { | ||||
| 	UpdateDate          *time.Time `json:"update_date" xml:"update_date"` | ||||
| } | ||||
|  | ||||
| func (t *Temperature) GetCreationDate() *time.Time { | ||||
| 	return t.CreationDate | ||||
| } | ||||
|  | ||||
| func (t *Temperature) GetID() string { | ||||
| 	return t.TemperatureID | ||||
| } | ||||
| @@ -24,3 +28,15 @@ func (t *Temperature) GetSensorID() string { | ||||
| func (t *Temperature) GetValue() float64 { | ||||
| 	return t.TemperatureValue | ||||
| } | ||||
|  | ||||
| func (t *Temperature) SetTillDate(date time.Time) { | ||||
| 	t.TemperatureTillDate = date | ||||
| } | ||||
|  | ||||
| func (t *Temperature) SetCreationDate(date *time.Time) { | ||||
| 	t.CreationDate = date | ||||
| } | ||||
|  | ||||
| func (t *Temperature) SetUpdateDate(date *time.Time) { | ||||
| 	t.UpdateDate = date | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user