* rendering: headless chrome progress * renderer: minor change * grpc: version hell * updated grpc libs * wip: minor progess * rendering: new image rendering plugin is starting to work * feat: now phantomjs works as well and updated alerting to use new rendering service * refactor: renamed renderer package and service to rendering to make renderer name less confusing (rendering is internal service that handles the renderer plugin now) * rendering: now render key is passed and render auth is working in plugin mode * removed unneeded lines from gitignore * rendering: now plugin mode supports waiting for all panels to complete rendering * fix: LastSeenAt fix for render calls, was not set which causes a lot of updates to Last Seen at during rendering, this should fix sqlite db locked issues in seen in previous releases * change: changed render tz url parameter to use proper timezone name as chrome does not handle UTC offset TZ values * fix: another update to tz param generation * renderer: added http mode to renderer service, new ini setting [rendering] server_url
59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
// The plugin package exposes functions and helpers for communicating to
|
|
// plugins which are implemented as standalone binary applications.
|
|
//
|
|
// plugin.Client fully manages the lifecycle of executing the application,
|
|
// connecting to it, and returning the RPC client for dispensing plugins.
|
|
//
|
|
// plugin.Serve fully manages listeners to expose an RPC server from a binary
|
|
// that plugin.Client can connect to.
|
|
package plugin
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/rpc"
|
|
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
// Plugin is the interface that is implemented to serve/connect to an
|
|
// inteface implementation.
|
|
type Plugin interface {
|
|
// Server should return the RPC server compatible struct to serve
|
|
// the methods that the Client calls over net/rpc.
|
|
Server(*MuxBroker) (interface{}, error)
|
|
|
|
// Client returns an interface implementation for the plugin you're
|
|
// serving that communicates to the server end of the plugin.
|
|
Client(*MuxBroker, *rpc.Client) (interface{}, error)
|
|
}
|
|
|
|
// GRPCPlugin is the interface that is implemented to serve/connect to
|
|
// a plugin over gRPC.
|
|
type GRPCPlugin interface {
|
|
// GRPCServer should register this plugin for serving with the
|
|
// given GRPCServer. Unlike Plugin.Server, this is only called once
|
|
// since gRPC plugins serve singletons.
|
|
GRPCServer(*GRPCBroker, *grpc.Server) error
|
|
|
|
// GRPCClient should return the interface implementation for the plugin
|
|
// you're serving via gRPC. The provided context will be canceled by
|
|
// go-plugin in the event of the plugin process exiting.
|
|
GRPCClient(context.Context, *GRPCBroker, *grpc.ClientConn) (interface{}, error)
|
|
}
|
|
|
|
// NetRPCUnsupportedPlugin implements Plugin but returns errors for the
|
|
// Server and Client functions. This will effectively disable support for
|
|
// net/rpc based plugins.
|
|
//
|
|
// This struct can be embedded in your struct.
|
|
type NetRPCUnsupportedPlugin struct{}
|
|
|
|
func (p NetRPCUnsupportedPlugin) Server(*MuxBroker) (interface{}, error) {
|
|
return nil, errors.New("net/rpc plugin protocol not supported")
|
|
}
|
|
|
|
func (p NetRPCUnsupportedPlugin) Client(*MuxBroker, *rpc.Client) (interface{}, error) {
|
|
return nil, errors.New("net/rpc plugin protocol not supported")
|
|
}
|