From 3dae3e38bec2bc007571fab8f4926a3696deab76 Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Wed, 26 Jun 2019 23:36:01 +0200 Subject: [PATCH] fix(pkg/logfile): use one instead of several logfiles for all measured values --- cmd/cmd.go | 9 ++-- cmd/temperature/list.go | 2 +- cmd/temperature/read.go | 2 +- pkg/daemon/daemon.go | 2 +- pkg/logfile/json.go | 2 + pkg/logfile/logfile.go | 99 ++++++-------------------------------- pkg/types/device.go | 13 +++-- pkg/types/humidity.go | 16 ++++++ pkg/types/measuredValue.go | 6 +++ pkg/types/temperature.go | 16 ++++++ 10 files changed, 67 insertions(+), 100 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 6542ae8..ddc1bf3 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -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(), }, } diff --git a/cmd/temperature/list.go b/cmd/temperature/list.go index 37cf766..4f57814 100644 --- a/cmd/temperature/list.go +++ b/cmd/temperature/list.go @@ -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 { diff --git a/cmd/temperature/read.go b/cmd/temperature/read.go index 8b6c09c..be74a35 100644 --- a/cmd/temperature/read.go +++ b/cmd/temperature/read.go @@ -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) diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go index 85aaa7f..c6edd73 100644 --- a/pkg/daemon/daemon.go +++ b/pkg/daemon/daemon.go @@ -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) diff --git a/pkg/logfile/json.go b/pkg/logfile/json.go index b08de28..75ce26e 100644 --- a/pkg/logfile/json.go +++ b/pkg/logfile/json.go @@ -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) diff --git a/pkg/logfile/logfile.go b/pkg/logfile/logfile.go index 60ae0ac..c6cc636 100644 --- a/pkg/logfile/logfile.go +++ b/pkg/logfile/logfile.go @@ -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) + } + } +} diff --git a/pkg/types/device.go b/pkg/types/device.go index 7f14066..37fe16c 100644 --- a/pkg/types/device.go +++ b/pkg/types/device.go @@ -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"` } diff --git a/pkg/types/humidity.go b/pkg/types/humidity.go index 96ce66c..2b930ae 100644 --- a/pkg/types/humidity.go +++ b/pkg/types/humidity.go @@ -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 +} diff --git a/pkg/types/measuredValue.go b/pkg/types/measuredValue.go index 18b4eb3..df34038 100644 --- a/pkg/types/measuredValue.go +++ b/pkg/types/measuredValue.go @@ -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) } diff --git a/pkg/types/temperature.go b/pkg/types/temperature.go index 1a7e623..097db14 100644 --- a/pkg/types/temperature.go +++ b/pkg/types/temperature.go @@ -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 +}