sqlite.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/crowdsecurity/crowdsec/pkg/sqlite"
  6. "github.com/crowdsecurity/crowdsec/pkg/types"
  7. log "github.com/sirupsen/logrus"
  8. )
  9. //nolint:unused // pluginDB is the interface for sqlite output plugin
  10. type pluginDB struct {
  11. CTX *sqlite.Context
  12. }
  13. func (p *pluginDB) Shutdown() error {
  14. p.CTX.PusherTomb.Kill(nil)
  15. if err := p.CTX.PusherTomb.Wait(); err != nil {
  16. return fmt.Errorf("DB shutdown error : %s", err)
  17. }
  18. return nil
  19. }
  20. func (p *pluginDB) StartAutoCommit() error {
  21. return p.CTX.StartAutoCommit()
  22. }
  23. func (p *pluginDB) Init(config map[string]string) error {
  24. var err error
  25. log.Debugf("sqlite config : %+v \n", config)
  26. p.CTX, err = sqlite.NewSQLite(config)
  27. if err != nil {
  28. return err
  29. }
  30. return nil
  31. }
  32. func (p *pluginDB) Delete(target string) (int, error) {
  33. nbDel, err := p.CTX.DeleteBan(target)
  34. if err != nil {
  35. return 0, err
  36. }
  37. log.Debugf("deleted '%d' entry from database", nbDel)
  38. return nbDel, nil
  39. }
  40. func (p *pluginDB) DeleteAll() error {
  41. err := p.CTX.DeleteAll()
  42. if err != nil {
  43. return err
  44. }
  45. return nil
  46. }
  47. func (p *pluginDB) Insert(sig types.SignalOccurence) error {
  48. err := p.CTX.WriteSignal(sig)
  49. if err != nil {
  50. return err
  51. }
  52. return nil
  53. }
  54. func (p *pluginDB) Flush() error {
  55. err := p.CTX.Flush()
  56. if err != nil {
  57. return err
  58. }
  59. return nil
  60. }
  61. func (p *pluginDB) ReadAT(timeAT time.Time) ([]map[string]string, error) {
  62. ret, err := p.CTX.GetBansAt(timeAT)
  63. if err != nil {
  64. return nil, err
  65. }
  66. return ret, nil
  67. }
  68. //nolint:deadcode,unused // New is used by the plugin system
  69. func New() interface{} {
  70. return &pluginDB{}
  71. }
  72. // empty main function is mandatory since we are in a main package
  73. func main() {}