observatory.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package conf
  2. import (
  3. "encoding/json"
  4. "github.com/golang/protobuf/proto"
  5. "github.com/v2fly/v2ray-core/v4/app/observatory/burst"
  6. "github.com/v2fly/v2ray-core/v4/app/observatory/multiObservatory"
  7. "github.com/v2fly/v2ray-core/v4/common/serial"
  8. "github.com/v2fly/v2ray-core/v4/app/observatory"
  9. "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon/duration"
  10. )
  11. type ObservatoryConfig struct {
  12. SubjectSelector []string `json:"subjectSelector"`
  13. ProbeURL string `json:"probeURL"`
  14. ProbeInterval duration.Duration `json:"probeInterval"`
  15. }
  16. func (o *ObservatoryConfig) Build() (proto.Message, error) {
  17. return &observatory.Config{SubjectSelector: o.SubjectSelector, ProbeUrl: o.ProbeURL, ProbeInterval: int64(o.ProbeInterval)}, nil
  18. }
  19. type BurstObservatoryConfig struct {
  20. SubjectSelector []string `json:"subjectSelector"`
  21. // health check settings
  22. HealthCheck *healthCheckSettings `json:"pingConfig,omitempty"`
  23. }
  24. func (b BurstObservatoryConfig) Build() (proto.Message, error) {
  25. if result, err := b.HealthCheck.Build(); err != nil {
  26. return &burst.Config{SubjectSelector: b.SubjectSelector, PingConfig: result.(*burst.HealthPingConfig)}, nil
  27. } else {
  28. return nil, err
  29. }
  30. }
  31. type MultiObservatoryItem struct {
  32. MemberType string `json:"type"`
  33. Tag string `json:"tag"`
  34. Value json.RawMessage `json:"settings"`
  35. }
  36. type MultiObservatoryConfig struct {
  37. Observers []MultiObservatoryItem `json:"observers"`
  38. }
  39. func (o *MultiObservatoryConfig) Build() (proto.Message, error) {
  40. ret := &multiObservatory.Config{}
  41. for _, v := range o.Observers {
  42. switch v.MemberType {
  43. case "burst":
  44. var burstObservatoryConfig BurstObservatoryConfig
  45. err := json.Unmarshal(v.Value, &burstObservatoryConfig)
  46. if err != nil {
  47. return nil, err
  48. }
  49. burstObservatoryConfigPb, err := burstObservatoryConfig.Build()
  50. if err != nil {
  51. return nil, err
  52. }
  53. ret.Holders.Features[v.Tag] = serial.ToTypedMessage(burstObservatoryConfigPb)
  54. break
  55. case "default":
  56. fallthrough
  57. default:
  58. var observatoryConfig ObservatoryConfig
  59. err := json.Unmarshal(v.Value, &observatoryConfig)
  60. if err != nil {
  61. return nil, err
  62. }
  63. observatoryConfigPb, err := observatoryConfig.Build()
  64. if err != nil {
  65. return nil, err
  66. }
  67. ret.Holders.Features[v.Tag] = serial.ToTypedMessage(observatoryConfigPb)
  68. }
  69. }
  70. return ret, nil
  71. }