graph

package
v0.23.0 Latest Latest
Warning

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

Go to latest
Published: May 17, 2019 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CacheOnlyMode int = iota
	DefaultMode
)

Define the running cache mode, memory and/or persistent

View Source
const (
	NodeUpdated graphEventType = iota + 1
	NodeAdded
	NodeDeleted
	EdgeUpdated
	EdgeAdded
	EdgeDeleted
)

Graph events

View Source
const (
	SortByInt64 int = iota + 1
	SortByString
)

Sort criterias

Variables

View Source
var (
	ErrElementNotFound = errors.New("Graph element not found")
	ErrNodeNotFound    = errors.New("Node not found")
	ErrEdgeNotFound    = errors.New("Edge not found")
	ErrParentNotFound  = errors.New("Parent node not found")
	ErrChildNotFound   = errors.New("Child node not found")
	ErrEdgeConflict    = errors.New("Edge ID conflict")
	ErrNodeConflict    = errors.New("Node ID conflict")
	ErrInternal        = errors.New("Internal backend error")
)

Graph errors

View Source
var (
	// NodeMetadataDecoders is a map that owns special type metadata decoder
	NodeMetadataDecoders = make(map[string]MetadataDecoder)
	// EdgeMetadataDecoders is a map that owns special type metadata decoder
	EdgeMetadataDecoders = make(map[string]MetadataDecoder)
)
View Source
var (
	ErrCacheBackendModeUnknown = errors.New("Cache backend mode unknown")
)

Cachebackend graph errors

Functions

func Hash

func Hash(values ...interface{}) string

Hash computes the hash of the passed parameters

func NewFilterForEdge

func NewFilterForEdge(parent Identifier, child Identifier) *filters.Filter

NewFilterForEdge creates a filter based on parent or child

func SortEdges

func SortEdges(edges []*Edge, sortBy string, sortOrder common.SortOrder)

SortEdges sorts a set of edges

func SortNodes

func SortNodes(nodes []*Node, sortBy string, sortOrder common.SortOrder)

SortNodes sorts a set of nodes

Types

type Backend

type Backend interface {
	NodeAdded(n *Node) error
	NodeDeleted(n *Node) error
	GetNode(i Identifier, at Context) []*Node
	GetNodeEdges(n *Node, at Context, m ElementMatcher) []*Edge

	EdgeAdded(e *Edge) error
	EdgeDeleted(e *Edge) error
	GetEdge(i Identifier, at Context) []*Edge
	GetEdgeNodes(e *Edge, at Context, parentMetadata, childMetadata ElementMatcher) ([]*Node, []*Node)

	MetadataUpdated(e interface{}) error

	GetNodes(t Context, m ElementMatcher) []*Node
	GetEdges(t Context, m ElementMatcher) []*Edge

	IsHistorySupported() bool
}

Backend interface mechanism used as storage

type CachedBackend

type CachedBackend struct {
	// contains filtered or unexported fields
}

CachedBackend describes a cache mechanism in memory and/or persistent database

func NewCachedBackend

func NewCachedBackend(persistent Backend) (*CachedBackend, error)

NewCachedBackend creates new graph cache mechanism

func (*CachedBackend) EdgeAdded

func (c *CachedBackend) EdgeAdded(e *Edge) error

EdgeAdded add an edge in the cache

func (*CachedBackend) EdgeDeleted

func (c *CachedBackend) EdgeDeleted(e *Edge) error

EdgeDeleted delete an edge in the cache

func (*CachedBackend) GetEdge

func (c *CachedBackend) GetEdge(i Identifier, t Context) []*Edge

GetEdge retrieve an edge within a time slice

func (*CachedBackend) GetEdgeNodes

func (c *CachedBackend) GetEdgeNodes(e *Edge, t Context, parentMetadata, childMetadata ElementMatcher) ([]*Node, []*Node)

GetEdgeNodes retrieve a list of nodes from an edge within a time slice, matching metadata

func (*CachedBackend) GetEdges

func (c *CachedBackend) GetEdges(t Context, m ElementMatcher) []*Edge

GetEdges returns a list of edges with a time slice, matching metadata

func (*CachedBackend) GetNode

func (c *CachedBackend) GetNode(i Identifier, t Context) []*Node

GetNode retrieve a node from the cache within a time slice

func (*CachedBackend) GetNodeEdges

func (c *CachedBackend) GetNodeEdges(n *Node, t Context, m ElementMatcher) (edges []*Edge)

GetNodeEdges retrieve a list of edges from a node within a time slice, matching metadata

func (*CachedBackend) GetNodes

func (c *CachedBackend) GetNodes(t Context, m ElementMatcher) []*Node

GetNodes returns a list of nodes with a time slice, matching metadata

func (*CachedBackend) IsHistorySupported

func (c *CachedBackend) IsHistorySupported() bool

IsHistorySupported returns whether the persistent backend supports history

func (*CachedBackend) MetadataUpdated

