fix(pkg/logfile): use one instead of several logfiles for all measured values

This commit is contained in:
Markus Pesch 2019-06-26 23:36:01 +02:00
parent 072a902376
commit 3dae3e38be
Signed by: volker.raschek
GPG Key ID: 852BCC170D81A982
10 changed files with 67 additions and 100 deletions

View File

@ -32,11 +32,10 @@ var rootCmd = &cobra.Command{
cnf := config.Configuration{
Device: &types.Device{
DeviceID: uuid.NewV4().String(),
DeviceName: hostname,
HumidityLogfile: "/var/log/flucky/humidity.json",
TemperatureLogfile: "/var/log/flucky/temperature.json",
CreationDate: time.Now(),
DeviceID: uuid.NewV4().String(),
DeviceName: hostname,
Logfile: "/var/log/flucky/logfile.json",
CreationDate: time.Now(),
},
}

View File

@ -23,7 +23,7 @@ var listTemperatureCmd = &cobra.Command{
log.Fatalln(err)
}
logfile := logfile.New(cnf.Device.TemperatureLogfile)
logfile := logfile.New(cnf.Device.Logfile)
measuredValues, err := logfile.Read()
if err != nil {

View File

@ -50,7 +50,7 @@ var readTemperatureCmd = &cobra.Command{
cli.PrintMeasuredValues(measuredValues, cnf, os.Stdout)
if logs {
logfile := logfile.New(cnf.Device.TemperatureLogfile)
logfile := logfile.New(cnf.Device.Logfile)
err := logfile.Append(compression, measuredValues)
if err != nil {
rgbled.Error(rgbLEDs)

View File

@ -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)

View File

@ -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)

View File

@ -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)
}
}
}

View File

@ -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"`
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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
}