Skip to content
Golang gremlin client; a fork of qasaur/gremgo which "supports" AWS Neptune's gremlin limitations
Branch: master
Clone or download
Pull request Compare This branch is 28 commits ahead, 5 commits behind qasaur:master.
schwartzmx Merge pull request #6 from schwartzmx/uuid-test
update uuid library,  fix test file naming
Latest commit 114f767 Jun 27, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
scripts set up some integration tests with gremlin docker Jun 8, 2019
.gitignore set up some integration tests with gremlin docker Jun 8, 2019
.travis.yml set up some integration tests with gremlin docker Jun 8, 2019
Dockerfile.gremlin set up some integration tests with gremlin docker Jun 8, 2019
LICENSE.md update license with attribution Jul 7, 2018
Makefile set up some integration tests with gremlin docker Jun 8, 2019
README.md set up some integration tests with gremlin docker Jun 8, 2019
TODO.md Added to todo Sep 15, 2016
client.go set up some integration tests with gremlin docker Jun 8, 2019
client_test.go fmt, misspell Jul 7, 2018
configuration.go fmt, misspell Jul 7, 2018
connection.go set up some integration tests with gremlin docker Jun 8, 2019
connection_test.go fmt, misspell Jul 7, 2018
go.mod update uuid library, fix test file naming Jun 28, 2019
go.sum update uuid library, fix test file naming Jun 28, 2019
gremgo_neptune_benchmark_test.go set up some integration tests with gremlin docker Jun 8, 2019
gremgo_neptune_test.go set up some integration tests with gremlin docker Jun 8, 2019
gremgo_neptune_util_test.go update uuid library, fix test file naming Jun 28, 2019
pool.go set up some integration tests with gremlin docker Jun 8, 2019
pool_test.go Refactored pool. Struct fields are a little more verbose so it's easi… Jul 20, 2016
request.go update uuid library, fix test file naming Jun 28, 2019
request_test.go Revert "Downgrade mime version" Oct 17, 2018
response.go set up some integration tests with gremlin docker Jun 8, 2019
response_test.go Return error Oct 17, 2018

README.md

gremgo-neptune

GoDoc Build Status Go Report Card

gremgo-neptune is a fork of qasaur/gremgo with alterations to make it compatible with AWS Neptune which is a "Fast, reliable graph database built for the cloud".

gremgo is a fast, efficient, and easy-to-use client for the TinkerPop graph database stack. It is a Gremlin language driver which uses WebSockets to interface with Gremlin Server and has a strong emphasis on concurrency and scalability. Please keep in mind that gremgo is still under heavy development and although effort is being made to fully cover gremgo with reliable tests, bugs may be present in several areas.

Modifications were made to gremgo in order to "support" AWS Neptune's lack of Gremlin-specific features, like no support query bindings among others. See differences in Gremlin support here: AWS Neptune Gremlin Implementation Differences

Installation

go get github.com/schwartzmx/gremgo-neptune
dep ensure

Documentation

Example

package main

import (
    "fmt"
    "log"

    "github.com/schwartzmx/gremgo-neptune"
)

func main() {
    errs := make(chan error)
    go func(chan error) {
        err := <-errs
        log.Fatal("Lost connection to the database: " + err.Error())
    }(errs) // Example of connection error handling logic

    dialer := gremgo.NewDialer("ws://127.0.0.1:8182") // Returns a WebSocket dialer to connect to Gremlin Server
    g, err := gremgo.Dial(dialer, errs) // Returns a gremgo client to interact with
    if err != nil {
        fmt.Println(err)
        return
    }
    res, err := g.Execute( // Sends a query to Gremlin Server
        "g.V('1234')"
    )
    if err != nil {
        fmt.Println(err)
        return
    }
    j, err := json.Marshal(res[0].Result.Data) // res will return a list of resultsets,  where the data is a json.RawMessage
    if err != nil {
        fmt.Println(err)
        return nil, err
    }
    fmt.Printf("%s", j)
}

Authentication

The plugin accepts authentication creating a secure dialer where credentials are setted. If the server where are you trying to connect needs authentication and you do not provide the credentials the complement will panic.

package main

import (
    "fmt"
    "log"

    "github.com/schwartzmx/gremgo-neptune"
)

func main() {
    errs := make(chan error)
    go func(chan error) {
        err := <-errs
        log.Fatal("Lost connection to the database: " + err.Error())
    }(errs) // Example of connection error handling logic

    dialer := gremgo.NewSecureDialer("127.0.0.1:8182", "username", "password") // Returns a WebSocket dialer to connect to Gremlin Server
    g, err := gremgo.Dial(dialer, errs) // Returns a gremgo client to interact with
    if err != nil {
        fmt.Println(err)
        return
    }
    res, err := g.Execute( // Sends a query to Gremlin Server
        "g.V('1234')"
    )
    if err != nil {
        fmt.Println(err)
        return
    }
    j, err := json.Marshal(res[0].Result.Data) // res will return a list of resultsets,  where the data is a json.RawMessage
    if err != nil {
        fmt.Println(err)
        return nil, err
    }
    fmt.Printf("%s", j)
}

License

See LICENSE

You can’t perform that action at this time.