gremgo

package module
v0.0.0-...-6db41a7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 13, 2018 License: MIT Imports: 11 Imported by: 0

README

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 with bindings
        "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 with bindings
        "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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	Errored bool
	// contains filtered or unexported fields
}

Client is a container for the gremgo client.

func Dial

func Dial(conn dialer, errs chan error) (c Client, err error)

Dial returns a gremgo client for interaction with the Gremlin Server specified in the host IP.

func (*Client) Close

func (c *Client) Close()

Close closes the underlying connection and marks the client as closed.

func (*Client) Execute

func (c *Client) Execute(query string) (resp []Response, err error)

Execute formats a raw Gremlin query, sends it to Gremlin Server, and returns the result.

func (*Client) ExecuteFile

func (c *Client) ExecuteFile(path string, bindings, rebindings map[string]string) (resp []Response, err error)

ExecuteFile takes a file path to a Gremlin script, sends it to Gremlin Server, and returns the result.

func (*Client) ExecuteWithBindings

func (c *Client) ExecuteWithBindings(query string, bindings, rebindings map[string]string) (resp []Response, err error)

ExecuteWithBindings formats a raw Gremlin query, sends it to Gremlin Server, and returns the result.

type DialerConfig

type DialerConfig func(*Ws)

DialerConfig is the struct for defining configuration for WebSocket dialer

func SetAuthentication

func SetAuthentication(username string, password string) DialerConfig

SetAuthentication sets on dialer credentials for authentication

func SetPingInterval

func SetPingInterval(seconds int) DialerConfig

SetPingInterval sets the interval of ping sending for know is connection is alive and in consequence the client is connected

func SetReadingWait

func SetReadingWait(seconds int) DialerConfig

SetReadingWait sets the time for waiting that reading occur

func SetTimeout

func SetTimeout(seconds int) DialerConfig

SetTimeout sets the dial timeout

func SetWritingWait

func SetWritingWait(seconds int) DialerConfig

SetWritingWait sets the time for waiting that writing occur

type Pool

type Pool struct {
	Dial        func() (*Client, error)
	MaxActive   int
	IdleTimeout time.Duration
	// contains filtered or unexported fields
}

Pool maintains a list of connections.

func (*Pool) Get

func (p *Pool) Get() (*PooledConnection, error)

Get will return an available pooled connection. Either an idle connection or by dialing a new one if the pool does not currently have a maximum number of active connections.

type PooledConnection

type PooledConnection struct {
	Pool   *Pool
	Client *Client
}

PooledConnection represents a shared and reusable connection.

func (*PooledConnection) Close

func (pc *PooledConnection) Close()

Close signals that the caller is finished with the connection and should be returned to the pool for future use.

type Response

type Response struct {
	RequestID string `json:"requestId"`
	Status    Status `json:"status"`
	Result    Result `json:"result"`
}

Response structs holds the entire response from requests to the gremlin server

func (Response) ToString

func (r Response) ToString() string

ToString returns a string representation of the Response struct

type Result

type Result struct {
	// Query Response Data
	Data json.RawMessage   `json:"data"`
	Meta map[string]string `json:"meta"`
}

Result struct is used to hold properties returned for results from requests to the gremlin server

type Status

type Status struct {
	Message    string            `json:"message"`
	Code       int               `json:"code"`
	Attributes map[string]string `json:"attributes"`
}

Status struct is used to hold properties returned from requests to the gremlin server

type Ws

type Ws struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Ws is the dialer for a WebSocket connection

func NewDialer

func NewDialer(host string, configs ...DialerConfig) (dialer *Ws)

NewDialer returns a WebSocket dialer to use when connecting to Gremlin Server

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL