#author("2020-07-26T03:18:00+00:00","","")
#mynavi(Go言語入門)
#setlinebreak(on);

* 目次 [#mb78b9f9]
#contents
- 関連
-- [[Azure Functions を Go で書く]]
- 参考
-- https://github.com/influxdata/influxdb-client-go

* influxdbインストール、起動 [#g3282671]
#html(<div class="pl10">)

influxdb.conf
#mycode2(){{
[meta]
  dir = "/var/lib/influxdb/meta"

[data]
  dir = "/var/lib/influxdb/data"
  engine = "tsm1"
  wal-dir = "/var/lib/influxdb/wal"

[http]
  enabled = true
  flux-enabled = true
}}

docker-compose.yml
#mycode2(){{
version: "3" 
services:
  influxdb:
    image: influxdb:1.8
    hostname: influxdb_for_test
    container_name: influxdb_for_test
    volumes:
      - ./influxdb:/var/lib/influxdb
      - ./work:/tmp/work
    ports:
      - 8086:8086
}}


起動
#myterm2(){{
docker-compose up -d
}}

#html(</div>)


* サンプルDB作成 [#p38ede5e]
#html(<div class="pl10">)

#myterm2{{
docker exec -it influxdb_for_test bash
# influx
> create database sampledb
> create user sample with password 'sample' WITH ALL PRIVILEGES
}}

#html(</div>)

* Goクライアント取得 [#vd5bf7ae]
#html(<div class="pl10">)
#myterm2(){{
go get github.com/influxdata/influxdb-client-go
}}
#html(</div>)


* Goのソース作成 [#df9072fc]
#html(<div class="pl10">)

GitHub で公開されているGoクライアントの1.8系用のサンプルそのままで書いてみる。
https://github.com/influxdata/influxdb-client-go

#mycode{{
package main

import (
    "context"
    "fmt"
    "time"
    "github.com/influxdata/influxdb-client-go"
)

func main() {
    userName := "sample"
    password := "sample"
    client := influxdb2.NewClient("http://localhost:8086", fmt.Sprintf("%s:%s",userName, password))
    writeAPI := client.WriteAPIBlocking("", "sampledb/autogen")
    p := influxdb2.NewPoint("stat",
        map[string]string{"unit": "temperature"},
        map[string]interface{}{"avg": 24.5, "max": 45},
        time.Now())
    err := writeAPI.WritePoint(context.Background(), p)
    if err != nil {
        fmt.Printf("Write error: %s\n", err.Error())
    } else {
        fmt.Printf("Write success.\n")
    }

    queryAPI := client.QueryAPI("")
    result, err := queryAPI.Query(context.Background(), `from(bucket:"sampledb")|> range(start: -1h) |> filter(fn: (r) => r._measurement == "stat")`)
    if err == nil {
        for result.Next() {
            if result.TableChanged() {
                fmt.Printf("table: %s\n", result.TableMetadata().String())
            }
            fmt.Printf("row: %s\n", result.Record().String())
        }
        if result.Err() != nil {
            fmt.Printf("Query error: %s\n", result.Err().Error())
        }
    } else {
        fmt.Printf("Query error: %s\n", err.Error())
    }
    client.Close()
}

}}

#html(</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS