instance.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package sdk
  2. import (
  3. "git.sxidc.com/service-supports/ds-sdk/client"
  4. "git.sxidc.com/service-supports/ds-sdk/db_operations"
  5. "strings"
  6. )
  7. var sdkInstance *SDK
  8. func GetInstance() *SDK {
  9. return sdkInstance
  10. }
  11. func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error {
  12. if sdkInstance != nil {
  13. return nil
  14. }
  15. options := &Options{
  16. token: token,
  17. baseUrl: baseUrl,
  18. namespace: namespace,
  19. dataSource: dataSource,
  20. }
  21. for _, opt := range opts {
  22. opt(options)
  23. }
  24. c := client.New(options.timeout)
  25. err := initNamespace(c, options)
  26. if err != nil {
  27. return err
  28. }
  29. err = initDataSource(c, options)
  30. if err != nil {
  31. return err
  32. }
  33. dbOperations, err := initDBOperations(options.dataSource.Spec)
  34. if err != nil {
  35. return err
  36. }
  37. sdkInstance = &SDK{
  38. options: options,
  39. client: c,
  40. dbOperations: dbOperations,
  41. }
  42. return nil
  43. }
  44. func initNamespace(c *client.Client, options *Options) error {
  45. namespaceInfos, err := c.GetNamespaces(options.token, options.baseUrl, options.namespace, 1, 1)
  46. if err != nil {
  47. return err
  48. }
  49. if namespaceInfos != nil && len(namespaceInfos) != 0 {
  50. return nil
  51. }
  52. err = c.CreateNamespace(options.token, options.baseUrl, options.namespace)
  53. if err != nil && !strings.Contains(err.Error(), "已存在") {
  54. return err
  55. }
  56. return nil
  57. }
  58. func initDataSource(c *client.Client, options *Options) error {
  59. dataSourceInfos, err := c.GetDataSources(options.token, options.baseUrl, options.namespace,
  60. options.dataSource.Name, options.dataSource.Type, 1, 1)
  61. if err != nil {
  62. return err
  63. }
  64. if dataSourceInfos != nil && len(dataSourceInfos) != 0 {
  65. return nil
  66. }
  67. err = c.CreateDataSource(options.token, options.baseUrl, options.namespace,
  68. options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec)
  69. if err != nil && !strings.Contains(err.Error(), "已存在") {
  70. return err
  71. }
  72. return nil
  73. }
  74. func initDBOperations(dataSourceSpec map[string]any) (db_operations.DBOperations, error) {
  75. return db_operations.NewOperationsFromMap(dataSourceSpec)
  76. }