func (c *CachedBackend) MetadataUpdated(i interface{}) error

MetadataUpdated updates metadata

func (*CachedBackend) NodeAdded

func (c *CachedBackend) NodeAdded(n *Node) error

NodeAdded same the node in the cache

func (*CachedBackend) NodeDeleted

func (c *CachedBackend) NodeDeleted(n *Node) error

NodeDeleted Delete the node in the cache

func (*CachedBackend) SetMode

func (c *CachedBackend) SetMode(mode int)

SetMode set cache mode

type Context

type Context struct {
	TimeSlice *common.TimeSlice
	TimePoint bool
}

Context describes within time slice

type DefaultGraphListener

type DefaultGraphListener struct {
}

DefaultGraphListener default implementation of a graph listener, can be used when not implementing the whole set of callbacks

func (*DefaultGraphListener) OnEdgeAdded

func (c *DefaultGraphListener) OnEdgeAdded(e *Edge)

OnEdgeAdded event

func (*DefaultGraphListener) OnEdgeDeleted

func (c *DefaultGraphListener) OnEdgeDeleted(e *Edge)

OnEdgeDeleted event

func (*DefaultGraphListener) OnEdgeUpdated

func (c *DefaultGraphListener) OnEdgeUpdated(e *Edge)

OnEdgeUpdated event

func (*DefaultGraphListener) OnNodeAdded

func (c *DefaultGraphListener) OnNodeAdded(n *Node)

OnNodeAdded event

func (*DefaultGraphListener) OnNodeDeleted

func (c *DefaultGraphListener) OnNodeDeleted(n *Node)

OnNodeDeleted event

func (*DefaultGraphListener) OnNodeUpdated

func (c *DefaultGraphListener) OnNodeUpdated(n *Node)

OnNodeUpdated event

type DefaultLinker

type DefaultLinker struct {
}

DefaultLinker returns a linker that does nothing

func (dl *DefaultLinker) GetABLinks(node *Node) []*Edge

GetABLinks returns all the outgoing links for a node

func (dl *DefaultLinker) GetBALinks(node *Node) []*Edge

GetBALinks returns all the incoming links for a node

type Edge

type Edge struct {
	Parent Identifier
	Child  Identifier
	// contains filtered or unexported fields
}

Edge of the graph linked by a parent and a child

func CreateEdge

func CreateEdge(i Identifier, p *Node, c *Node, m Metadata, t Time, h string, s common.ServiceType) *Edge

CreateEdge returns a new edge not bound to any graph

func (*Edge) GetField

func (e *Edge) GetField(name string) (interface{}, error)

GetField returns the associated field name

func (*Edge) GetFieldInt64

func (e *Edge) GetFieldInt64(field string) (_ int64, err error)

func (*Edge) GetFieldKeys

func (e *Edge) GetFieldKeys() []string

func (*Edge) GetFieldString

func (e *Edge) GetFieldString(field string) (_ string, err error)

func (*Edge) GetFieldStringList

func (e *Edge) GetFieldStringList(name string) ([]string, error)

GetFieldStringList returns a list a string for the given field name

func (*Edge) MatchMetadata

func (e *Edge) MatchMetadata(f ElementMatcher) bool

MatchMetadata returns when an edge matches a specified filter or metadata

func (*Edge) String

func (e *Edge) String() string

func (*Edge) UnmarshalJSON

func (e *Edge) UnmarshalJSON(b []byte) error

UnmarshalJSON custom unmarshal function

type EdgePartiallyUpdated added in v0.23.0

type EdgePartiallyUpdated struct {
	Edge *Edge
	Ops  []PartiallyUpdatedOp
}

EdgePartiallyUpdated partial updates of a edge

type ElasticSearchBackend

type ElasticSearchBackend struct {
	Backend
	// contains filtered or unexported fields
}

ElasticSearchBackend describes a persistent backend based on ElasticSearch

func NewElasticSearchBackendFromClient

func NewElasticSearchBackendFromClient(client es.ClientInterface, electionService common.MasterElectionService) (*ElasticSearchBackend, error)

NewElasticSearchBackendFromClient creates a new graph backend using the given elasticsearch client connection

func NewElasticSearchBackendFromConfig

func NewElasticSearchBackendFromConfig(cfg es.Config, electionService common.MasterElectionService) (*ElasticSearchBackend, error)

NewElasticSearchBackendFromConfig creates a new graph backend from an ES configuration structure

func (*ElasticSearchBackend) EdgeAdded

func (b *ElasticSearchBackend) EdgeAdded(e *Edge) error

EdgeAdded add an edge in the database

func (*ElasticSearchBackend) EdgeDeleted

func (b *ElasticSearchBackend) EdgeDeleted(e *Edge) error

EdgeDeleted delete an edge in the database

func (*ElasticSearchBackend) GetEdge

func (b *ElasticSearchBackend) GetEdge(i Identifier, t Context) []*Edge

GetEdge get an edge within a time slice

