100 lines
1.7 KiB
Go
100 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"archive/zip"
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"time"
|
||
|
|
||
|
client "github.com/influxdata/influxdb1-client/v2"
|
||
|
)
|
||
|
|
||
|
// Srcfile source file
|
||
|
type Srcfile struct {
|
||
|
Filename string
|
||
|
Filepath string
|
||
|
Content []byte
|
||
|
}
|
||
|
|
||
|
type Outfile struct {
|
||
|
Content []byte
|
||
|
}
|
||
|
|
||
|
type FuelPricesConfig struct {
|
||
|
RemoteURL string
|
||
|
RemoteFilename string
|
||
|
XPathBase string
|
||
|
Pos []string
|
||
|
Types []string
|
||
|
TmpDir string
|
||
|
InfluxHost string
|
||
|
InfluxPort int
|
||
|
InfluxUser string
|
||
|
InfluxPass string
|
||
|
InfluxDB string
|
||
|
}
|
||
|
|
||
|
type Price struct {
|
||
|
Id string
|
||
|
Fuel string
|
||
|
Amount float64
|
||
|
}
|
||
|
|
||
|
var szip Srcfile
|
||
|
var sxml Srcfile
|
||
|
var ofile Outfile
|
||
|
var err error
|
||
|
var zipfile *zip.Reader
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
var fpc FuelPricesConfig
|
||
|
GetConfig("common.ini", &fpc)
|
||
|
|
||
|
sxml.Filename = fpc.RemoteFilename
|
||
|
sxml.Filepath = fmt.Sprintf("%s/%s", fpc.TmpDir, sxml.Filename)
|
||
|
|
||
|
httpClient, err := client.NewHTTPClient(client.HTTPConfig{
|
||
|
Addr: fmt.Sprintf("http://%s:%d", fpc.InfluxHost, fpc.InfluxPort),
|
||
|
Username: fpc.InfluxUser,
|
||
|
Password: fpc.InfluxPass,
|
||
|
})
|
||
|
|
||
|
bp, err := client.NewBatchPoints(client.BatchPointsConfig{
|
||
|
Database: fpc.InfluxDB,
|
||
|
})
|
||
|
|
||
|
err = DownloadFile(fpc.RemoteURL)
|
||
|
if err != nil {
|
||
|
log.Fatal("Unable to download file")
|
||
|
}
|
||
|
|
||
|
err = ExtractZip()
|
||
|
if err != nil {
|
||
|
log.Fatal("Unable extract file")
|
||
|
}
|
||
|
|
||
|
var prices *[]Price
|
||
|
var now = time.Now()
|
||
|
|
||
|
GetPrices(&prices, fpc.Pos, fpc.Types, fpc.XPathBase)
|
||
|
|
||
|
for _, p := range *prices {
|
||
|
|
||
|
tags := map[string]string{"pdv": p.Id, "fuel": p.Fuel}
|
||
|
fields := map[string]interface{}{"value": p.Amount}
|
||
|
|
||
|
point, _ := client.NewPoint(
|
||
|
"fuel_price",
|
||
|
tags,
|
||
|
fields,
|
||
|
now,
|
||
|
)
|
||
|
|
||
|
bp.AddPoint(point)
|
||
|
err = httpClient.Write(bp)
|
||
|
HandleError(err)
|
||
|
}
|
||
|
|
||
|
}
|