Code refactoring + made anomaly detection system more stable.
Some checks failed
Docker / docker (push) Has been cancelled
Tests / build (push) Has been cancelled
Some checks failed
Docker / docker (push) Has been cancelled
Tests / build (push) Has been cancelled
This commit is contained in:
@@ -5,37 +5,23 @@ import (
|
||||
"slices"
|
||||
"strconv"
|
||||
|
||||
"github.com/ceticamarco/zephyr/cache"
|
||||
"github.com/ceticamarco/zephyr/statistics"
|
||||
"github.com/ceticamarco/zephyr/types"
|
||||
)
|
||||
|
||||
func GetStatistics(cityName string, statDB *types.StatDB) (types.StatResult, error) {
|
||||
func GetStatistics(cityName string, statCache *cache.StatCache) (types.StatResult, error) {
|
||||
// Check whether there are sufficient and updated records for the given location
|
||||
if statDB.IsKeyInvalid(cityName) {
|
||||
if statCache.IsKeyInvalid(cityName) {
|
||||
return types.StatResult{}, errors.New("insufficient or outdated data to perform statistical analysis")
|
||||
}
|
||||
|
||||
extractTemps := func(weatherArr []types.Weather) ([]float64, error) {
|
||||
temps := make([]float64, 0, len(weatherArr))
|
||||
|
||||
for _, weather := range weatherArr {
|
||||
temperature, err := strconv.ParseFloat(weather.Temperature, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
temps = append(temps, temperature)
|
||||
}
|
||||
|
||||
return temps, nil
|
||||
}
|
||||
|
||||
// Extract records from the database
|
||||
stats := statDB.GetCityStatistics(cityName)
|
||||
|
||||
// Extract temperatures from weather statistics
|
||||
temps, err := extractTemps(stats)
|
||||
if err != nil {
|
||||
return types.StatResult{}, err
|
||||
stats := statCache.GetCityStatistics(cityName)
|
||||
// Extract temperatures from statistics
|
||||
temps := make([]float64, len(stats))
|
||||
for idx, stat := range stats {
|
||||
temps[idx] = stat.Temperature
|
||||
}
|
||||
|
||||
// Detect anomalies
|
||||
|
||||
Reference in New Issue
Block a user