grpc.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package eventsearcher
  2. import (
  3. "context"
  4. "time"
  5. "github.com/drakkan/sftpgo/v2/sdk/plugin/eventsearcher/proto"
  6. )
  7. const (
  8. rpcTimeout = 20 * time.Second
  9. )
  10. // GRPCClient is an implementation of Notifier interface that talks over RPC.
  11. type GRPCClient struct {
  12. client proto.SearcherClient
  13. }
  14. // SearchFsEvents implements the Searcher interface
  15. func (c *GRPCClient) SearchFsEvents(startTimestamp, endTimestamp int64, username, ip, sshCmd string, actions,
  16. protocols, instanceIDs, excludeIDs []string, statuses []int32, limit, order int,
  17. ) ([]byte, []string, []string, error) {
  18. ctx, cancel := context.WithTimeout(context.Background(), rpcTimeout)
  19. defer cancel()
  20. resp, err := c.client.SearchFsEvents(ctx, &proto.FsEventsFilter{
  21. StartTimestamp: startTimestamp,
  22. EndTimestamp: endTimestamp,
  23. Actions: actions,
  24. Username: username,
  25. Ip: ip,
  26. SshCmd: sshCmd,
  27. Protocols: protocols,
  28. InstanceIds: instanceIDs,
  29. Statuses: statuses,
  30. Limit: int32(limit),
  31. Order: proto.FsEventsFilter_Order(order),
  32. ExcludeIds: excludeIDs,
  33. })
  34. if err != nil {
  35. return nil, nil, nil, err
  36. }
  37. return resp.Data, resp.SameTsAtStart, resp.SameTsAtEnd, nil
  38. }
  39. // SearchProviderEvents implements the Searcher interface
  40. func (c *GRPCClient) SearchProviderEvents(startTimestamp, endTimestamp int64, username, ip, objectName string,
  41. limit, order int, actions, objectTypes, instanceIDs, excludeIDs []string,
  42. ) ([]byte, []string, []string, error) {
  43. ctx, cancel := context.WithTimeout(context.Background(), rpcTimeout)
  44. defer cancel()
  45. resp, err := c.client.SearchProviderEvents(ctx, &proto.ProviderEventsFilter{
  46. StartTimestamp: startTimestamp,
  47. EndTimestamp: endTimestamp,
  48. Actions: actions,
  49. Username: username,
  50. Ip: ip,
  51. ObjectTypes: objectTypes,
  52. ObjectName: objectName,
  53. InstanceIds: instanceIDs,
  54. Limit: int32(limit),
  55. Order: proto.ProviderEventsFilter_Order(order),
  56. ExcludeIds: excludeIDs,
  57. })
  58. if err != nil {
  59. return nil, nil, nil, err
  60. }
  61. return resp.Data, resp.SameTsAtStart, resp.SameTsAtEnd, nil
  62. }
  63. // GRPCServer defines the gRPC server that GRPCClient talks to.
  64. type GRPCServer struct {
  65. Impl Searcher
  66. }
  67. // SearchFsEvents implement the server side fs events search method
  68. func (s *GRPCServer) SearchFsEvents(ctx context.Context, req *proto.FsEventsFilter) (*proto.SearchResponse, error) {
  69. responseData, sameTsAtStart, sameTsAtEnd, err := s.Impl.SearchFsEvents(req.StartTimestamp,
  70. req.EndTimestamp, req.Username, req.Ip, req.SshCmd, req.Actions, req.Protocols, req.InstanceIds,
  71. req.ExcludeIds, req.Statuses, int(req.Limit), int(req.Order))
  72. return &proto.SearchResponse{
  73. Data: responseData,
  74. SameTsAtStart: sameTsAtStart,
  75. SameTsAtEnd: sameTsAtEnd,
  76. }, err
  77. }
  78. // SearchProviderEvents implement the server side provider events search method
  79. func (s *GRPCServer) SearchProviderEvents(ctx context.Context, req *proto.ProviderEventsFilter) (*proto.SearchResponse, error) {
  80. responseData, sameTsAtStart, sameTsAtEnd, err := s.Impl.SearchProviderEvents(req.StartTimestamp,
  81. req.EndTimestamp, req.Username, req.Ip, req.ObjectName, int(req.Limit),
  82. int(req.Order), req.Actions, req.ObjectTypes, req.InstanceIds, req.ExcludeIds)
  83. return &proto.SearchResponse{
  84. Data: responseData,
  85. SameTsAtStart: sameTsAtStart,
  86. SameTsAtEnd: sameTsAtEnd,
  87. }, err
  88. }