default.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package contexts
  2. import (
  3. "context"
  4. "engine/common"
  5. "engine/xstream/api"
  6. "github.com/sirupsen/logrus"
  7. "time"
  8. )
  9. const LoggerKey = "$$logger"
  10. type DefaultContext struct {
  11. ruleId string
  12. opId string
  13. ctx context.Context
  14. }
  15. func Background() *DefaultContext {
  16. c := &DefaultContext{
  17. ctx:context.Background(),
  18. }
  19. return c
  20. }
  21. func WithValue(parent *DefaultContext, key, val interface{}) *DefaultContext {
  22. parent.ctx = context.WithValue(parent.ctx, key, val)
  23. return parent
  24. }
  25. //Implement context interface
  26. func (c *DefaultContext) Deadline() (deadline time.Time, ok bool){
  27. return c.ctx.Deadline()
  28. }
  29. func (c *DefaultContext) Done() <-chan struct{}{
  30. return c.ctx.Done()
  31. }
  32. func (c *DefaultContext) Err() error{
  33. return c.ctx.Err()
  34. }
  35. func (c *DefaultContext) Value(key interface{}) interface{}{
  36. return c.ctx.Value(key)
  37. }
  38. // Stream metas
  39. func (c *DefaultContext) GetContext() context.Context{
  40. return c.ctx
  41. }
  42. func (c *DefaultContext) GetLogger() *logrus.Entry {
  43. l, ok := c.ctx.Value(LoggerKey).(*logrus.Entry)
  44. if l != nil && ok {
  45. return l
  46. }
  47. return common.Log.WithField("caller", "default")
  48. }
  49. func (c *DefaultContext) GetRuleId() string {
  50. return c.ruleId
  51. }
  52. func (c *DefaultContext) GetOpId() string {
  53. return c.opId
  54. }
  55. func (c *DefaultContext) WithMeta(ruleId string, opId string) api.StreamContext{
  56. return &DefaultContext{
  57. ruleId: ruleId,
  58. opId: opId,
  59. ctx:c.ctx,
  60. }
  61. }
  62. func (c *DefaultContext) WithCancel() (api.StreamContext, context.CancelFunc) {
  63. ctx, cancel := context.WithCancel(c.ctx)
  64. return &DefaultContext{
  65. ruleId: c.ruleId,
  66. opId: c.opId,
  67. ctx: ctx,
  68. }, cancel
  69. }