func (*ElasticSearchBackend) GetEdgeNodes

func (b *ElasticSearchBackend) GetEdgeNodes(e *Edge, t Context, parentMetadata, childMetadata ElementMatcher) (parents []*Node, children []*Node)

GetEdgeNodes returns the parents and child nodes of an edge within time slice, matching metadatas

func (*ElasticSearchBackend) GetEdges

func (b *ElasticSearchBackend) GetEdges(t Context, m ElementMatcher) []*Edge

GetEdges returns a list of edges within time slice, matching metadata

func (*ElasticSearchBackend) GetNode

func (b *ElasticSearchBackend) GetNode(i Identifier, t Context) []*Node

GetNode get a node within a time slice

func (*ElasticSearchBackend) GetNodeEdges

func (b *ElasticSearchBackend) GetNodeEdges(n *Node, t Context, m ElementMatcher) (edges []*Edge)

GetNodeEdges returns a list of a node edges within time slice

func (*ElasticSearchBackend) GetNodes

func (b *ElasticSearchBackend) GetNodes(t Context, m ElementMatcher) []*Node

GetNodes returns a list of nodes within time slice, matching metadata

func (*ElasticSearchBackend) IsHistorySupported

func (b *ElasticSearchBackend) IsHistorySupported() bool

IsHistorySupported returns that this backend does support history

func (*ElasticSearchBackend) MetadataUpdated

func (b *ElasticSearchBackend) MetadataUpdated(i interface{}) error

MetadataUpdated updates a node metadata in the database

func (*ElasticSearchBackend) NodeAdded

func (b *ElasticSearchBackend) NodeAdded(n *Node) error

NodeAdded add a node

func (*ElasticSearchBackend) NodeDeleted

func (b *ElasticSearchBackend) NodeDeleted(n *Node) error

NodeDeleted delete a node

func (*ElasticSearchBackend) OnStarted

func (b *ElasticSearchBackend) OnStarted()

OnStarted implements storage client listener interface

func (*ElasticSearchBackend) Query

Query the database for a "node" or "edge"

type ElementFilter

type ElementFilter struct {
	// contains filtered or unexported fields
}

ElementFilter implements ElementMatcher interface based on filter

func NewElementFilter

func NewElementFilter(f *filters.Filter) *ElementFilter

NewElementFilter returns a new ElementFilter

func (*ElementFilter) Filter

func (mf *ElementFilter) Filter() (*filters.Filter, error)

Filter returns the filter

func (*ElementFilter) Match

func (mf *ElementFilter) Match(g common.Getter) bool

Match returns true if the given element matches the filter.

type ElementMatcher

type ElementMatcher interface {
	Match(g common.Getter) bool
	Filter() (*filters.Filter, error)
}

ElementMatcher defines an interface used to match an element

type Elements

type Elements struct {
	Nodes []*Node
	Edges []*Edge
}

Elements struct containing nodes and edges

type EventHandler

type EventHandler struct {
	common.RWMutex
	// contains filtered or unexported fields
}

EventHandler describes an object that notifies listeners with graph events

func NewEventHandler

func NewEventHandler(maxEvents int) *EventHandler

NewEventHandler instanciate a new event handler

func (*EventHandler) AddEventListener

func (g *EventHandler) AddEventListener(l EventListener)

AddEventListener subscribe a new graph listener

func (*EventHandler) NotifyEvent

func (g *EventHandler) NotifyEvent(kind graphEventType, element interface{})

NotifyEvent notifies all the listeners of an event. NotifyEvent makes sure that we don't enter a notify endless loop.

func (*EventHandler) RemoveEventListener

func (g *EventHandler) RemoveEventListener(l EventListener)

RemoveEventListener unsubscribe a graph listener

type EventListener

type EventListener interface {
	OnNodeUpdated(n *Node)
	OnNodeAdded(n *Node)
	OnNodeDeleted(n *Node)
	OnEdgeUpdated(e *Edge)
	OnEdgeAdded(e *Edge)
	OnEdgeDeleted(e *Edge)
}

EventListener describes the graph events interface mechanism

type Graph

type Graph struct {
	common.RWMutex
	// contains filtered or unexported fields
}

Graph describes the graph object based on events and context mechanism An associated backend is used as storage

func NewGraph

func NewGraph(host string, backend Backend, service common.ServiceType) *Graph

NewGraph creates a new graph based on the backend

func (*Graph) AddEdge

func (g *Graph) AddEdge(e *Edge) error

AddEdge in the graph

func (*Graph) AddEventListener

func (g *Graph) AddEventListener(l EventListener)

AddEventListener subscibe a new graph listener

func (*Graph) AddMetadata

func (g *Graph) AddMetadata(i interface{}, k string, v interface{}) error

AddMetadata add a metadata to an associated edge or node

func (*Graph) AddNode

func (g *Graph) AddNode(n *Node) error

AddNode in the graph

func (*Graph) AreLinked

func (g *Graph) AreLinked(n1 *Node, n2 *Node, m ElementMatcher) bool

