Documentation
¶
Index ¶
- type Client
- func (c *Client) CreateEdge(ctx context.Context, in *apipb.EdgeConstructor, opts ...grpc.CallOption) (*apipb.Edge, error)
- func (c *Client) CreateEdges(ctx context.Context, in *apipb.EdgeConstructors, opts ...grpc.CallOption) (*apipb.Edges, error)
- func (c *Client) CreateNode(ctx context.Context, in *apipb.NodeConstructor, opts ...grpc.CallOption) (*apipb.Node, error)
- func (c *Client) CreateNodes(ctx context.Context, in *apipb.NodeConstructors, opts ...grpc.CallOption) (*apipb.Nodes, error)
- func (c *Client) EdgesFrom(ctx context.Context, in *apipb.EdgeFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
- func (c *Client) EdgesTo(ctx context.Context, in *apipb.EdgeFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
- func (c *Client) GetEdge(ctx context.Context, in *apipb.Path, opts ...grpc.CallOption) (*apipb.Edge, error)
- func (c *Client) GetNode(ctx context.Context, in *apipb.Path, opts ...grpc.CallOption) (*apipb.Node, error)
- func (c *Client) GetSchema(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*apipb.Schema, error)
- func (c *Client) Me(ctx context.Context, in *apipb.MeFilter, opts ...grpc.CallOption) (*apipb.NodeDetail, error)
- func (c *Client) PatchEdge(ctx context.Context, in *apipb.Patch, opts ...grpc.CallOption) (*apipb.Edge, error)
- func (c *Client) PatchEdges(ctx context.Context, in *apipb.PatchFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
- func (c *Client) PatchNode(ctx context.Context, in *apipb.Patch, opts ...grpc.CallOption) (*apipb.Node, error)
- func (c *Client) PatchNodes(ctx context.Context, in *apipb.PatchFilter, opts ...grpc.CallOption) (*apipb.Nodes, error)
- func (c *Client) Ping(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*apipb.Pong, error)
- func (c *Client) Publish(ctx context.Context, in *apipb.OutboundMessage, opts ...grpc.CallOption) (*empty.Empty, error)
- func (c *Client) SearchEdges(ctx context.Context, in *apipb.Filter, opts ...grpc.CallOption) (*apipb.Edges, error)
- func (c *Client) SearchNodes(ctx context.Context, in *apipb.Filter, opts ...grpc.CallOption) (*apipb.Nodes, error)
- func (c *Client) Shutdown(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error)
- func (c *Client) SubGraph(ctx context.Context, in *apipb.SubGraphFilter) (*apipb.Graph, error)
- func (c *Client) Subscribe(ctx context.Context, in *apipb.ChannelFilter, opts ...grpc.CallOption) (apipb.GraphService_SubscribeClient, error)
- type Opt
- type Options
- type Trigger
- func (t Trigger) Filter(ctx context.Context, _ *empty.Empty) (*apipb.ExpressionFilter, error)
- func (t Trigger) Mutate(ctx context.Context, interception *apipb.Change) (*apipb.Change, error)
- func (t Trigger) Ping(ctx context.Context, _ *empty.Empty) (*apipb.Pong, error)
- func (t Trigger) Serve(ctx context.Context, cfg *flags.PluginFlags)
- type TriggerFunc
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func NewClient ¶
Example ¶
ctx := context.Background() // ensure graphik server is started with --auth.jwks=https://www.googleapis.com/oauth2/v3/certs source, err := google.DefaultTokenSource(context.Background(), "https://www.googleapis.com/auth/devstorage.full_control") if err != nil { log.Print(err) return } cli, err := graphik.NewClient(ctx, "localhost:7820", graphik.WithTokenSource(source)) if err != nil { log.Print(err) return } pong, err := cli.Ping(ctx, &empty.Empty{}) if err != nil { logger.Error("failed to ping server", zap.Error(err)) return } fmt.Println(pong.Message)
Output: PONG
func (*Client) CreateEdge ¶
func (c *Client) CreateEdge(ctx context.Context, in *apipb.EdgeConstructor, opts ...grpc.CallOption) (*apipb.Edge, error)
Example ¶
dogs, err := client.SearchNodes(context.Background(), &apipb.Filter{ Gtype: "dog", Expressions: []string{ `node.attributes.name.contains("Charl")`, }, Limit: 1, }) if err != nil { log.Print(err) return } charlie := dogs.GetNodes()[0] coleman, err := client.CreateNode(context.Background(), &apipb.NodeConstructor{ Path: &apipb.Path{ Gtype: "human", }, Attributes: apipb.NewStruct(map[string]interface{}{ "name": "Coleman", }), }) if err != nil { log.Print(err) return } ownerEdge, err := client.CreateEdge(context.Background(), &apipb.EdgeConstructor{ Path: &apipb.Path{ Gtype: "owner", }, Attributes: apipb.NewStruct(map[string]interface{}{ "primary_owner": true, }), From: charlie.Path, To: coleman.Path, }) if err != nil { log.Print(err) return } primary := ownerEdge.Attributes.Fields["primary_owner"].GetBoolValue() fmt.Println(primary)
Output: true
func (*Client) CreateEdges ¶
func (c *Client) CreateEdges(ctx context.Context, in *apipb.EdgeConstructors, opts ...grpc.CallOption) (*apipb.Edges, error)
func (*Client) CreateNode ¶
func (c *Client) CreateNode(ctx context.Context, in *apipb.NodeConstructor, opts ...grpc.CallOption) (*apipb.Node, error)
Example ¶
charlie, err := client.CreateNode(context.Background(), &apipb.NodeConstructor{ Path: &apipb.Path{ Gtype: "dog", }, Attributes: apipb.NewStruct(map[string]interface{}{ "name": "Charlie", }), }) if err != nil { log.Print(err) return } name := charlie.Attributes.Fields["name"].GetStringValue() fmt.Println(name)
Output: Charlie
func (*Client) CreateNodes ¶
func (c *Client) CreateNodes(ctx context.Context, in *apipb.NodeConstructors, opts ...grpc.CallOption) (*apipb.Nodes, error)
func (*Client) EdgesFrom ¶
func (c *Client) EdgesFrom(ctx context.Context, in *apipb.EdgeFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
func (*Client) EdgesTo ¶
func (c *Client) EdgesTo(ctx context.Context, in *apipb.EdgeFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
func (*Client) GetSchema ¶
func (c *Client) GetSchema(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*apipb.Schema, error)
Example ¶
schema, err := client.GetSchema(context.Background(), &empty.Empty{}) if err != nil { log.Print(err) return } fmt.Printf("node types: %s\n", strings.Join(schema.NodeTypes, ",")) fmt.Printf("edge types: %s", strings.Join(schema.EdgeTypes, ","))
Output: node types: dog,human,identity edge types: owner
func (*Client) Me ¶
func (c *Client) Me(ctx context.Context, in *apipb.MeFilter, opts ...grpc.CallOption) (*apipb.NodeDetail, error)
Example ¶
me, err := client.Me(context.Background(), &apipb.MeFilter{ EdgesFrom: nil, EdgesTo: nil, }) if err != nil { log.Print(err) return } issuer := me.GetAttributes().GetFields()["iss"].GetStringValue() // token issuer fmt.Println(issuer)
Output: https://accounts.google.com
func (*Client) PatchEdges ¶
func (c *Client) PatchEdges(ctx context.Context, in *apipb.PatchFilter, opts ...grpc.CallOption) (*apipb.Edges, error)
func (*Client) PatchNode ¶
func (c *Client) PatchNode(ctx context.Context, in *apipb.Patch, opts ...grpc.CallOption) (*apipb.Node, error)
Example ¶
dogs, err := client.SearchNodes(context.Background(), &apipb.Filter{ Gtype: "dog", Expressions: []string{ `node.attributes.name.contains("Charl")`, }, Limit: 1, }) if err != nil { log.Print(err) return } charlie := dogs.GetNodes()[0] charlie, err = client.PatchNode(context.Background(), &apipb.Patch{ Path: charlie.Path, Attributes: apipb.NewStruct(map[string]interface{}{ "weight": 25, }), }) if err != nil { log.Print(err) return } fmt.Println(charlie.GetAttributes().GetFields()["weight"].GetNumberValue())
Output: 25
func (*Client) PatchNodes ¶
func (c *Client) PatchNodes(ctx context.Context, in *apipb.PatchFilter, opts ...grpc.CallOption) (*apipb.Nodes, error)
func (*Client) Publish ¶
func (c *Client) Publish(ctx context.Context, in *apipb.OutboundMessage, opts ...grpc.CallOption) (*empty.Empty, error)
Example ¶
res, err := client.Publish(context.Background(), &apipb.OutboundMessage{ Channel: "testing", Data: apipb.NewStruct(map[string]interface{}{ "text": "hello world", }), }) if err != nil { log.Print(err) return } fmt.Println(res.String())
Output:
func (*Client) SearchEdges ¶
func (c *Client) SearchEdges(ctx context.Context, in *apipb.Filter, opts ...grpc.CallOption) (*apipb.Edges, error)
Example ¶
owners, err := client.SearchEdges(context.Background(), &apipb.Filter{ Gtype: "owner", Expressions: []string{ `edge.attributes.primary_owner`, }, Limit: 1, }) if err != nil { log.Print(err) return } coleman := owners.GetEdges()[0] primary := coleman.Attributes.Fields["primary_owner"].GetBoolValue() fmt.Println(primary)
Output: true
func (*Client) SearchNodes ¶
func (c *Client) SearchNodes(ctx context.Context, in *apipb.Filter, opts ...grpc.CallOption) (*apipb.Nodes, error)
Example ¶
dogs, err := client.SearchNodes(context.Background(), &apipb.Filter{ Gtype: "dog", Expressions: []string{ `node.attributes.name.contains("Charl")`, }, Limit: 1, }) if err != nil { log.Print(err) return } dog := dogs.GetNodes()[0] name := dog.Attributes.Fields["name"].GetStringValue() fmt.Println(name)
Output: Charlie
func (*Client) Subscribe ¶
func (c *Client) Subscribe(ctx context.Context, in *apipb.ChannelFilter, opts ...grpc.CallOption) (apipb.GraphService_SubscribeClient, error)
Example ¶
m := machine.New(context.Background()) m.Go(func(routine machine.Routine) { stream, err := client.Subscribe(context.Background(), &apipb.ChannelFilter{ Channel: "testing", Expressions: nil, }) if err != nil { log.Print(err) return } for { msg, err := stream.Recv() if err != nil { log.Print(err) return } fmt.Println(msg.Data.GetFields()["text"].GetStringValue()) return } }) time.Sleep(1 * time.Second) _, err := client.Publish(context.Background(), &apipb.OutboundMessage{ Channel: "testing", Data: apipb.NewStruct(map[string]interface{}{ "text": "hello world", }), }) if err != nil { log.Print(err) return } m.Wait()
Output: hello world
type Opt ¶
type Opt func(o *Options)
func WithTokenSource ¶
func WithTokenSource(tokenSource oauth2.TokenSource) Opt
type Trigger ¶
type Trigger struct {
// contains filtered or unexported fields
}
Trigger is an optional/custom external plugin that when added to a Graphik instance, mutates objects at runtime before & after state changes. It should be deployed as a side car to a graphik instance(see Serve())
func NewTrigger ¶
func NewTrigger(fn TriggerFunc, expressions []string) *Trigger
Click to show internal directories.
Click to hide internal directories.