You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

servicecontext.go 4.9 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. Copyright (c) [2023] [pcm]
  3. [pcm-coordinator] is licensed under Mulan PSL v2.
  4. You can use this software according to the terms and conditions of the Mulan PSL v2.
  5. You may obtain a copy of Mulan PSL v2 at:
  6. http://license.coscl.org.cn/MulanPSL2
  7. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  8. EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  9. MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  10. See the Mulan PSL v2 for more details.
  11. */
  12. package svc
  13. import (
  14. "github.com/aws/aws-sdk-go/aws"
  15. "github.com/aws/aws-sdk-go/aws/credentials"
  16. "github.com/aws/aws-sdk-go/aws/session"
  17. "github.com/aws/aws-sdk-go/service/s3/s3manager"
  18. "github.com/docker/docker/client"
  19. "github.com/redis/go-redis/v9"
  20. "github.com/robfig/cron/v3"
  21. "github.com/zeromicro/go-zero/core/logx"
  22. "github.com/zeromicro/go-zero/zrpc"
  23. "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient"
  24. "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/config"
  25. "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/utils"
  26. "gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/client/participantservice"
  27. "gitlink.org.cn/jcce-pcm/pcm-participant-ceph/cephclient"
  28. "gitlink.org.cn/jcce-pcm/pcm-participant-kubernetes/kubernetesclient"
  29. "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/imagesservice"
  30. "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/modelartsservice"
  31. "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopusclient"
  32. "gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstackclient"
  33. "gitlink.org.cn/jcce-pcm/pcm-slurm/slurmclient"
  34. "gorm.io/driver/mysql"
  35. "gorm.io/gorm"
  36. "gorm.io/gorm/schema"
  37. )
  38. type ServiceContext struct {
  39. Config config.Config
  40. RedisClient *redis.Client
  41. Cron *cron.Cron
  42. ModelArtsRpc modelartsservice.ModelArtsService
  43. ModelArtsImgRpc imagesservice.ImagesService
  44. DbEngin *gorm.DB
  45. ACRpc hpcacclient.HpcAC
  46. THRpc slurmclient.Slurm
  47. OctopusRpc octopusclient.Octopus
  48. CephRpc cephclient.Ceph
  49. OpenstackRpc openstackclient.Openstack
  50. DockerClient *client.Client
  51. Downloader *s3manager.Downloader
  52. Uploader *s3manager.Uploader
  53. K8sRpc map[int64]kubernetesclient.Kubernetes
  54. ParticipantRpc participantservice.ParticipantService
  55. }
  56. func NewServiceContext(c config.Config) *ServiceContext {
  57. // 创建s3 session
  58. session, _ := session.NewSession(&aws.Config{
  59. Credentials: credentials.NewStaticCredentials(c.MinioConf.AccessKey, c.MinioConf.Secret, ""), //使用静态凭据,硬编码
  60. Endpoint: aws.String(c.MinioConf.Endpoint), //配置端点
  61. Region: aws.String("default"), //配置区域
  62. DisableSSL: aws.Bool(false), //是否禁用https,这里表示不禁用,即使用HTTPS
  63. S3ForcePathStyle: aws.Bool(true), //使用路径样式而非虚拟主机样式,区别请参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
  64. })
  65. //添加snowflake支持
  66. err := utils.InitSnowflake(c.SnowflakeConf.MachineId)
  67. if err != nil {
  68. logx.Errorf("InitSnowflake err: ", err)
  69. panic("InitSnowflake err")
  70. }
  71. downloader := s3manager.NewDownloader(session)
  72. uploader := s3manager.NewUploader(session)
  73. //启动Gorm支持
  74. dbEngin, err := gorm.Open(mysql.Open(c.DB.DataSource), &gorm.Config{
  75. NamingStrategy: schema.NamingStrategy{
  76. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `t_user`
  77. },
  78. })
  79. if err != nil {
  80. logx.Error("gorm初始化错误:", err.Error())
  81. return nil
  82. }
  83. dockerClient, err := client.NewClientWithOpts()
  84. if err != nil {
  85. logx.Error(err.Error())
  86. return nil
  87. }
  88. redisClient := redis.NewClient(&redis.Options{
  89. Addr: c.Redis.Host,
  90. Password: c.Redis.Pass,
  91. })
  92. return &ServiceContext{
  93. Cron: cron.New(cron.WithSeconds()),
  94. DbEngin: dbEngin,
  95. Config: c,
  96. RedisClient: redisClient,
  97. ModelArtsRpc: modelartsservice.NewModelArtsService(zrpc.MustNewClient(c.ModelArtsRpcConf)),
  98. ModelArtsImgRpc: imagesservice.NewImagesService(zrpc.MustNewClient(c.ModelArtsImgRpcConf)),
  99. CephRpc: cephclient.NewCeph(zrpc.MustNewClient(c.CephRpcConf)),
  100. ACRpc: hpcacclient.NewHpcAC(zrpc.MustNewClient(c.ACRpcConf)),
  101. OctopusRpc: octopusclient.NewOctopus(zrpc.MustNewClient(c.OctopusRpcConf)),
  102. OpenstackRpc: openstackclient.NewOpenstack(zrpc.MustNewClient(c.OpenstackRpcConf)),
  103. K8sRpc: make(map[int64]kubernetesclient.Kubernetes),
  104. ParticipantRpc: participantservice.NewParticipantService(zrpc.MustNewClient(c.PcmCoreRpcConf)),
  105. DockerClient: dockerClient,
  106. Downloader: downloader,
  107. Uploader: uploader,
  108. }
  109. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.