AreLinked returns true if nodes n1, n2 are linked

func (*Graph) CloneWithContext

func (g *Graph) CloneWithContext(context Context) (*Graph, error)

CloneWithContext creates a new graph based on the given one and the given context

func (*Graph) CreateEdge

func (g *Graph) CreateEdge(i Identifier, p *Node, c *Node, m Metadata, t Time, h ...string) *Edge

CreateEdge creates a new edge and adds it to the graph

func (*Graph) CreateNode

func (g *Graph) CreateNode(i Identifier, m Metadata, t Time, h ...string) *Node

CreateNode creates a new node and adds it to the graph

func (*Graph) DelEdge

func (g *Graph) DelEdge(e *Edge) error

DelEdge delete an edge

func (*Graph) DelMetadata

func (g *Graph) DelMetadata(i interface{}, k string) error

DelMetadata delete a metadata to an associated edge or node

func (*Graph) DelNode

func (g *Graph) DelNode(n *Node) error

DelNode delete the node n in the graph

func (*Graph) DelNodes

func (g *Graph) DelNodes(m ElementMatcher) error

DelNodes deletes nodes for given matcher

func (*Graph) Diff

func (g *Graph) Diff(newGraph *Graph) (addedNodes []*Node, removedNodes []*Node, addedEdges []*Edge, removedEdges []*Edge)

Diff computes the difference between two graphs

func (*Graph) EdgeAdded

func (g *Graph) EdgeAdded(e *Edge) error

EdgeAdded add an edge

func (*Graph) EdgeDeleted

func (g *Graph) EdgeDeleted(e *Edge) error

EdgeDeleted event

func (*Graph) EdgeUpdated

func (g *Graph) EdgeUpdated(e *Edge) error

EdgeUpdated updates an edge

func (*Graph) Elements

func (g *Graph) Elements() *Elements

Elements returns graph elements

func (*Graph) GetContext

func (g *Graph) GetContext() Context

GetContext returns the current context

func (*Graph) GetEdge

func (g *Graph) GetEdge(i Identifier) *Edge

GetEdge with Identifier i

func (*Graph) GetEdgeNodes

func (g *Graph) GetEdgeNodes(e *Edge, parentMetadata, childMetadata ElementMatcher) ([]*Node, []*Node)

GetEdgeNodes returns a list of nodes of an edge

func (*Graph) GetEdges

func (g *Graph) GetEdges(m ElementMatcher) []*Edge

GetEdges returns a list of edges

func (g *Graph) GetFirstLink(parent, child *Node, metadata Metadata) *Edge

GetFirstLink get Link between the parent and the child node

func (*Graph) GetHost

func (g *Graph) GetHost() string

GetHost returns the graph host

func (*Graph) GetNode

func (g *Graph) GetNode(i Identifier) *Node

GetNode from Identifier

func (*Graph) GetNodeEdges

func (g *Graph) GetNodeEdges(n *Node, m ElementMatcher) []*Edge

GetNodeEdges returns a list of edges of a node

func (*Graph) GetNodes

func (g *Graph) GetNodes(m ElementMatcher) []*Node

GetNodes returns a list of nodes

func (*Graph) GetNodesMap

func (g *Graph) GetNodesMap(t Context) map[Identifier]*Node

GetNodesMap returns a map of nodes within a time slice

func (g *Graph) Link(n1 *Node, n2 *Node, m Metadata, h ...string) (*Edge, error)

Link the nodes n1, n2 with a new edge

func (*Graph) LookupChildren

func (g *Graph) LookupChildren(n *Node, f ElementMatcher, em ElementMatcher) (nodes []*Node)

LookupChildren returns a list of children nodes

func (*Graph) LookupFirstChild

func (g *Graph) LookupFirstChild(n *Node, f ElementMatcher) *Node

LookupFirstChild returns the child

func (*Graph) LookupFirstNode

func (g *Graph) LookupFirstNode(m ElementMatcher) *Node

LookupFirstNode returns the fist node matching metadata

func (*Graph) LookupParents

func (g *Graph) LookupParents(n *Node, f ElementMatcher, em ElementMatcher) (nodes []*Node)

LookupParents returns the associated parents edge of a node

func (*Graph) LookupShortestPath

func (g *Graph) LookupShortestPath(n *Node, m ElementMatcher, em ElementMatcher) []*Node

LookupShortestPath based on Dijkstra algorithm

func (*Graph) MarshalJSON

func (g *Graph) MarshalJSON() ([]byte, error)

MarshalJSON serialize the graph in JSON

func (*Graph) NewEdge

func (g *Graph) NewEdge(i Identifier, p *Node, c *Node, m Metadata, h ...string) (*Edge, error)

NewEdge creates a new edge in the graph based on Identifier, parent, child nodes and metadata

func (*Graph) NewNode

func (g *Graph) NewNode(i Identifier, m Metadata, h ...string) (*Node, error)

