correctly using the latest data for table.
This commit is contained in:
@@ -0,0 +1,12 @@
|
|||||||
|
package database
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/analogj/scrutiny/webapp/backend/pkg/models/measurements"
|
||||||
|
"sort"
|
||||||
|
)
|
||||||
|
|
||||||
|
func sortSmartMeasurementsDesc(smartResults []measurements.Smart) {
|
||||||
|
sort.SliceStable(smartResults, func(i, j int) bool {
|
||||||
|
return smartResults[i].Date.After(smartResults[j].Date)
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package database
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/analogj/scrutiny/webapp/backend/pkg/models/measurements"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_sortSmartMeasurementsDesc_LatestFirst(t *testing.T) {
|
||||||
|
//setup
|
||||||
|
timeNow := time.Now()
|
||||||
|
smartResults := []measurements.Smart{
|
||||||
|
{
|
||||||
|
Date: timeNow.AddDate(0, 0, -2),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Date: timeNow,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Date: timeNow.AddDate(0, 0, -1),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//test
|
||||||
|
sortSmartMeasurementsDesc(smartResults)
|
||||||
|
|
||||||
|
//assert
|
||||||
|
require.Equal(t, smartResults[0].Date, timeNow)
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ func (sr *scrutinyRepository) SaveSmartAttributes(ctx context.Context, wwn strin
|
|||||||
return deviceSmartData, sr.saveDatapoint(sr.influxWriteApi, "smart", tags, fields, deviceSmartData.Date, ctx)
|
return deviceSmartData, sr.saveDatapoint(sr.influxWriteApi, "smart", tags, fields, deviceSmartData.Date, ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSmartAttributeHistory MUST return in sorted order, where newest entries are at the beginning of the list, and oldest are at the end.
|
||||||
func (sr *scrutinyRepository) GetSmartAttributeHistory(ctx context.Context, wwn string, durationKey string, attributes []string) ([]measurements.Smart, error) {
|
func (sr *scrutinyRepository) GetSmartAttributeHistory(ctx context.Context, wwn string, durationKey string, attributes []string) ([]measurements.Smart, error) {
|
||||||
// Get SMartResults from InfluxDB
|
// Get SMartResults from InfluxDB
|
||||||
|
|
||||||
@@ -64,6 +65,9 @@ func (sr *scrutinyRepository) GetSmartAttributeHistory(ctx context.Context, wwn
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//we have to sort the smartResults again, because the `union` command will return multiple 'tables' and only sort the records in each table.
|
||||||
|
sortSmartMeasurementsDesc(smartResults)
|
||||||
|
|
||||||
return smartResults, nil
|
return smartResults, nil
|
||||||
|
|
||||||
//if err := device.SquashHistory(); err != nil {
|
//if err := device.SquashHistory(); err != nil {
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ export class DetailComponent implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
if(smart_results.length == 0){
|
if(smart_results.length == 0){
|
||||||
return smartAttributeDataSource
|
return smartAttributeDataSource
|
||||||
}
|
}
|
||||||
var latest_smart_result = smart_results[smart_results.length -1];
|
var latest_smart_result = smart_results[0];
|
||||||
let attributes = {}
|
let attributes = {}
|
||||||
if(this.isScsi()) {
|
if(this.isScsi()) {
|
||||||
this.smartAttributeTableColumns = ['status', 'name', 'value', 'thresh', 'history'];
|
this.smartAttributeTableColumns = ['status', 'name', 'value', 'thresh', 'history'];
|
||||||
|
|||||||
Reference in New Issue
Block a user