| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package eventsearcher
- import (
- "context"
- "time"
- "github.com/drakkan/sftpgo/v2/sdk/plugin/eventsearcher/proto"
- )
- const (
- rpcTimeout = 20 * time.Second
- )
- // GRPCClient is an implementation of Notifier interface that talks over RPC.
- type GRPCClient struct {
- client proto.SearcherClient
- }
- // SearchFsEvents implements the Searcher interface
- func (c *GRPCClient) SearchFsEvents(searchFilters *FsEventSearch) ([]byte, []string, []string, error) {
- ctx, cancel := context.WithTimeout(context.Background(), rpcTimeout)
- defer cancel()
- resp, err := c.client.SearchFsEvents(ctx, &proto.FsEventsFilter{
- StartTimestamp: searchFilters.StartTimestamp,
- EndTimestamp: searchFilters.EndTimestamp,
- Actions: searchFilters.Actions,
- Username: searchFilters.Username,
- Ip: searchFilters.IP,
- SshCmd: searchFilters.SSHCmd,
- Protocols: searchFilters.Protocols,
- InstanceIds: searchFilters.InstanceIDs,
- Statuses: searchFilters.Statuses,
- Limit: int32(searchFilters.Limit),
- ExcludeIds: searchFilters.ExcludeIDs,
- FsProvider: int32(searchFilters.FsProvider),
- Bucket: searchFilters.Bucket,
- Endpoint: searchFilters.Endpoint,
- Order: proto.FsEventsFilter_Order(searchFilters.Order),
- })
- if err != nil {
- return nil, nil, nil, err
- }
- return resp.Data, resp.SameTsAtStart, resp.SameTsAtEnd, nil
- }
- // SearchProviderEvents implements the Searcher interface
- func (c *GRPCClient) SearchProviderEvents(searchFilters *ProviderEventSearch) ([]byte, []string, []string, error) {
- ctx, cancel := context.WithTimeout(context.Background(), rpcTimeout)
- defer cancel()
- resp, err := c.client.SearchProviderEvents(ctx, &proto.ProviderEventsFilter{
- StartTimestamp: searchFilters.StartTimestamp,
- EndTimestamp: searchFilters.EndTimestamp,
- Actions: searchFilters.Actions,
- Username: searchFilters.Username,
- Ip: searchFilters.IP,
- ObjectTypes: searchFilters.ObjectTypes,
- ObjectName: searchFilters.ObjectName,
- InstanceIds: searchFilters.InstanceIDs,
- Limit: int32(searchFilters.Limit),
- ExcludeIds: searchFilters.ExcludeIDs,
- Order: proto.ProviderEventsFilter_Order(searchFilters.Order),
- })
- if err != nil {
- return nil, nil, nil, err
- }
- return resp.Data, resp.SameTsAtStart, resp.SameTsAtEnd, nil
- }
- // GRPCServer defines the gRPC server that GRPCClient talks to.
- type GRPCServer struct {
- Impl Searcher
- }
- // SearchFsEvents implements the server side fs events search method
- func (s *GRPCServer) SearchFsEvents(ctx context.Context, req *proto.FsEventsFilter) (*proto.SearchResponse, error) {
- responseData, sameTsAtStart, sameTsAtEnd, err := s.Impl.SearchFsEvents(&FsEventSearch{
- CommonSearchParams: CommonSearchParams{
- StartTimestamp: req.StartTimestamp,
- EndTimestamp: req.EndTimestamp,
- Actions: req.Actions,
- Username: req.Username,
- IP: req.Ip,
- InstanceIDs: req.InstanceIds,
- Limit: int(req.Limit),
- ExcludeIDs: req.ExcludeIds,
- Order: int(req.Order),
- },
- SSHCmd: req.SshCmd,
- Protocols: req.Protocols,
- Statuses: req.Statuses,
- FsProvider: int(req.FsProvider),
- Bucket: req.Bucket,
- Endpoint: req.Endpoint,
- })
- return &proto.SearchResponse{
- Data: responseData,
- SameTsAtStart: sameTsAtStart,
- SameTsAtEnd: sameTsAtEnd,
- }, err
- }
- // SearchProviderEvents implement the server side provider events search method
- func (s *GRPCServer) SearchProviderEvents(ctx context.Context, req *proto.ProviderEventsFilter) (*proto.SearchResponse, error) {
- responseData, sameTsAtStart, sameTsAtEnd, err := s.Impl.SearchProviderEvents(&ProviderEventSearch{
- CommonSearchParams: CommonSearchParams{
- StartTimestamp: req.StartTimestamp,
- EndTimestamp: req.EndTimestamp,
- Actions: req.Actions,
- Username: req.Username,
- IP: req.Ip,
- InstanceIDs: req.InstanceIds,
- Limit: int(req.Limit),
- ExcludeIDs: req.ExcludeIds,
- Order: int(req.Order),
- },
- ObjectTypes: req.ObjectTypes,
- ObjectName: req.ObjectName,
- })
- return &proto.SearchResponse{
- Data: responseData,
- SameTsAtStart: sameTsAtStart,
- SameTsAtEnd: sameTsAtEnd,
- }, err
- }
|