NewNode creates a new node in the graph with attached metadata

func (*Graph) NodeAdded

func (g *Graph) NodeAdded(n *Node) error

NodeAdded in the graph

func (*Graph) NodeDeleted

func (g *Graph) NodeDeleted(n *Node) error

NodeDeleted event

func (*Graph) NodeUpdated

func (g *Graph) NodeUpdated(n *Node) error

NodeUpdated updates a node

func (*Graph) Origin

func (g *Graph) Origin() string

Origin returns service type with host name

func (*Graph) RemoveEventListener

func (g *Graph) RemoveEventListener(l EventListener)

RemoveEventListener unsubscribe a graph listener

func (*Graph) SetMetadata

func (g *Graph) SetMetadata(i interface{}, m Metadata) error

SetMetadata associate metadata to an edge or node

func (*Graph) StartMetadataTransaction

func (g *Graph) StartMetadataTransaction(i interface{}) *MetadataTransaction

StartMetadataTransaction start a new transaction

func (*Graph) String

func (g *Graph) String() string
func (g *Graph) Unlink(n1 *Node, n2 *Node) error

Unlink the nodes n1, n2 ; delete the associated edge

type Identifier

type Identifier string

Identifier graph ID

func GenID

func GenID(s ...string) Identifier

GenID helper generate a node Identifier

type Indexer

type Indexer struct {
	common.RWMutex
	DefaultGraphListener
	// contains filtered or unexported fields
}

Indexer provides a way to index graph nodes. A node can be mapped to multiple hash,value pairs. A hash can also be mapped to multiple nodes.

func NewIndexer

func NewIndexer(g *Graph, listenerHandler ListenerHandler, hashNode NodeHasher, appendOnly bool) *Indexer

NewIndexer returns a new graph indexer with the associated hashing callback

func (*Indexer) AddEventListener

func (i *Indexer) AddEventListener(l EventListener)

AddEventListener subscribes a new graph listener

func (*Indexer) FromHash

func (i *Indexer) FromHash(hash string) (nodes []*Node, values []interface{})

FromHash returns the nodes mapped by a hash along with their associated values

func (*Indexer) Get

func (i *Indexer) Get(values ...interface{}) ([]*Node, []interface{})

Get computes the hash of the passed parameters and returns the matching nodes with their respective value

func (*Indexer) GetNode added in v0.23.0

func (i *Indexer) GetNode(values ...interface{}) (*Node, interface{})

GetNode computes the hash of the passed parameters and returns the first matching node with its respective value

func (*Indexer) Index added in v0.23.0

func (i *Indexer) Index(id Identifier, n *Node, kv map[string]interface{})

Index indexes a node with a set of hash -> value map

func (*Indexer) OnNodeAdded

func (i *Indexer) OnNodeAdded(n *Node)

OnNodeAdded event

func (*Indexer) OnNodeDeleted

func (i *Indexer) OnNodeDeleted(n *Node)

OnNodeDeleted event

func (*Indexer) OnNodeUpdated

func (i *Indexer) OnNodeUpdated(n *Node)

OnNodeUpdated event

func (*Indexer) RemoveEventListener

func (i *Indexer) RemoveEventListener(l EventListener)

RemoveEventListener unsubscribe a graph listener

func (*Indexer) Start

func (i *Indexer) Start()

Start registers the graph indexer as a graph listener

func (*Indexer) Stop

func (i *Indexer) Stop()

Stop removes the graph indexer from the graph listeners

func (*Indexer) Unindex added in v0.23.0

func (i *Indexer) Unindex(id Identifier, n *Node)

Unindex removes the node and its associated hashes from the index

type Linker

type Linker interface {
	GetABLinks(node *Node) []*Edge
	GetBALinks(node *Node) []*Edge
}

Linker describes an object that returns incoming edges to a node and outgoing edges from that node

type LinkerEventListener

type LinkerEventListener interface {
	OnError(err error)
}

LinkerEventListener defines the event interface for linker

type ListenerHandler

type ListenerHandler interface {
	AddEventListener(l EventListener)
	RemoveEventListener(l EventListener)
}

ListenerHandler describes an other that manages a set of event listeners

type MemoryBackend

type MemoryBackend struct {
	Backend
	// contains filtered or unexported fields
}

MemoryBackend describes the memory backend

func NewMemoryBackend

func NewMemoryBackend() (*MemoryBackend, error)

NewMemoryBackend creates a new graph memory backend

func (*MemoryBackend) EdgeAdded

func (m *MemoryBackend) EdgeAdded(e *Edge) error

EdgeAdded event add an edge in the memory backend

func (*MemoryBackend) EdgeDeleted

func (m *MemoryBackend) EdgeDeleted(e *Edge) error

EdgeDeleted in the graph backend

func (*MemoryBackend) GetEdge

func (m *MemoryBackend) GetEdge(i Identifier, t Context) []*Edge

GetEdge in the graph backend

func (*MemoryBackend) GetEdgeNodes

