instance.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package ds_sdk
  2. import (
  3. "errors"
  4. "git.sxidc.com/go-tools/utils/fileutils"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/go-tools/utils/yaml/yaml_loader"
  7. "git.sxidc.com/service-supports/ds-sdk/client"
  8. "strings"
  9. )
  10. var sdkInstance *SDK
  11. func GetInstance() *SDK {
  12. return sdkInstance
  13. }
  14. func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error {
  15. if sdkInstance != nil {
  16. return nil
  17. }
  18. options := &Options{
  19. token: token,
  20. baseUrl: baseUrl,
  21. namespace: namespace,
  22. dataSource: dataSource,
  23. }
  24. for _, opt := range opts {
  25. opt(options)
  26. }
  27. c := client.New(options.timeout)
  28. err := initNamespace(c, options)
  29. if err != nil {
  30. return err
  31. }
  32. err = initDataSource(c, options)
  33. if err != nil {
  34. return err
  35. }
  36. err = initSqlResources(c, options)
  37. if err != nil {
  38. return err
  39. }
  40. sdkInstance = &SDK{
  41. options: options,
  42. client: c,
  43. }
  44. return nil
  45. }
  46. func initNamespace(c *client.Client, options *Options) error {
  47. namespaceInfos, err := c.GetNamespaces(options.token, options.baseUrl, options.namespace, 1, 1)
  48. if err != nil {
  49. return err
  50. }
  51. if namespaceInfos != nil && len(namespaceInfos) != 0 {
  52. return nil
  53. }
  54. err = c.CreateNamespace(options.token, options.baseUrl, options.namespace)
  55. if err != nil && !strings.Contains(err.Error(), "已存在") {
  56. return err
  57. }
  58. return nil
  59. }
  60. func initDataSource(c *client.Client, options *Options) error {
  61. dataSourceInfos, err := c.GetDataSources(options.token, options.baseUrl, options.namespace,
  62. options.dataSource.Name, options.dataSource.Type, 1, 1)
  63. if err != nil {
  64. return err
  65. }
  66. if dataSourceInfos != nil && len(dataSourceInfos) != 0 {
  67. return nil
  68. }
  69. err = c.CreateDataSource(options.token, options.baseUrl, options.namespace,
  70. options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec)
  71. if err != nil && !strings.Contains(err.Error(), "已存在") {
  72. return err
  73. }
  74. return nil
  75. }
  76. func initSqlResources(c *client.Client, options *Options) error {
  77. if strutils.IsStringEmpty(options.sqlResourcesDir) {
  78. return nil
  79. }
  80. if !fileutils.PathExists(options.sqlResourcesDir) {
  81. return errors.New("指定的SQL资源目录不存在")
  82. }
  83. files, err := fileutils.GetDirFiles(options.sqlResourcesDir)
  84. if err != nil {
  85. return err
  86. }
  87. for _, file := range files {
  88. err := yaml_loader.LoadYamlMapFile(file, func(objectMap map[string]any) error {
  89. })
  90. if err != nil {
  91. return err
  92. }
  93. }
  94. return nil
  95. }