From f68f5b66dac93d1dfdc296f33dbaec5a117a68f6 Mon Sep 17 00:00:00 2001 From: Golan Shatz Date: Sun, 6 Jan 2019 17:02:34 +0200 Subject: [PATCH] Add access key support for ingest & query (#22) * Add access key support for ingest & query * code review fixes --- functions/ingest/ingest.go | 3 +- .../v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go | 44 +++++-------------- functions/query/query.go | 5 ++- .../v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go | 44 +++++-------------- 4 files changed, 27 insertions(+), 69 deletions(-) diff --git a/functions/ingest/ingest.go b/functions/ingest/ingest.go index 1df42114..868be017 100644 --- a/functions/ingest/ingest.go +++ b/functions/ingest/ingest.go @@ -75,6 +75,7 @@ func createTSDBAppender(context *nuclio.Context, path string) (tsdb.Appender, er } v3ioUrl := os.Getenv("INGEST_V3IO_URL") + accessKey := os.Getenv("INGEST_V3IO_ACCESS_KEY") username := os.Getenv("INGEST_V3IO_USERNAME") password := os.Getenv("INGEST_V3IO_PASSWORD") containerName := os.Getenv("INGEST_V3IO_CONTAINER") @@ -87,7 +88,7 @@ func createTSDBAppender(context *nuclio.Context, path string) (tsdb.Appender, er containerName = "bigdata" } - container, err := tsdb.NewContainer(v3ioUrl, numWorkers, username, password, containerName, context.Logger) + container, err := tsdb.NewContainer(v3ioUrl, numWorkers, accessKey, username, password, containerName, context.Logger) if err != nil { return nil, errors.Wrap(err, "Failed to create container") } diff --git a/functions/ingest/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go b/functions/ingest/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go index 83473191..89bfa5d6 100644 --- a/functions/ingest/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go +++ b/functions/ingest/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go @@ -25,10 +25,8 @@ import ( "encoding/json" "fmt" "math" - "os" pathUtil "path" "path/filepath" - "strconv" "time" "github.com/nuclio/logger" @@ -110,45 +108,25 @@ func NewV3ioAdapter(cfg *config.V3ioConfig, container *v3io.Container, logger lo return &newV3ioAdapter, err } -func NewContainer(v3ioUrl string, numWorkers int, username string, password string, containerName string, logger logger.Logger) (*v3io.Container, error) { +func NewContainer(v3ioUrl string, numWorkers int, accessKey string, username string, password string, containerName string, logger logger.Logger) (*v3io.Container, error) { ctx, err := v3io.NewContext(logger, v3ioUrl, numWorkers) if err != nil { return nil, err } - session, err := ctx.NewSession(username, password, "") - if err != nil { - return nil, err - } - if containerName == "" { - containerName = "bigdata" + + // Create session - accessKey will take precedence over user/password if exists + sessionConfig := &v3io.SessionConfig{ + Username: username, + Password: password, + Label: "tsdb", + SessionKey: accessKey, } - container, err := session.NewContainer(containerName) + session, err := ctx.NewSessionFromConfig(sessionConfig) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Failed to create a session.") } - return container, nil -} -func NewContainerFromEnv(logger logger.Logger) (*v3io.Container, error) { - v3ioUrl := os.Getenv("V3IO_URL") - numWorkersStr := os.Getenv("V3IO_NUM_WORKERS") - var numWorkers int - var err error - if len(numWorkersStr) > 0 { - numWorkers, err = strconv.Atoi(numWorkersStr) - if err != nil { - return nil, err - } - } else { - numWorkers = 8 - } - username := os.Getenv("V3IO_USERNAME") - password := os.Getenv("V3IO_PASSWORD") - containerName := os.Getenv("V3IO_CONTAINER") - if containerName == "" { - containerName = "bigdata" - } - container, err := NewContainer(v3ioUrl, numWorkers, username, password, containerName, logger) + container, err := session.NewContainer(containerName) if err != nil { return nil, err } diff --git a/functions/query/query.go b/functions/query/query.go index e3b8a26b..af40b5c0 100644 --- a/functions/query/query.go +++ b/functions/query/query.go @@ -61,7 +61,7 @@ func Query(context *nuclio.Context, event nuclio.Event) (interface{}, error) { } params := &pquerier.SelectParams{ - Name: request.Metric, + Name: request.Metric, Functions: strings.Join(request.Aggregators, ","), Step: step, Filter: request.FilterExpression, @@ -117,6 +117,7 @@ func createV3ioAdapter(context *nuclio.Context, path string) error { } v3ioUrl := os.Getenv("QUERY_V3IO_URL") + accessKey := os.Getenv("QUERY_V3IO_ACCESS_KEY") username := os.Getenv("QUERY_V3IO_USERNAME") password := os.Getenv("QUERY_V3IO_PASSWORD") containerName := os.Getenv("QUERY_V3IO_CONTAINER") @@ -129,7 +130,7 @@ func createV3ioAdapter(context *nuclio.Context, path string) error { containerName = "bigdata" } - container, err := tsdb.NewContainer(v3ioUrl, numWorkers, username, password, containerName, context.Logger) + container, err := tsdb.NewContainer(v3ioUrl, numWorkers, accessKey, username, password, containerName, context.Logger) if err != nil { return errors.Wrap(err, "Failed to create container") } diff --git a/functions/query/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go b/functions/query/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go index 83473191..89bfa5d6 100644 --- a/functions/query/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go +++ b/functions/query/vendor/github.com/v3io/v3io-tsdb/pkg/tsdb/v3iotsdb.go @@ -25,10 +25,8 @@ import ( "encoding/json" "fmt" "math" - "os" pathUtil "path" "path/filepath" - "strconv" "time" "github.com/nuclio/logger" @@ -110,45 +108,25 @@ func NewV3ioAdapter(cfg *config.V3ioConfig, container *v3io.Container, logger lo return &newV3ioAdapter, err } -func NewContainer(v3ioUrl string, numWorkers int, username string, password string, containerName string, logger logger.Logger) (*v3io.Container, error) { +func NewContainer(v3ioUrl string, numWorkers int, accessKey string, username string, password string, containerName string, logger logger.Logger) (*v3io.Container, error) { ctx, err := v3io.NewContext(logger, v3ioUrl, numWorkers) if err != nil { return nil, err } - session, err := ctx.NewSession(username, password, "") - if err != nil { - return nil, err - } - if containerName == "" { - containerName = "bigdata" + + // Create session - accessKey will take precedence over user/password if exists + sessionConfig := &v3io.SessionConfig{ + Username: username, + Password: password, + Label: "tsdb", + SessionKey: accessKey, } - container, err := session.NewContainer(containerName) + session, err := ctx.NewSessionFromConfig(sessionConfig) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Failed to create a session.") } - return container, nil -} -func NewContainerFromEnv(logger logger.Logger) (*v3io.Container, error) { - v3ioUrl := os.Getenv("V3IO_URL") - numWorkersStr := os.Getenv("V3IO_NUM_WORKERS") - var numWorkers int - var err error - if len(numWorkersStr) > 0 { - numWorkers, err = strconv.Atoi(numWorkersStr) - if err != nil { - return nil, err - } - } else { - numWorkers = 8 - } - username := os.Getenv("V3IO_USERNAME") - password := os.Getenv("V3IO_PASSWORD") - containerName := os.Getenv("V3IO_CONTAINER") - if containerName == "" { - containerName = "bigdata" - } - container, err := NewContainer(v3ioUrl, numWorkers, username, password, containerName, logger) + container, err := session.NewContainer(containerName) if err != nil { return nil, err }