func (m *MemoryBackend) GetEdgeNodes(e *Edge, t Context, parentMetadata, childMetadata ElementMatcher) ([]*Node, []*Node)

GetEdgeNodes returns a list of nodes of an edge

func (MemoryBackend) GetEdges

func (m MemoryBackend) GetEdges(t Context, metadata ElementMatcher) (edges []*Edge)

GetEdges from the graph backend

func (*MemoryBackend) GetNode

func (m *MemoryBackend) GetNode(i Identifier, t Context) []*Node

GetNode from the graph backend

func (*MemoryBackend) GetNodeEdges

func (m *MemoryBackend) GetNodeEdges(n *Node, t Context, meta ElementMatcher) []*Edge

GetNodeEdges returns a list of edges of a node

func (MemoryBackend) GetNodes

func (m MemoryBackend) GetNodes(t Context, metadata ElementMatcher) (nodes []*Node)

GetNodes from the graph backend

func (*MemoryBackend) IsHistorySupported

func (m *MemoryBackend) IsHistorySupported() bool

IsHistorySupported returns that this backend doesn't support history

func (*MemoryBackend) MetadataUpdated

func (m *MemoryBackend) MetadataUpdated(i interface{}) error

MetadataUpdated return true

func (*MemoryBackend) NodeAdded

func (m *MemoryBackend) NodeAdded(n *Node) error

NodeAdded in the graph backend

func (*MemoryBackend) NodeDeleted

func (m *MemoryBackend) NodeDeleted(n *Node) error

NodeDeleted in the graph backend

type MemoryBackendEdge

type MemoryBackendEdge struct {
	*Edge
}

MemoryBackendEdge a memory backend edge

func (MemoryBackendEdge) GetFieldInt64

func (e MemoryBackendEdge) GetFieldInt64(field string) (_ int64, err error)

func (MemoryBackendEdge) GetFieldKeys

func (e MemoryBackendEdge) GetFieldKeys() []string

func (MemoryBackendEdge) GetFieldString

func (e MemoryBackendEdge) GetFieldString(field string) (_ string, err error)

func (MemoryBackendEdge) GetFieldStringList

func (e MemoryBackendEdge) GetFieldStringList(name string) ([]string, error)

GetFieldStringList returns a list a string for the given field name

type MemoryBackendNode

type MemoryBackendNode struct {
	*Node
	// contains filtered or unexported fields
}

MemoryBackendNode a memory backend node

func (MemoryBackendNode) GetField

func (e MemoryBackendNode) GetField(name string) (interface{}, error)

func (MemoryBackendNode) GetFieldInt64

func (e MemoryBackendNode) GetFieldInt64(field string) (_ int64, err error)

func (MemoryBackendNode) GetFieldKeys

func (e MemoryBackendNode) GetFieldKeys() []string

func (MemoryBackendNode) GetFieldString

func (e MemoryBackendNode) GetFieldString(field string) (_ string, err error)

func (MemoryBackendNode) GetFieldStringList

func (e MemoryBackendNode) GetFieldStringList(name string) ([]string, error)

GetFieldStringList returns a list a string for the given field name

func (MemoryBackendNode) MatchMetadata

func (e MemoryBackendNode) MatchMetadata(f ElementMatcher) bool

MatchMetadata returns whether a graph element matches with the provided filter or metadata

type Metadata

type Metadata map[string]interface{}

Metadata describes the graph node metadata type. It implements ElementMatcher based only on Metadata. easyjson:json

func (Metadata) Filter

func (m Metadata) Filter() (*filters.Filter, error)

Filter returns a filter corresponding to the metadata

func (Metadata) Match

func (m Metadata) Match(g common.Getter) bool

Match returns true if the the given element matches the metadata.

func (*Metadata) SetField

func (m *Metadata) SetField(k string, v interface{}) bool

SetField set metadata value based on dot key ("a.b.c.d" = "ok")

func (*Metadata) SetFieldAndNormalize

func (m *Metadata) SetFieldAndNormalize(k string, v interface{}) bool

SetFieldAndNormalize set metadata value after normalization (and deepcopy)

func (Metadata) String

func (m Metadata) String() string

type MetadataDecoder

type MetadataDecoder func(raw json.RawMessage) (common.Getter, error)

MetadataDecoder defines a json rawmessage decoder which has to return a object implementing the getter interface

type MetadataIndexer

type MetadataIndexer struct {
	*Indexer
	// contains filtered or unexported fields
}

MetadataIndexer describes a metadata based graph indexer

func NewMetadataIndexer

func NewMetadataIndexer(g *Graph, listenerHandler ListenerHandler, m ElementMatcher, indexes ...string) (indexer *MetadataIndexer)

NewMetadataIndexer returns a new metadata graph indexer for the nodes matching the graph filter `m`, indexing the metadata with `indexes`

type MetadataIndexerLinker

type MetadataIndexerLinker struct {
	*ResourceLinker
	// contains filtered or unexported fields
}

