some code refactoring
This commit is contained in:
parent
764a678bd3
commit
47883aff12
@ -23,7 +23,6 @@ password=password
|
|||||||
database=database
|
database=database
|
||||||
|
|
||||||
[weather]
|
[weather]
|
||||||
version=2.5
|
|
||||||
appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
cities=Caen,Paris,Saint-Lo
|
cities=Caen,Paris,Saint-Lo
|
||||||
measurements=temp,humidity,pressure
|
measurements=temp,humidity,pressure
|
||||||
|
52
functions.go
52
functions.go
@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// GetConfig fetch config from ini file
|
// GetConfig fetch config from ini file
|
||||||
func GetConfig(configfile string, weatherconfig *WeatherConfig) error {
|
func GetConfig(weatherconfig *WeatherConfig, configfile string) error {
|
||||||
flag.Usage = Usage
|
flag.Usage = Usage
|
||||||
|
|
||||||
config, err := ini.Load(configfile)
|
config, err := ini.Load(configfile)
|
||||||
@ -27,7 +27,6 @@ func GetConfig(configfile string, weatherconfig *WeatherConfig) error {
|
|||||||
|
|
||||||
weatherSection := config.Section("weather")
|
weatherSection := config.Section("weather")
|
||||||
|
|
||||||
wc.WeatherVersion = weatherSection.Key("version").MustString("2.5")
|
|
||||||
wc.WeatherAppID = weatherSection.Key("appid").MustString("appid")
|
wc.WeatherAppID = weatherSection.Key("appid").MustString("appid")
|
||||||
wc.WeatherCities = weatherSection.Key("cities").Strings(",")
|
wc.WeatherCities = weatherSection.Key("cities").Strings(",")
|
||||||
if len(wc.WeatherCities) < 1 {
|
if len(wc.WeatherCities) < 1 {
|
||||||
@ -53,7 +52,7 @@ func GetConfig(configfile string, weatherconfig *WeatherConfig) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FetchData fetch data from api
|
// FetchData fetch data from api
|
||||||
func FetchData(city string) (Data, error) {
|
func FetchData(wc *WeatherConfig, city string) (Data, error) {
|
||||||
var d Data
|
var d Data
|
||||||
|
|
||||||
pollTo := 30 * time.Millisecond
|
pollTo := 30 * time.Millisecond
|
||||||
@ -63,22 +62,37 @@ func FetchData(city string) (Data, error) {
|
|||||||
DisableCompression: false,
|
DisableCompression: false,
|
||||||
}}
|
}}
|
||||||
|
|
||||||
resp, err := c.Get(fmt.Sprintf("https://api.openweathermap.org/data/%s/weather?q=%s&appid=%s", wc.WeatherVersion, city, wc.WeatherAppID))
|
q := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric", city, wc.WeatherAppID)
|
||||||
|
fmt.Println(q)
|
||||||
|
|
||||||
|
r, err := c.Get(q)
|
||||||
|
if err != nil {
|
||||||
|
return Data{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := ioutil.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return Data{}, err
|
||||||
|
}
|
||||||
|
|
||||||
b, err := ioutil.ReadAll(resp.Body)
|
|
||||||
err = json.Unmarshal(b, &d)
|
err = json.Unmarshal(b, &d)
|
||||||
|
if err != nil {
|
||||||
|
return Data{}, err
|
||||||
|
}
|
||||||
|
|
||||||
d.Temperature = kelvin + d.Main["temp"]
|
d.Points = map[string]interface{}{"temperature": d.Main.Temperature,
|
||||||
d.Humidity = int64(d.Main["humidity"])
|
"humidity": float64(d.Main.Humidity),
|
||||||
|
"pressure": float64(d.Main.Pressure)}
|
||||||
|
|
||||||
return d, err
|
return d, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendToInflux sends time series data to influxdb
|
// SendToInflux sends time series data to influxdb
|
||||||
func SendToInflux(wc *WeatherConfig, d Data) error {
|
func SendToInflux(wc *WeatherConfig, d Data) error {
|
||||||
|
|
||||||
|
wc.InfluxAddr = fmt.Sprintf("http://%s:%d", wc.InfluxHost, wc.InfluxPort)
|
||||||
httpClient, err := client.NewHTTPClient(client.HTTPConfig{
|
httpClient, err := client.NewHTTPClient(client.HTTPConfig{
|
||||||
Addr: fmt.Sprintf("http://%s:%d", wc.InfluxHost, wc.InfluxPort),
|
Addr: wc.InfluxAddr,
|
||||||
Username: wc.InfluxUser,
|
Username: wc.InfluxUser,
|
||||||
Password: wc.InfluxPass,
|
Password: wc.InfluxPass,
|
||||||
})
|
})
|
||||||
@ -93,11 +107,12 @@ func SendToInflux(wc *WeatherConfig, d Data) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for key, value := range d.Points {
|
||||||
tags := map[string]string{"city": d.City}
|
tags := map[string]string{"city": d.City}
|
||||||
fields := map[string]interface{}{"value": d.Temperature}
|
fields := map[string]interface{}{"value": value}
|
||||||
|
|
||||||
point, _ := client.NewPoint(
|
point, _ := client.NewPoint(
|
||||||
"temperature",
|
key,
|
||||||
tags,
|
tags,
|
||||||
fields,
|
fields,
|
||||||
time.Now(),
|
time.Now(),
|
||||||
@ -108,21 +123,6 @@ func SendToInflux(wc *WeatherConfig, d Data) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
tags = map[string]string{"city": d.City}
|
|
||||||
fields = map[string]interface{}{"value": d.Humidity}
|
|
||||||
|
|
||||||
point, _ = client.NewPoint(
|
|
||||||
"humidity",
|
|
||||||
tags,
|
|
||||||
fields,
|
|
||||||
time.Now(),
|
|
||||||
)
|
|
||||||
|
|
||||||
bp.AddPoint(point)
|
|
||||||
err = httpClient.Write(bp)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
12
types.go
12
types.go
@ -2,21 +2,23 @@ package main
|
|||||||
|
|
||||||
// WeatherConfig is the main configuration
|
// WeatherConfig is the main configuration
|
||||||
type WeatherConfig struct {
|
type WeatherConfig struct {
|
||||||
WeatherVersion string
|
|
||||||
WeatherAppID string
|
WeatherAppID string
|
||||||
WeatherCities []string
|
WeatherCities []string
|
||||||
WeatherMeasurements []string
|
WeatherMeasurements []string
|
||||||
InfluxHost string
|
InfluxHost string
|
||||||
InfluxPort int
|
InfluxPort int
|
||||||
|
InfluxAddr string
|
||||||
InfluxUser string
|
InfluxUser string
|
||||||
InfluxPass string
|
InfluxPass string
|
||||||
InfluxDB string
|
InfluxDB string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Data is object for temperature and humidity for a city
|
// Data is the struct for temperature and humidity for a city
|
||||||
type Data struct {
|
type Data struct {
|
||||||
City string `json:"name"`
|
City string `json:"name"`
|
||||||
Temperature float64
|
Main struct {
|
||||||
Humidity int64
|
Temperature float64 `json:"temp"`
|
||||||
Main map[string]float64
|
Humidity float64 `json:"humidity"`
|
||||||
|
Pressure float64 `json:"pressure"`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
11
weather.go
11
weather.go
@ -4,30 +4,25 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
_ "github.com/influxdata/influxdb1-client"
|
_ "github.com/influxdata/influxdb1-client"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
var wc WeatherConfig
|
var wc WeatherConfig
|
||||||
var configpath string
|
var configpath string
|
||||||
var err error
|
var err error
|
||||||
var now = time.Now()
|
|
||||||
|
|
||||||
const kelvin = -273.15
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
flag.StringVar(&configpath, "configfile", "weather.ini", "config file to use with fuelprices section")
|
flag.StringVar(&configpath, "configfile", "weather.ini", "config file to use with fuelprices section")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
err := GetConfig(configpath, &wc)
|
err = GetConfig(&wc, configpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, city := range wc.WeatherCities {
|
for _, city := range wc.WeatherCities {
|
||||||
d, err := FetchData(city)
|
d, err := FetchData(&wc, city)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user