|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/analogj/scrutiny/webapp/backend/pkg/models/collector"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
//webapp/backend/pkg/web/testdata/register-devices-req.json
|
|
|
|
devices := "webapp/backend/pkg/web/testdata/register-devices-req.json"
|
|
|
|
|
|
|
|
smartData := map[string][]string{
|
|
|
|
"0x5000cca264eb01d7": {"webapp/backend/pkg/models/testdata/smart-ata.json", "webapp/backend/pkg/models/testdata/smart-ata-date.json", "webapp/backend/pkg/models/testdata/smart-ata-date2.json"},
|
|
|
|
"0x5000cca264ec3183": {"webapp/backend/pkg/models/testdata/smart-fail2.json"},
|
|
|
|
"0x5002538e40a22954": {"webapp/backend/pkg/models/testdata/smart-nvme.json"},
|
|
|
|
"0x5000cca252c859cc": {"webapp/backend/pkg/models/testdata/smart-scsi.json"},
|
|
|
|
"0x5000cca264ebc248": {"webapp/backend/pkg/models/testdata/smart-scsi2.json"},
|
|
|
|
}
|
|
|
|
|
|
|
|
// send a post request to register devices
|
|
|
|
file, err := os.Open(devices)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("ERROR %v", err)
|
|
|
|
}
|
|
|
|
defer file.Close()
|
|
|
|
_, err = SendPostRequest("http://localhost:8080/api/devices/register", file)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("ERROR %v", err)
|
|
|
|
}
|
|
|
|
//
|
|
|
|
|
|
|
|
for diskId, smartDataFileNames := range smartData {
|
|
|
|
for _, smartDataFileName := range smartDataFileNames {
|
|
|
|
for daysToSubtract := 0; daysToSubtract <= 30; daysToSubtract++ { //add 4 weeks worth of data
|
|
|
|
smartDataReader, err := readSmartDataFileFixTimestamp(daysToSubtract, smartDataFileName)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("ERROR %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = SendPostRequest(fmt.Sprintf("http://localhost:8080/api/device/%s/smart", diskId), smartDataReader)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("ERROR %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func SendPostRequest(url string, file io.Reader) ([]byte, error) {
|
|
|
|
response, err := http.Post(url, "application/json", file)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer response.Body.Close()
|
|
|
|
|
|
|
|
log.Printf("%v\n", response.Status)
|
|
|
|
|
|
|
|
return ioutil.ReadAll(response.Body)
|
|
|
|
}
|
|
|
|
|
|
|
|
// InfluxDB will throw an error/ignore any submitted data with a timestamp older than the
|
|
|
|
// retention period. Lets fix this by opening test files, modifying the timestamp and returning an io.Reader
|
|
|
|
func readSmartDataFileFixTimestamp(daysToSubtract int, smartDataFilepath string) (io.Reader, error) {
|
|
|
|
metricsfile, err := os.Open(smartDataFilepath)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
metricsFileData, err := ioutil.ReadAll(metricsfile)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
//unmarshal because we need to change the timestamp
|
|
|
|
var smartData collector.SmartInfo
|
|
|
|
err = json.Unmarshal(metricsFileData, &smartData)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
daysToSubtractInHours := time.Duration(-1 * 24 * daysToSubtract)
|
|
|
|
smartData.LocalTime.TimeT = time.Now().Add(daysToSubtractInHours * time.Hour).Unix()
|
|
|
|
updatedSmartDataBytes, err := json.Marshal(smartData)
|
|
|
|
|
|
|
|
return bytes.NewReader(updatedSmartDataBytes), nil
|
|
|
|
}
|