MetadataIndexerLinker describes an object that links resources from one indexer to resources from an other indexer.

func NewMetadataIndexerLinker

func NewMetadataIndexerLinker(g *Graph, indexer1, indexer2 *MetadataIndexer, edgeMetadata Metadata) *MetadataIndexerLinker

NewMetadataIndexerLinker returns a new metadata based linker

func (mil *MetadataIndexerLinker) GetABLinks(node *Node) (edges []*Edge)

GetABLinks returns all the outgoing links for a node

func (mil *MetadataIndexerLinker) GetBALinks(node *Node) (edges []*Edge)

GetBALinks returns all the incoming links for a node

type MetadataTransaction

type MetadataTransaction struct {
	// contains filtered or unexported fields
}

MetadataTransaction describes a metadata transaction in the graph

func (*MetadataTransaction) AddMetadata

func (t *MetadataTransaction) AddMetadata(k string, v interface{})

AddMetadata in the current transaction

func (*MetadataTransaction) Commit

func (t *MetadataTransaction) Commit() error

Commit the current transaction to the graph

func (*MetadataTransaction) DelMetadata

func (t *MetadataTransaction) DelMetadata(k string)

DelMetadata in the current transaction

type Node

type Node struct {
	// contains filtered or unexported fields
}

Node of the graph

func CreateNode

func CreateNode(i Identifier, m Metadata, t Time, h string, s common.ServiceType) *Node

CreateNode returns a new node not bound to a graph

func (*Node) GetField

func (e *Node) GetField(name string) (interface{}, error)

func (*Node) GetFieldInt64

func (e *Node) GetFieldInt64(field string) (_ int64, err error)

func (*Node) GetFieldKeys

func (e *Node) GetFieldKeys() []string

func (*Node) GetFieldString

func (e *Node) GetFieldString(field string) (_ string, err error)

func (*Node) GetFieldStringList

func (e *Node) GetFieldStringList(name string) ([]string, error)

GetFieldStringList returns a list a string for the given field name

func (*Node) MatchMetadata

func (e *Node) MatchMetadata(f ElementMatcher) bool

MatchMetadata returns whether a graph element matches with the provided filter or metadata

func (*Node) String

func (n *Node) String() string

func (*Node) UnmarshalJSON

func (n *Node) UnmarshalJSON(b []byte) error

UnmarshalJSON custom unmarshal function

type NodeAction

type NodeAction interface {
	ProcessNode(g *Graph, n *Node) bool
}

NodeAction is a callback to perform on a node. The action is kept active as long as it returns true.

type NodeHasher

type NodeHasher func(n *Node) map[string]interface{}

NodeHasher describes a callback that is called to map a node to a set of hash,value pairs

type NodePartiallyUpdated added in v0.23.0

type NodePartiallyUpdated struct {
	Node *Node
	Ops  []PartiallyUpdatedOp
}

NodePartiallyUpdated partial updates of a node

type OrientDBBackend

type OrientDBBackend struct {
	Backend
	// contains filtered or unexported fields
}

OrientDBBackend describes an OrientDB backend

func NewOrientDBBackend

func NewOrientDBBackend(addr string, database string, username string, password string, electionService common.MasterElectionService) (*OrientDBBackend, error)

NewOrientDBBackend creates a new graph backend and connect to an OrientDB instance

func (*OrientDBBackend) EdgeAdded

func (o *OrientDBBackend) EdgeAdded(e *Edge) error

EdgeAdded add a node in the database

func (*OrientDBBackend) EdgeDeleted

func (o *OrientDBBackend) EdgeDeleted(e *Edge) error

EdgeDeleted delete a node in the database

func (*OrientDBBackend) GetEdge

func (o *OrientDBBackend) GetEdge(i Identifier, t Context) []*Edge

GetEdge get an edge within a time slice

func (*OrientDBBackend) GetEdgeNodes

func (o *OrientDBBackend) GetEdgeNodes(e *Edge, t Context, parentMetadata, childMetadata ElementMatcher) (parents []*Node, children []*Node)

GetEdgeNodes returns the parents and child nodes of an edge within time slice, matching metadata

func (*OrientDBBackend) GetEdges

func (o *OrientDBBackend) GetEdges(t Context, m ElementMatcher) (edges []*Edge)

GetEdges returns a list of edges within time slice, matching metadata

func (*OrientDBBackend) GetNode

func (o *OrientDBBackend) GetNode(i Identifier, t Context) (nodes []*Node)

GetNode get a node within a time slice

func (*OrientDBBackend) GetNodeEdges

func (o *OrientDBBackend) GetNodeEdges(n *Node, t Context, m ElementMatcher) (edges []*Edge)

GetNodeEdges returns a list of a node edges within time slice

func (*OrientDBBackend) GetNodes

func (o *OrientDBBackend) GetNodes(t Context, m ElementMatcher) (nodes []*Node)

GetNodes returns a list of nodes within time slice, matching metadata

