instance.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package sdk
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "git.sxidc.com/service-supports/ds-sdk/client"
  6. "git.sxidc.com/service-supports/ds-sdk/db_operations"
  7. )
  8. var sdkInstance *SDK
  9. func GetInstance() *SDK {
  10. return sdkInstance
  11. }
  12. func InitInstance(token string, baseUrl string, namespace string, dataSource string, opts ...Option) error {
  13. if sdkInstance != nil {
  14. return nil
  15. }
  16. options := &Options{
  17. token: token,
  18. baseUrl: baseUrl,
  19. namespace: namespace,
  20. dataSource: dataSource,
  21. }
  22. for _, opt := range opts {
  23. opt(options)
  24. }
  25. c := client.New(options.timeout)
  26. dbOperations, err := initDBOperations(c, options)
  27. if err != nil {
  28. return err
  29. }
  30. sdkInstance = &SDK{
  31. options: options,
  32. client: c,
  33. dbOperations: dbOperations,
  34. }
  35. return nil
  36. }
  37. func initDBOperations(c *client.Client, options *Options) (db_operations.DBOperations, error) {
  38. dataSourceInfo, err := c.GetDataSources(options.token, options.baseUrl, options.namespace, options.dataSource,
  39. "database", 0, 0)
  40. if err != nil {
  41. return nil, err
  42. }
  43. if dataSourceInfo == nil || len(dataSourceInfo) == 0 {
  44. return nil, errors.New("不存在类型为database的数据源" + options.dataSource)
  45. }
  46. specStr, err := c.GetDataSourceSpec(options.token, options.baseUrl, options.namespace, options.dataSource)
  47. if err != nil {
  48. return nil, err
  49. }
  50. specMap := make(map[string]any)
  51. err = json.Unmarshal([]byte(specStr), &specMap)
  52. if err != nil {
  53. return nil, err
  54. }
  55. dbOperations, err := db_operations.NewOperationsFromMap(specMap)
  56. if err != nil {
  57. return nil, err
  58. }
  59. return dbOperations, nil
  60. }
  61. func DestroyInstance() error {
  62. if sdkInstance == nil {
  63. return nil
  64. }
  65. err := db_operations.DestroyOperation(sdkInstance.dbOperations.(*db_operations.Operations))
  66. if err != nil {
  67. return err
  68. }
  69. sdkInstance = nil
  70. return nil
  71. }