sdk.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package ds_sdk
  2. import (
  3. "git.sxidc.com/service-supports/ds-sdk/client"
  4. )
  5. var sdkInstance *SDK
  6. func InitInstance(token string, baseUrl string, namespace string, opts ...Option) error {
  7. sdk, err := New(token, baseUrl, namespace, opts...)
  8. if err != nil {
  9. return err
  10. }
  11. sdkInstance = sdk
  12. return nil
  13. }
  14. func GetInstance() *SDK {
  15. return sdkInstance
  16. }
  17. type SDK struct {
  18. options *Options
  19. client *client.Client
  20. }
  21. func New(token string, baseUrl string, namespace string, opts ...Option) (*SDK, error) {
  22. options := &Options{
  23. token: token,
  24. baseUrl: baseUrl,
  25. namespace: namespace,
  26. }
  27. for _, opt := range opts {
  28. opt(options)
  29. }
  30. c := client.New(options.timeout)
  31. namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace)
  32. if err != nil {
  33. return nil, err
  34. }
  35. if namespaceInfos == nil || len(namespaceInfos) == 0 {
  36. err := c.CreateNamespace(token, baseUrl, namespace)
  37. if err != nil {
  38. return nil, err
  39. }
  40. }
  41. for _, dataSourceOption := range options.dataSourceMap {
  42. dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
  43. dataSourceOption.Name, dataSourceOption.Type)
  44. if err != nil {
  45. return nil, err
  46. }
  47. if dataSourceInfos == nil || len(dataSourceInfos) == 0 {
  48. err := c.CreateDataSource(token, baseUrl, namespace,
  49. dataSourceOption.Name, dataSourceOption.Type, dataSourceOption.Spec)
  50. if err != nil {
  51. return nil, err
  52. }
  53. }
  54. }
  55. return &SDK{
  56. options: options,
  57. client: c,
  58. }, nil
  59. }