func (*OrientDBBackend) IsHistorySupported

func (o *OrientDBBackend) IsHistorySupported() bool

IsHistorySupported returns that this backend does support history

func (*OrientDBBackend) MetadataUpdated

func (o *OrientDBBackend) MetadataUpdated(i interface{}) error

MetadataUpdated returns true if a metadata has been updated in the database, based on ArchivedAt

func (*OrientDBBackend) NodeAdded

func (o *OrientDBBackend) NodeAdded(n *Node) error

NodeAdded add a node in the database

func (*OrientDBBackend) NodeDeleted

func (o *OrientDBBackend) NodeDeleted(n *Node) error

NodeDeleted delete a node in the database

func (*OrientDBBackend) OnStarted

func (o *OrientDBBackend) OnStarted()

OnStarted implements storage client listener interface

type PartiallyUpdatedOp added in v0.23.0

type PartiallyUpdatedOp struct {
	Type  PartiallyUpdatedOpType
	Key   string
	Value interface{}
}

PartiallyUpdatedOp describes a way to update partially node or edge

type PartiallyUpdatedOpType added in v0.23.0

type PartiallyUpdatedOpType int

PartiallyUpdatedOpType operation type add/del

const (
	// PartiallyUpdatedAddOpType add metadata
	PartiallyUpdatedAddOpType PartiallyUpdatedOpType = iota + 1
	// PartiallyUpdatedDelOpType del metadata
	PartiallyUpdatedDelOpType
)

type Processor

type Processor struct {
	common.RWMutex
	DefaultGraphListener
	MetadataIndexer *MetadataIndexer
	// contains filtered or unexported fields
}

Processor encapsulates an indexer that will process NodeActions on the nodes that filter

func NewProcessor

func NewProcessor(g *Graph, listenerHandler ListenerHandler, m ElementMatcher, indexes ...string) (processor *Processor)

NewProcessor creates a Processor on the graph g, a stream of events controlled by listenerHandler, that match a first set of metadata m. Actions will be associated to a given set of values for indexes.

func (*Processor) Cancel

func (processor *Processor) Cancel(values ...interface{})

Cancel the actions attached to a given set of values.

func (*Processor) DoAction

func (processor *Processor) DoAction(action NodeAction, values ...interface{})

DoAction will perform the action for nodes matching values.

func (*Processor) OnNodeAdded

func (processor *Processor) OnNodeAdded(n *Node)

OnNodeAdded event

func (*Processor) OnNodeUpdated added in v0.23.0

func (processor *Processor) OnNodeUpdated(n *Node)

OnNodeUpdated event

func (*Processor) Start

func (processor *Processor) Start()

Start starts the processor

func (*Processor) Stop

func (processor *Processor) Stop()

Stop stops the processor

type ResourceLinker

type ResourceLinker struct {
	common.RWMutex
	// contains filtered or unexported fields
}

ResourceLinker returns a resource linker. It listens for events from 2 graph events sources to determine if resources from one source should be linked with resources of the other source.

func NewResourceLinker

func NewResourceLinker(g *Graph, glhs1 []ListenerHandler, glhs2 []ListenerHandler, linker Linker, m Metadata) *ResourceLinker

NewResourceLinker returns a new resource linker

func (*ResourceLinker) AddEventListener

func (rl *ResourceLinker) AddEventListener(l LinkerEventListener)

AddEventListener subscribe a new linker listener

func (*ResourceLinker) RemoveEventListener

func (rl *ResourceLinker) RemoveEventListener(l LinkerEventListener)

RemoveEventListener unsubscribe a linker listener

func (*ResourceLinker) Start

func (rl *ResourceLinker) Start()

Start linking resources by listening for graph events

func (*ResourceLinker) Stop

func (rl *ResourceLinker) Stop()

Stop linking resources

type Time

type Time time.Time

Time describes time type used in the graph

func TimeUTC

func TimeUTC() Time

TimeUTC creates a Time with now UTC

func Unix

func Unix(sec int64, nsec int64) Time

Unix returns Time for given sec, nsec

func (Time) IsZero

func (t Time) IsZero() bool

IsZero returns is empty or not

func (*Time) MarshalJSON

func (t *Time) MarshalJSON() ([]byte, error)

MarshalJSON custom marshalling function

func (Time) Unix

func (t Time) Unix() int64

Unix returns the time in millisecond

func (*Time) UnmarshalJSON

func (t *Time) UnmarshalJSON(b []byte) error

UnmarshalJSON custom unmarshalling function

type TimedSearchQuery

type TimedSearchQuery struct {
	filters.SearchQuery
	TimeFilter     *filters.Filter
	MetadataFilter *filters.Filter
}

TimedSearchQuery describes a search query within a time slice and metadata filters

Source Files

  • cachedbackend.go
  • elasticsearch.go
  • filters.go
  • graph.go
  • indexer.go
  • linker.go
  • memory.go
  • orientdb.go
  • processor.go
  • sort.go
  • time.go

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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