#2 master5.6

Merged
liwei_release merged 33 commits from OpenI/octopus:master into master 2 years ago
  1. +1
    -1
      admin-portal/src/utils/index.js
  2. +1
    -1
      admin-portal/src/views/resourceManager/components/nodeList.vue
  3. +1
    -1
      deploy/charts/octopus/templates/openai-server.yaml
  4. +5
    -4
      deploy/charts/octopus/values.yaml
  5. +1
    -1
      openai-portal/src/App.vue
  6. +0
    -7
      openai-portal/src/api/Home.js
  7. +64
    -80
      openai-portal/src/layout/components/Navbar.vue
  8. +1
    -1
      openai-portal/src/permission.js
  9. +1
    -1
      openai-portal/src/store/getters.js
  10. +0
    -6
      openai-portal/src/store/modules/user.js
  11. +4
    -1
      openai-portal/src/utils/request.js
  12. +1
    -1
      openai-portal/src/views/GeneralView/index.vue
  13. +17
    -11
      openai-portal/src/views/Home/firstPage.vue
  14. +1
    -1
      openai-portal/src/views/Home/register.vue
  15. +1
    -1
      openai-portal/src/views/deployManager/components/dialogForm.vue
  16. +1
    -4
      server/admin-server/internal/data/data.go
  17. +0
    -50
      server/admin-server/internal/data/session/session.go
  18. +0
    -33
      server/admin-server/internal/service/user.go
  19. +8
    -5
      server/base-server/api/v1/trainJob.proto
  20. +1
    -0
      server/base-server/internal/data/dao/model/train_job.go
  21. +15
    -13
      server/base-server/internal/data/dao/user.go
  22. +48
    -28
      server/base-server/internal/service/trainjob/train_job.go
  23. +21
    -0
      server/common/context/context.go
  24. +3
    -0
      server/common/jwt/jwt.go
  25. +66
    -66
      server/common/middleware/session/jwt_session.go
  26. +23
    -23
      server/common/session/context.go
  27. +53
    -53
      server/common/session/session.go
  28. +108
    -108
      server/common/session/store.go
  29. +13
    -10
      server/openai-server/api/v1/trainJob.proto
  30. +0
    -16
      server/openai-server/api/v1/user.proto
  31. +0
    -3
      server/openai-server/internal/data/data.go
  32. +0
    -51
      server/openai-server/internal/data/session/session.go
  33. +45
    -21
      server/openai-server/internal/server/http.go
  34. +15
    -87
      server/openai-server/internal/service/algorithm.go
  35. +26
    -52
      server/openai-server/internal/service/auth.go
  36. +14
    -38
      server/openai-server/internal/service/billing.go
  37. +40
    -107
      server/openai-server/internal/service/dataset.go
  38. +15
    -48
      server/openai-server/internal/service/develop.go
  39. +10
    -30
      server/openai-server/internal/service/image.go
  40. +4
    -33
      server/openai-server/internal/service/jointcloud.go
  41. +9
    -55
      server/openai-server/internal/service/model.go
  42. +15
    -30
      server/openai-server/internal/service/modeldeploy.go
  43. +6
    -21
      server/openai-server/internal/service/resourcespec.go
  44. +29
    -63
      server/openai-server/internal/service/trainjob.go
  45. +2
    -60
      server/openai-server/internal/service/user.go

+ 1
- 1
admin-portal/src/utils/index.js View File

@@ -117,7 +117,7 @@ export function param2Obj(url) {
}
export function formatSize(size) {
if (size.indexOf('m') !== -1) {
size = size.substring(0, size.length - 2)
size = size.substring(0, size.length - 1)
size = size * 0.001
return size
} else if (size.indexOf('Ki') !== -1) {


+ 1
- 1
admin-portal/src/views/resourceManager/components/nodeList.vue View File

@@ -83,7 +83,7 @@
let percentage
if (parseInt(val.allocated[key1]) === 0) {
0
} else if ((/^\d+$/.test(val.allocated[key1])) && (/^\d+$/.test(val.capacity[key1]))) {
} else if ((/^\d+$/.test(val.allocated[key1])) && (/^\d+$/.test(val.capacity[key1]))) {
percentage = val.allocated[key1] / val.capacity[key1] * 100
percentage = parseFloat(percentage.toFixed(2))
} else {


+ 1
- 1
deploy/charts/octopus/templates/openai-server.yaml View File

@@ -94,7 +94,7 @@ data:
service:
port: {{ template "openaiserver.port" . }}
targetPort: {{ template "openaiserver.port" . }}
tokenExpirationSec: 86400
tokenExpirationSec: {{ .Values.openaiserver.service.tokenExpirationSec }}
webConfig:
logoAddr: "{{ .Values.openaiserver.service.webConfig.logoAddr }}"
themeColor: "{{ .Values.openaiserver.service.webConfig.themeColor }}"


+ 5
- 4
deploy/charts/octopus/values.yaml View File

@@ -138,8 +138,8 @@ baseserver:
ambassador: #需要修改为实际的值
baseUrl: 192.168.202.73
pytorchServer:
imageAddr: swr.cn-south-1.myhuaweicloud.com/openioctopus/pytorchserver
version: 2.0.3
imageAddr: 192.168.202.110:5000/octopus/pytorchserver
version: 2.0.4
service:
billingPeriodSec: 1800
develop:
@@ -174,6 +174,7 @@ openaiserver:
username: ""
password: "abcde"
service:
tokenExpirationSec: 86400
webConfig:
logoAddr:
#格式如#94070a
@@ -459,5 +460,5 @@ seldon-core-operator:
PYTORCH_SERVER:
protocols:
seldon:
defaultImageVersion: "2.0.3"
image: "swr.cn-south-1.myhuaweicloud.com/openioctopus/pytorchserver"
defaultImageVersion: "2.0.4"
image: "192.168.202.110:5000/octopus/pytorchserver"

+ 1
- 1
openai-portal/src/App.vue View File

@@ -73,4 +73,4 @@
},
}
}
</script>
</script>

+ 0
- 7
openai-portal/src/api/Home.js View File

@@ -27,13 +27,6 @@ export function getSpace(params) {
method: 'get'
})
}
export function changeSpace(data) {
return request({
url: `/v1/usermanage/user/${data.userId}/workspace`,
method: 'put',
data: { workspaceId: data.workspaceId }
})
}
// 查询用户配置
export function getUserConfig() {
return request({


+ 64
- 80
openai-portal/src/layout/components/Navbar.vue View File

@@ -1,41 +1,52 @@
<template>
<div class="navbar" :style="{'background-color':this.GLOBAL.THEME_COLOR?this.GLOBAL.THEME_COLOR:''}">
<hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<breadcrumb class="breadcrumb-container" />
<div class="right-menu">
<el-row class="demo-avatar demo-basic">
<el-dropdown>
<div v-show="!this.GLOBAL.THEME_MANUAL_INVISIBLE">
<i class="el-icon-document" :style="{'color':fontColor?fontColor:'#666699'}" />
<a href="https://octopus.openi.org.cn/docs/manual/intro" target="_blank" class="manual" :style="{'color':fontColor}">使用手册</a>
<i class="el-icon-service" :style="{'color':fontColor?fontColor:'#666699'}" />
<a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual" :style="{'color':fontColor}">问题意见</a>
</div>
<el-dropdown-menu slot="dropdown" />
</el-dropdown>
<el-avatar :src="circleUrl" :size="size" />
<el-dropdown>
<span class="el-dropdown-link">
{{ name }}<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item divided @click.native="logout">
<span style="display:block;">退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown @command="handleCommand" @visible-change="change">
<span class="el-dropdown-link">
{{ current }}<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item) in options" :key="item.index" :command="item">{{ item.name }}
</el-dropdown-item>
</el-dropdown-menu>
<!-- <el-color-picker size="mini" @change="changeColor" v-model="mainColor">主题切换</el-color-picker> -->
</el-dropdown>
</el-row>
</div>
<el-row type="flex" justify="space-between">
<el-col :span="2">
<el-row>
<hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<breadcrumb class="breadcrumb-container" />
</el-row>
</el-col>
<el-col :span="10">
<div class="right-menu">
<el-row class="demo-avatar demo-basic">
<el-dropdown>
<div v-show="!this.GLOBAL.THEME_MANUAL_INVISIBLE">
<i class="el-icon-document" :style="{'color':fontColor?fontColor:'#666699'}" />
<a href="https://octopus.openi.org.cn/docs/manual/intro" target="_blank" class="manual"
:style="{'color':fontColor}">使用手册</a>
<i class="el-icon-service" :style="{'color':fontColor?fontColor:'#666699'}" />
<a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual"
:style="{'color':fontColor}">问题意见</a>
</div>
<el-dropdown-menu slot="dropdown" />
</el-dropdown>
<el-avatar :src="circleUrl" :size="size" />
<el-dropdown>
<span class="el-dropdown-link">
{{ name }}<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item divided @click.native="logout">
<span style="display:block;">退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown @command="handleCommand" @visible-change="change">
<span class="el-dropdown-link">
{{ current }}<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item) in options" :key="item.index" :command="item">{{ item.name }}
</el-dropdown-item>
</el-dropdown-menu>
<!-- <el-color-picker size="mini" @change="changeColor" v-model="mainColor">主题切换</el-color-picker> -->
</el-dropdown>
</el-row>
</div>
</el-col>
</el-row>

</div>
</template>

@@ -56,7 +67,7 @@
options: [],
circleUrl: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
size: 'small',
current: '默认群组',
current: '',
userMsg: undefined,
fontColor: this.GLOBAL.THEME_COLOR ? '#FFFFFF' : ''
// mainColor: curColor
@@ -69,7 +80,6 @@
'name',
'workspaces',
'id',
'workspaceId'
])
},
created() {
@@ -100,6 +110,15 @@
}
)
})
if (JSON.parse(localStorage.getItem('space'))) {
this.current = JSON.parse(localStorage.getItem('space')).workspaceName
}
else {
this.current = '默认群组'
let data = { workspaceName: '默认群组', workspaceId: 'default-workspace' }
data = JSON.stringify(data)
localStorage.setItem('space', data)
}
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
@@ -107,25 +126,16 @@
async logout() {
await this.$store.dispatch('user/logout')
this.$router.push(`/?redirect=${this.$route.fullPath}`)
// location.reload()
localStorage.clear();
},
handleCommand(command) {
// 切换群组页面刷新但是保留页面当前群组状态
const data = { userId: this.id, workspaceId: command.id }
let data = { workspaceName: command.name, workspaceId: command.id }
data = JSON.stringify(data)
this.current = command.name
changeSpace(data).then(response => {
this.$message({
message: '切换成功',
type: 'success'
});
location.reload()
})
localStorage.setItem('space', data)
location.reload();
},
// changeColor(newColor) {
// changeThemeColor(newColor).then(() => {
// this.$message.success('主题色切换成功')
// })
// }
},
}
</script>
@@ -156,7 +166,7 @@
}

.right-menu {
margin: 20px 30px 0 20px;
margin: 20px 40px 0 20px;
float: right;
height: 100%;
color: #409EFF;
@@ -182,6 +192,7 @@
}
}
}

.pkuNavbar {
height: 60px;
overflow: hidden;
@@ -205,32 +216,5 @@
.breadcrumb-container {
float: left;
}

.right-menu {
margin: 20px 30px 0 20px;
float: right;
height: 100%;
color: #409EFF;
font-size: 20px;

.avatar-container {
margin-right: 30px;
}

.el-dropdown {
position: relative;
top: -8px;
display: inline-block;
color: #fff;
font-size: 15px;
margin-right: 5px;
margin-left: 5px
}

.manual {
color: #666699;
margin: 0 50px 0 10px;
}
}
}
</style>

+ 1
- 1
openai-portal/src/permission.js View File

@@ -8,7 +8,7 @@ import getPageTitle from '@/utils/get-page-title'
import { GetUrlParam } from '@/utils/index.js'
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/', '/register'] // no redirect whitelist
router.beforeEach(async (to, from, next) => {
router.beforeEach(async(to, from, next) => {
// start progress bar
NProgress.start()



+ 1
- 1
openai-portal/src/store/getters.js View File

@@ -6,7 +6,7 @@ const getters = {
name: state => state.user.name,
workspaces: state => state.user.workspaces,
id: state => state.user.id,
workspaceId: state => state.user.workspaceId
progressId: state => state.user.progressId

}
export default getters

+ 0
- 6
openai-portal/src/store/modules/user.js View File

@@ -10,7 +10,6 @@ const getDefaultState = () => {
avatar: '',
id: '',
workspaces: [],
workspaceId: '',
progressId: undefined
}
}
@@ -36,9 +35,6 @@ const mutations = {
SET_SPACE: (state, workspaces) => {
state.workspaces = workspaces
},
SET_WORKSPACEID: (state, workspaceId) => {
state.workspaceId = workspaceId
},
SET_PROGRESSID: (state, progressId) => {
state.progressId = progressId
}
@@ -76,10 +72,8 @@ const actions = {
return reject('验证失败,请重新登录。')
}
const { fullName, id } = data.user
const workspaceId = data.workspaceId
commit('SET_NAME', fullName)
commit('SET_ID', id)
commit('SET_WORKSPACEID', workspaceId)
resolve()
}).catch(error => {
reject(error)


+ 4
- 1
openai-portal/src/utils/request.js View File

@@ -1,5 +1,6 @@
import axios from 'axios'
import { Message } from 'element-ui'
// import store from '@/store'
import { getToken, removeToken } from '@/utils/auth'
import router from '../router'
// create an axios instance
@@ -18,6 +19,9 @@ service.interceptors.request.use(
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['Authorization'] = 'Bearer ' + getToken()
if (localStorage.getItem('space')) {
config.headers['Octopus-Space-Id'] = JSON.parse(localStorage.getItem('space')).workspaceId
}
}
// eslint-disable-next-line no-undef
return config
@@ -50,7 +54,6 @@ service.interceptors.response.use(
if (response.status === 200 && response.data === '' && response.headers.url) {
window.open(response.headers.url, '_blank')
} else if (!response.data.success && (response.data.error.subcode === 16004 || response.data.error.subcode === 16010 || response.data.error.subcode === 16007)) {

setTimeout(function() {
removeToken()
router.replace({ path: '/' })


+ 1
- 1
openai-portal/src/views/GeneralView/index.vue View File

@@ -330,7 +330,7 @@
};
},
computed: {
...mapGetters(["name", "workspaceId"])
...mapGetters(["name"])
},
created() {
this.getTrainingTask();


+ 17
- 11
openai-portal/src/views/Home/firstPage.vue View File

@@ -30,16 +30,13 @@
</el-form-item>
<el-form-item v-if="show" type="flex">
<el-row type="flex" align="middle">
<el-col :span="6">
<div>第三方登录</div>
</el-col>
<el-col :span="6">
<div>
<el-col :span="24">
<div class="PCLlogin">
<div class="demo-image">
<div class="block">
<el-image style="width: 50px; height: 50px" :src="url"
@click="jumpThird"></el-image>
<div class="name">{{interfaceName}}</div>
<el-image style="width: 35px; height: 35px;display: inline-block;"
:src="url" @click="jumpThird"></el-image>
<span class="name">使用{{interfaceName}}账号登录</span>
</div>
</div>
</div>
@@ -78,7 +75,7 @@
loginForm: {
email: undefined,
password: undefined,
bind: { platform: '', userId:'', userName: '' }
bind: { platform: '', userId: '', userName: '' }
},
rules: {
email: [{ required: true, message: "请输入用户账号", trigger: "blur" },
@@ -122,6 +119,7 @@
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then((res) => {
if (res === 'success') {
localStorage.clear()
this.$router.push({ path: '/index' })
this.loading = false
this.$message({
@@ -262,8 +260,16 @@
}

.name {
font-weight: 800;
height: 40px;
line-height: 40px;
position: relative;
top: -20px;
top: -10px;
margin-left: 5px;
font-size: 22px;
font-weight: 300;
}

.PCLlogin {
margin-top: 20px;
}
</style>

+ 1
- 1
openai-portal/src/views/Home/register.vue View File

@@ -104,7 +104,7 @@
computed: {
},
methods: {
getThirdInfo() {
getThirdInfo() {
removeToken()
sessionStorage.setItem('thirdUserId', GetUrlParam('thirdUserId'))
if (GetUrlParam("thirdUserName")) {


+ 1
- 1
openai-portal/src/views/deployManager/components/dialogForm.vue View File

@@ -345,7 +345,7 @@
} else {
if (response.error.subcode == 15011) {
this.$message({
message: '服务器名称重名',
message: '服务名称已存在',
type: 'warning'
});
}


+ 1
- 4
server/admin-server/internal/data/data.go View File

@@ -3,7 +3,6 @@ package data
import (
"context"
"server/admin-server/internal/conf"
"server/admin-server/internal/data/session"
api "server/base-server/api/v1"
"server/common/errors"
"server/common/log"
@@ -31,7 +30,6 @@ type Data struct {
ResourceSpecClient api.ResourceSpecServiceClient
ResourcePoolClient api.ResourcePoolServiceClient
DatasetClient api.DatasetServiceClient
SessionClient session.SessionClient
BillingClient api.BillingServiceClient
LableClient api.LableServiceClient
PlatformClient api.PlatformServiceClient
@@ -78,12 +76,11 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, error) {
ResourceSpecClient: api.NewResourceSpecServiceClient(conn),
ResourcePoolClient: api.NewResourcePoolServiceClient(conn),
DatasetClient: api.NewDatasetServiceClient(conn),
SessionClient: session.NewSessionClient(confData, logger),
BillingClient: api.NewBillingServiceClient(conn),
LableClient: api.NewLableServiceClient(conn),
PlatformClient: api.NewPlatformServiceClient(conn),
JointCloudClient: api.NewJointCloudServiceClient(conn),
PlatformTrainJobClient: api.NewPlatformTrainJobServiceClient(conn),
ModelDeployClient: api.NewModelDeployServiceClient(conn),
ModelDeployClient: api.NewModelDeployServiceClient(conn),
}, nil
}

+ 0
- 50
server/admin-server/internal/data/session/session.go View File

@@ -1,50 +0,0 @@
package session

import (
"context"
"server/admin-server/internal/conf"
"server/common/constant"
"server/common/log"
ss "server/common/session"
)

type SessionClient interface {
ss.SessionStore
}

func NewSessionClient(config *conf.Data, logger log.Logger) SessionClient {
logHelper := log.NewHelper("Session", logger)

storeConfig := ss.SessionStoreConfig{
RedisAddr: config.Redis.Addr,
RedisPassword: config.Redis.Password,
RedisDBIndex: "0",
}
return &SessionClientImpl{
config: config,
store: ss.NewSessionStore(constant.SESSION_KEY, storeConfig, logger),
logger: logHelper,
}
}

type SessionClientImpl struct {
config *conf.Data
store ss.SessionStore
logger *log.Helper
}

func (s *SessionClientImpl) Create(ctx context.Context, session *ss.Session) error {
return s.store.Create(ctx, session)
}

func (s *SessionClientImpl) Get(ctx context.Context, sessionId string) (*ss.Session, error) {
return s.store.Get(ctx, sessionId)
}

func (s *SessionClientImpl) Update(ctx context.Context, session *ss.Session) error {
return s.store.Update(ctx, session)
}

func (s *SessionClientImpl) Delete(ctx context.Context, sessionId string) error {
return s.store.Delete(ctx, sessionId)
}

+ 0
- 33
server/admin-server/internal/service/user.go View File

@@ -146,19 +146,6 @@ func (s *UserService) UpdateUser(ctx context.Context, req *pb.UpdateUserRequest)
return nil, err
}

// if updated password, reset session for user
if req.User.Password != "" {
userSession, err := s.data.SessionClient.Get(ctx, req.UserId)
if err != nil {
return nil, err
}
if userSession != nil {
if err = s.data.SessionClient.Delete(ctx, req.UserId); err != nil {
return nil, err
}
}
}

return &pb.UpdateUserReply{
User: &pb.UserItem{
Id: result.User.Id,
@@ -183,16 +170,6 @@ func (s *UserService) FreezeUser(ctx context.Context, req *pb.FreezeUserRequest)
return nil, err
}

userSession, err := s.data.SessionClient.Get(ctx, req.UserId)
if err != nil {
return nil, err
}
if userSession != nil {
userSession.Status = int32(innterapi.UserStatus_FREEZE)
if err = s.data.SessionClient.Update(ctx, userSession); err != nil {
return nil, err
}
}
return &pb.FreezeUserReply{FreezedAt: time.Now().Unix()}, nil
}

@@ -206,16 +183,6 @@ func (s *UserService) ThawUser(ctx context.Context, req *pb.ThawUserRequest) (*p
return nil, err
}

userSession, err := s.data.SessionClient.Get(ctx, req.UserId)
if err != nil {
return nil, err
}
if userSession != nil {
userSession.Status = int32(innterapi.UserStatus_ACTIVITY)
if err = s.data.SessionClient.Update(ctx, userSession); err != nil {
return nil, err
}
}
return &pb.ThawUserReply{ThawedAt: time.Now().Unix()}, nil
}



+ 8
- 5
server/base-server/api/v1/trainJob.proto View File

@@ -39,15 +39,17 @@ service TrainJobService {
message TrainJobRequest {
string name = 1[(validate.rules).string = {min_len: 1,max_len: 30}];
string desc = 2;
string algorithmId = 3[(validate.rules).string = {min_len: 1}];
string algorithmVersion = 4[(validate.rules).string = {min_len: 1}];
string imageId = 5[(validate.rules).string = {min_len: 1}];
string dataSetId = 6[(validate.rules).string = {min_len: 1}];
string dataSetVersion = 7[(validate.rules).string = {min_len: 1}];
string algorithmId = 3[(validate.rules).string = {min_len: 0}];
string algorithmVersion = 4[(validate.rules).string = {min_len: 0}];
string imageId = 5[(validate.rules).string = {min_len: 0}];
string dataSetId = 6[(validate.rules).string = {min_len: 0}];
string dataSetVersion = 7[(validate.rules).string = {min_len: 0}];
bool isDistributed = 8;
repeated Config config = 9[(validate.rules).repeated.min_items = 1];
string userId = 10[(validate.rules).string = {min_len: 1}];
string workspaceId =11[(validate.rules).string = {min_len: 1}];
//镜像地址,非必填,镜像地址和镜像ID填一个
string imageUrl = 12[(validate.rules).string = {min_len: 0}];
}

message TrainJobTemplateRequest {
@@ -227,6 +229,7 @@ message TrainJob{
string imageName = 20;
string dataSetName = 21;
int64 startedAt = 22;
string imageUrl = 23;
}




+ 1
- 0
server/base-server/internal/data/dao/model/train_job.go View File

@@ -28,6 +28,7 @@ type TrainJob struct {
ImageId string `gorm:"type:varchar(100);not null;default:'';comment:'镜像Id'"`
ImageName string `gorm:"type:varchar(100);not null;default:'';comment: '镜像名称''"`
ImageVersion string `gorm:"type:varchar(100);not null;default:'';comment:'镜像版本'"`
ImageUrl string `gorm:"type:varchar(300);not null;default:'';comment:'镜像版本'"`
DataSetId string `gorm:"type:varchar(100);not null;default:'';comment:'数据集Id'"`
DataSetVersion string `gorm:"type:varchar(100);not null;default:'';comment:'数据集版本'"`
DatasetName string `gorm:"type:varchar(100);not null;default:'';comment:'数据集名称''"`


+ 15
- 13
server/base-server/internal/data/dao/user.go View File

@@ -76,21 +76,23 @@ func (d *userDao) Find(ctx context.Context, condition *model.UserQuery) (*model.
} else {
querySql := "1 = 1"
params := make([]interface{}, 0)
querySql += " and (JSON_CONTAINS(bind,JSON_OBJECT('platform', ?))"
params = append(params, condition.Bind.Platform)
querySql += " and JSON_CONTAINS(bind,JSON_OBJECT('userId', ?)))"
params = append(params, condition.Bind.UserId)
if condition.Id != "" {
querySql += " or id = ? "
params = append(params, condition.Id)
}
if condition.Email != "" {
querySql += " or email = ? "
querySql += " and email = ? "
params = append(params, condition.Email)
}
if condition.Phone != "" {
querySql += " or phone = ? "
params = append(params, condition.Phone)
if condition.Bind.UserId != "" {
querySql += " or (JSON_CONTAINS(bind,JSON_OBJECT('platform', ?))"
params = append(params, condition.Bind.Platform)
querySql += " and JSON_CONTAINS(bind,JSON_OBJECT('userId', ?)))"
params = append(params, condition.Bind.UserId)
} else {
querySql += " and JSON_CONTAINS(bind,JSON_OBJECT('platform', ?))"
params = append(params, condition.Bind.Platform)
}
} else {
querySql += " and JSON_CONTAINS(bind,JSON_OBJECT('platform', ?))"
params = append(params, condition.Bind.Platform)
querySql += " and JSON_CONTAINS(bind,JSON_OBJECT('userId', ?))"
params = append(params, condition.Bind.UserId)
}
result = db.Where(querySql, params...).First(&user)
}


+ 48
- 28
server/base-server/internal/service/trainjob/train_job.go View File

@@ -302,35 +302,55 @@ func (s *trainJobService) checkPermForJob(ctx context.Context, job *model.TrainJ

queue = workspace.Workspace.ResourcePoolId
}
//image
image, err := s.getImageAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.ImageId)
if err != nil {
return nil, err
}

if image.Image.ImageStatus != api.ImageStatus_IMAGE_STATUS_MADE {
return nil, errors.Errorf(nil, errors.ErrorJobImageStatusForbidden)
}
job.ImageName = image.Image.ImageName
job.ImageVersion = image.Image.ImageVersion
//algorithm
algorithmVersion, err := s.getAlgorithmAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.AlgorithmId, job.AlgorithmVersion)
if err != nil {
return nil, err
}
if algorithmVersion.Algorithm.FileStatus != int64(algorithm.FILESTATUS_FINISH) {
return nil, errors.Errorf(err, errors.ErrorJobAlgorithmStatusForbidden)
imageAddr := ""
if job.ImageId != "" { //判空,允许通过API调用不传此参数
//image
image, err := s.getImageAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.ImageId)
if err != nil {
return nil, err
}

if image.Image.ImageStatus != api.ImageStatus_IMAGE_STATUS_MADE {
return nil, errors.Errorf(nil, errors.ErrorJobImageStatusForbidden)
}
job.ImageName = image.Image.ImageName
job.ImageVersion = image.Image.ImageVersion
imageAddr = image.ImageFullAddr
} else if job.ImageUrl != "" {
imageAddr = job.ImageUrl
} else {
return nil, errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
}
job.AlgorithmName = algorithmVersion.Algorithm.AlgorithmName
//dataSet
dataSetVersion, err := s.getDatasetAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.DataSetId, job.DataSetVersion)
if err != nil {
return nil, err

algorithmPath := ""
if job.AlgorithmId != "" { //判空,允许通过API调用不传此参数
//algorithm
algorithmVersion, err := s.getAlgorithmAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.AlgorithmId, job.AlgorithmVersion)
if err != nil {
return nil, err
}
if algorithmVersion.Algorithm.FileStatus != int64(algorithm.FILESTATUS_FINISH) {
return nil, errors.Errorf(err, errors.ErrorJobAlgorithmStatusForbidden)
}
job.AlgorithmName = algorithmVersion.Algorithm.AlgorithmName
algorithmPath = algorithmVersion.Algorithm.Path
}
if dataSetVersion.Version.Status != int32(api.DatasetVersionStatus_DVS_Unzipped) {
return nil, errors.Errorf(err, errors.ErrorJobImageStatusForbidden)

datasetPath := ""
if job.DataSetId != "" { //判空,允许通过API调用不传此参数
//dataSet
dataSetVersion, err := s.getDatasetAndCheckPerm(ctx, job.UserId, job.WorkspaceId, job.DataSetId, job.DataSetVersion)
if err != nil {
return nil, err
}
if dataSetVersion.Version.Status != int32(api.DatasetVersionStatus_DVS_Unzipped) {
return nil, errors.Errorf(err, errors.ErrorJobImageStatusForbidden)
}
job.DatasetName = dataSetVersion.Dataset.Name
datasetPath = dataSetVersion.Version.Path
}
job.DatasetName = dataSetVersion.Dataset.Name
//resource spec info
startJobSpecs := map[string]*startJobInfoSpec{}
specs, err := s.resourceSpecService.ListResourceSpec(ctx, &api.ListResourceSpecRequest{})
@@ -436,9 +456,9 @@ func (s *trainJobService) checkPermForJob(ctx context.Context, job *model.TrainJ

return &startJobInfo{
queue: queue,
imageAddr: image.ImageFullAddr,
algorithmPath: algorithmVersion.Algorithm.Path,
datasetPath: dataSetVersion.Version.Path,
imageAddr: imageAddr,
algorithmPath: algorithmPath,
datasetPath: datasetPath,
specs: startJobSpecs,
}, nil
}


+ 21
- 0
server/common/context/context.go View File

@@ -15,6 +15,7 @@ const (
CTX_DB_TX_KEY CtxKey = "dbTx" //数据库事务 存在于common.Transaction()
CTX_CREATED_AT_KEY CtxKey = "createdAt"
CTX_PLATFORM_ID CtxKey = "platformId" //第三方平台Id
CTX_SPACEID_KEY CtxKey = "spaceId" //群组id
)

func RequestIdKey() CtxKey {
@@ -53,6 +54,26 @@ func UserIdFromContext(ctx context.Context) string {
return ""
}

func SpaceIdKey() CtxKey {
return CTX_SPACEID_KEY
}

func SpaceIdToContext(ctx context.Context, val interface{}) context.Context {
return context.WithValue(ctx, SpaceIdKey(), val)
}

func SpaceIdFromContext(ctx context.Context) string {
id, ok := ctx.Value(SpaceIdKey()).(string)
if ok {
return id
}
return ""
}

func UserIdAndSpaceIdFromContext(ctx context.Context) (string, string) {
return UserIdFromContext(ctx), SpaceIdFromContext(ctx)
}

func PlatformIdKey() CtxKey {
return CTX_PLATFORM_ID
}


+ 3
- 0
server/common/jwt/jwt.go View File

@@ -41,6 +41,9 @@ func ParseToken(tokenStr string, secret string) (*TokenClaims, error) {
return nil, errors.Errorf(err, errors.ErrorParseTokenFailed)
}
if claims, ok := token.Claims.(*TokenClaims); ok && token.Valid {
if time.Now().Unix() > claims.ExpiresAt {
return nil, errors.Errorf(err, errors.ErrorParseTokenFailed)
}
return claims, nil
} else {
return nil, errors.Errorf(err, errors.ErrorTokenInvalid)


+ 66
- 66
server/common/middleware/session/jwt_session.go View File

@@ -1,68 +1,68 @@
package session

import (
"context"
"net/http"
commctx "server/common/context"
"server/common/errors"
ss "server/common/session"
"strings"
"github.com/go-kratos/kratos/v2/middleware"
kratosHttp "github.com/go-kratos/kratos/v2/transport/http"
)
// Option is HTTP logging option.
type Option func(*Options)
type Options struct {
NoAuthUris []string
Store ss.SessionStore
CheckSession func(ctx context.Context, s *ss.Session) error
}
// Server is an server logging middleware.
func Server(opts ...Option) middleware.Middleware {
options := Options{}
for _, o := range opts {
o(&options)
}
return func(handler middleware.Handler) middleware.Handler {
return func(ctx context.Context, req interface{}) (interface{}, error) {
var request *http.Request
if info, ok := kratosHttp.FromServerContext(ctx); ok {
request = info.Request
} else {
return handler(ctx, req)
}
needAuth := true
for _, i := range options.NoAuthUris {
if strings.Contains(request.RequestURI, i) {
needAuth = false
}
}
if needAuth {
userId := commctx.UserIdFromContext(ctx)
store := options.Store
session, err := store.Get(ctx, userId)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorUserGetAuthSessionFailed)
}
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
if options.CheckSession != nil {
if err := options.CheckSession(ctx, session); err != nil {
return nil, err
}
}
ctx = ss.SessionToContext(ctx, session)
}
return handler(ctx, req)
}
}
}
//import (
// "context"
// "net/http"
// commctx "server/common/context"
// "server/common/errors"
// ss "server/common/session"
// "strings"
//
// "github.com/go-kratos/kratos/v2/middleware"
// kratosHttp "github.com/go-kratos/kratos/v2/transport/http"
//)
//
//// Option is HTTP logging option.
//type Option func(*Options)
//
//type Options struct {
// NoAuthUris []string
// Store ss.SessionStore
// CheckSession func(ctx context.Context, s *ss.Session) error
//}
//
//// Server is an server logging middleware.
//func Server(opts ...Option) middleware.Middleware {
// options := Options{}
// for _, o := range opts {
// o(&options)
// }
// return func(handler middleware.Handler) middleware.Handler {
// return func(ctx context.Context, req interface{}) (interface{}, error) {
// var request *http.Request
// if info, ok := kratosHttp.FromServerContext(ctx); ok {
// request = info.Request
// } else {
// return handler(ctx, req)
// }
//
// needAuth := true
// for _, i := range options.NoAuthUris {
// if strings.Contains(request.RequestURI, i) {
// needAuth = false
// }
// }
//
// if needAuth {
// userId := commctx.UserIdFromContext(ctx)
// store := options.Store
// session, err := store.Get(ctx, userId)
// if err != nil {
// return nil, errors.Errorf(err, errors.ErrorUserGetAuthSessionFailed)
// }
// if session == nil {
// return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
// }
// if options.CheckSession != nil {
// if err := options.CheckSession(ctx, session); err != nil {
// return nil, err
// }
// }
//
// ctx = ss.SessionToContext(ctx, session)
// }
//
// return handler(ctx, req)
// }
// }
//}

+ 23
- 23
server/common/session/context.go View File

@@ -1,25 +1,25 @@
package session

import "context"
type CtxSession string
const (
CTX_SESSION_KEY CtxSession = "CtxSessionKey"
)
func CtxSessionKey() CtxSession {
return CTX_SESSION_KEY
}
func SessionToContext(ctx context.Context, val interface{}) context.Context {
return context.WithValue(ctx, CtxSessionKey(), val)
}
func SessionFromContext(ctx context.Context) *Session {
session, ok := ctx.Value(CtxSessionKey()).(*Session)
if ok {
return session
}
return nil
}
//import "context"
//
//type CtxSession string
//
//const (
// CTX_SESSION_KEY CtxSession = "CtxSessionKey"
//)
//
//func CtxSessionKey() CtxSession {
// return CTX_SESSION_KEY
//}
//
//func SessionToContext(ctx context.Context, val interface{}) context.Context {
// return context.WithValue(ctx, CtxSessionKey(), val)
//}
//
//func SessionFromContext(ctx context.Context) *Session {
// session, ok := ctx.Value(CtxSessionKey()).(*Session)
// if ok {
// return session
// }
// return nil
//}

+ 53
- 53
server/common/session/session.go View File

@@ -1,55 +1,55 @@
package session

import (
"context"
"server/common/constant"
)
const (
SESSION_WORKSPACE = "workspace"
)
type Session struct {
ctx context.Context `json:"-"`
store SessionStore `json:"-"`
Id string `json:"id"`
UserId string `json:"userId"`
Status int32 `json:"status"`
CreatedAt int64 `json:"createdAt"`
Attributes map[string]string `json:"attributes"`
}
func (s *Session) GetWorkspace() string {
if workspaceId, ok := s.Attributes[SESSION_WORKSPACE]; !ok {
return constant.SYSTEM_WORKSPACE_DEFAULT
} else {
return workspaceId
}
}
func (s *Session) SetWorkspace(workspaceId string) error {
if workspaceId == constant.SYSTEM_WORKSPACE_DEFAULT {
delete(s.Attributes, SESSION_WORKSPACE)
} else {
s.Attributes[SESSION_WORKSPACE] = workspaceId
}
return s.sync()
}
func (s *Session) IsDefaultWorkspace() bool {
if workspaceId, ok := s.Attributes[SESSION_WORKSPACE]; !ok {
return true
} else {
return workspaceId == constant.SYSTEM_WORKSPACE_DEFAULT
}
}
func (s *Session) sync() error {
if s.store == nil {
return nil
}
if err := s.store.Update(s.ctx, s); err != nil {
return err
}
return nil
}
//import (
// "context"
// "server/common/constant"
//)
//
//const (
// SESSION_WORKSPACE = "workspace"
//)
//
//type Session struct {
// ctx context.Context `json:"-"`
// store SessionStore `json:"-"`
// Id string `json:"id"`
// UserId string `json:"userId"`
// Status int32 `json:"status"`
// CreatedAt int64 `json:"createdAt"`
// Attributes map[string]string `json:"attributes"`
//}
//
//func (s *Session) GetWorkspace() string {
// if workspaceId, ok := s.Attributes[SESSION_WORKSPACE]; !ok {
// return constant.SYSTEM_WORKSPACE_DEFAULT
// } else {
// return workspaceId
// }
//}
//
//func (s *Session) SetWorkspace(workspaceId string) error {
// if workspaceId == constant.SYSTEM_WORKSPACE_DEFAULT {
// delete(s.Attributes, SESSION_WORKSPACE)
// } else {
// s.Attributes[SESSION_WORKSPACE] = workspaceId
// }
// return s.sync()
//}
//
//func (s *Session) IsDefaultWorkspace() bool {
// if workspaceId, ok := s.Attributes[SESSION_WORKSPACE]; !ok {
// return true
// } else {
// return workspaceId == constant.SYSTEM_WORKSPACE_DEFAULT
// }
//}
//
//func (s *Session) sync() error {
// if s.store == nil {
// return nil
// }
// if err := s.store.Update(s.ctx, s); err != nil {
// return err
// }
// return nil
//}

+ 108
- 108
server/common/session/store.go View File

@@ -1,110 +1,110 @@
package session

import (
"context"
"net/url"
"server/common/errors"
"server/common/redis"
"github.com/go-kratos/kratos/v2/log"
redisLib "github.com/go-redis/redis/v8"
jsoniter "github.com/json-iterator/go"
)
type SessionStore interface {
Create(ctx context.Context, session *Session) error
Get(ctx context.Context, sessionId string) (*Session, error)
Update(ctx context.Context, session *Session) error
Delete(ctx context.Context, sessionId string) error
}
type SessionStoreConfig struct {
RedisAddr string
RedisUsername string
RedisPassword string
RedisDBIndex string
}
func NewSessionStore(key string, config SessionStoreConfig, logger log.Logger) SessionStore {
logHelper := log.NewHelper("Session", logger)
redisUrl := url.URL{
Scheme: "redis",
Host: config.RedisAddr,
Path: config.RedisDBIndex,
User: url.UserPassword(config.RedisUsername, config.RedisPassword),
}
rdb, err := redis.GetRedisInstance(redisUrl.String())
if err != nil {
panic(err)
}
return &RemoteSessionStore{
StoreKey: key,
config: config,
Instance: rdb,
logger: logHelper,
}
}
type RemoteSessionStore struct {
StoreKey string
config SessionStoreConfig
Instance *redis.RedisInstance
logger *log.Helper
}
func (s *RemoteSessionStore) Create(ctx context.Context, session *Session) error {
if session == nil || session.Id == "" {
return errors.Errorf(nil, errors.ErrorSessionIdNotFound)
}
sbytes, err := jsoniter.Marshal(&session)
if err != nil {
return errors.Errorf(err, errors.ErrorJsonMarshal)
}
_, err = s.Instance.Redis.HSet(ctx, s.StoreKey, session.Id, sbytes).Result()
if err != nil {
return errors.Errorf(err, errors.ErroRedisHSetFailed)
}
return nil
}
func (s *RemoteSessionStore) Get(ctx context.Context, sessionId string) (*Session, error) {
if sessionId == "" {
return nil, errors.Errorf(nil, errors.ErrorSessionIdNotFound)
}
resultStr, err := s.Instance.Redis.HGet(ctx, s.StoreKey, sessionId).Result()
if err != nil {
if redisLib.Nil == err {
return nil, nil
}
return nil, errors.Errorf(err, errors.ErroRedisHGetFailed)
}
var session Session
err = jsoniter.Unmarshal([]byte(resultStr), &session)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorJsonUnmarshal)
}
session.ctx = ctx
session.store = s
return &session, nil
}
func (s *RemoteSessionStore) Update(ctx context.Context, session *Session) error {
return s.Create(ctx, session)
}
func (s *RemoteSessionStore) Delete(ctx context.Context, sessionId string) error {
if sessionId == "" {
return errors.Errorf(nil, errors.ErrorSessionIdNotFound)
}
_, err := s.Instance.Redis.HDel(ctx, s.StoreKey, sessionId).Result()
if err != nil {
return errors.Errorf(err, errors.ErroRedisHDelFailed)
}
return nil
}
//import (
// "context"
//
// "net/url"
// "server/common/errors"
// "server/common/redis"
//
// "github.com/go-kratos/kratos/v2/log"
// redisLib "github.com/go-redis/redis/v8"
// jsoniter "github.com/json-iterator/go"
//)
//
//type SessionStore interface {
// Create(ctx context.Context, session *Session) error
// Get(ctx context.Context, sessionId string) (*Session, error)
// Update(ctx context.Context, session *Session) error
// Delete(ctx context.Context, sessionId string) error
//}
//
//type SessionStoreConfig struct {
// RedisAddr string
// RedisUsername string
// RedisPassword string
// RedisDBIndex string
//}
//
//func NewSessionStore(key string, config SessionStoreConfig, logger log.Logger) SessionStore {
// logHelper := log.NewHelper("Session", logger)
//
// redisUrl := url.URL{
// Scheme: "redis",
// Host: config.RedisAddr,
// Path: config.RedisDBIndex,
// User: url.UserPassword(config.RedisUsername, config.RedisPassword),
// }
// rdb, err := redis.GetRedisInstance(redisUrl.String())
// if err != nil {
// panic(err)
// }
//
// return &RemoteSessionStore{
// StoreKey: key,
// config: config,
// Instance: rdb,
// logger: logHelper,
// }
//}
//
//type RemoteSessionStore struct {
// StoreKey string
// config SessionStoreConfig
// Instance *redis.RedisInstance
// logger *log.Helper
//}
//
//func (s *RemoteSessionStore) Create(ctx context.Context, session *Session) error {
// if session == nil || session.Id == "" {
// return errors.Errorf(nil, errors.ErrorSessionIdNotFound)
// }
// sbytes, err := jsoniter.Marshal(&session)
// if err != nil {
// return errors.Errorf(err, errors.ErrorJsonMarshal)
// }
//
// _, err = s.Instance.Redis.HSet(ctx, s.StoreKey, session.Id, sbytes).Result()
// if err != nil {
// return errors.Errorf(err, errors.ErroRedisHSetFailed)
// }
// return nil
//}
//
//func (s *RemoteSessionStore) Get(ctx context.Context, sessionId string) (*Session, error) {
// if sessionId == "" {
// return nil, errors.Errorf(nil, errors.ErrorSessionIdNotFound)
// }
// resultStr, err := s.Instance.Redis.HGet(ctx, s.StoreKey, sessionId).Result()
// if err != nil {
// if redisLib.Nil == err {
// return nil, nil
// }
// return nil, errors.Errorf(err, errors.ErroRedisHGetFailed)
// }
//
// var session Session
// err = jsoniter.Unmarshal([]byte(resultStr), &session)
// if err != nil {
// return nil, errors.Errorf(err, errors.ErrorJsonUnmarshal)
// }
// session.ctx = ctx
// session.store = s
// return &session, nil
//}
//
//func (s *RemoteSessionStore) Update(ctx context.Context, session *Session) error {
// return s.Create(ctx, session)
//}
//
//func (s *RemoteSessionStore) Delete(ctx context.Context, sessionId string) error {
// if sessionId == "" {
// return errors.Errorf(nil, errors.ErrorSessionIdNotFound)
// }
//
// _, err := s.Instance.Redis.HDel(ctx, s.StoreKey, sessionId).Result()
// if err != nil {
// return errors.Errorf(err, errors.ErroRedisHDelFailed)
// }
// return nil
//}

+ 13
- 10
server/openai-server/api/v1/trainJob.proto View File

@@ -93,20 +93,22 @@ message TrainJobRequest {
string name = 1[(validate.rules).string = {min_len: 1, max_len: 30}];
//训练任务描述,非必填
string desc = 2[(validate.rules).string = {max_len: 300}];
//算法ID,必填
string algorithmId = 3[(validate.rules).string = {min_len: 1}];
//算法版本,必填
string algorithmVersion = 4[(validate.rules).string = {min_len: 1}];
//镜像ID,必填
string imageId = 5[(validate.rules).string = {min_len: 1}];
//数据集ID,必填
string dataSetId = 7[(validate.rules).string = {min_len: 1}];
//数据集版本,必填
string dataSetVersion = 8[(validate.rules).string = {min_len: 1}];
//算法ID,必填
string algorithmId = 3[(validate.rules).string = {min_len: 0}];
//算法版本,必填
string algorithmVersion = 4[(validate.rules).string = {min_len: 0}];
//镜像ID,必填,镜像地址和镜像ID填一个
string imageId = 5[(validate.rules).string = {min_len: 0}];
//数据集ID,必填
string dataSetId = 7[(validate.rules).string = {min_len: 0}];
//数据集版本,必填
string dataSetVersion = 8[(validate.rules).string = {min_len: 0}];
//是否分布式任务,非必填,默认false,若为分布式任务则为true
bool isDistributed = 9;
//job子任务及其配置信息,必填
repeated Config config = 10[(validate.rules).repeated.min_items = 1];
//镜像地址,非必填,镜像地址和镜像ID填一个
string imageUrl = 11[(validate.rules).string = {min_len: 0}];
}

message Config {
@@ -327,6 +329,7 @@ message TrainJob{
string imageVersion = 21;
//启动时间
int64 startedAt = 22;
string imageUrl = 23;
}

message TrainJobTemplate{


+ 0
- 16
server/openai-server/api/v1/user.proto View File

@@ -20,12 +20,6 @@ service User {
get: "/v1/usermanage/user/{userId}/workspace"
};
};
rpc PutUserWorkspace (PutUserWorkspaceRequest) returns (PutUserWorkspaceReply) {
option (google.api.http) = {
put: "/v1/usermanage/user/{userId}/workspace"
body: "*"
};
};
// 查询用户配置
rpc GetUserConfig (GetUserConfigRequest) returns (GetUserConfigReply) {
option (google.api.http) = {
@@ -50,7 +44,6 @@ message GetUserInfoRequest {

message GetUserInfoReply {
UserItem user = 1;
string workspaceId = 2;
}

message WorkspaceItem {
@@ -74,15 +67,6 @@ message ListUserWorkspacesReply {
repeated WorkspaceItem workspaces = 1;
}

message PutUserWorkspaceRequest {
string userId = 1 [(validate.rules).string = {min_len: 1, max_len: 36}];
string workspaceId = 2 [(validate.rules).string = {max_len: 36}];
}

message PutUserWorkspaceReply {

}

message GetUserConfigRequest {
}



+ 0
- 3
server/openai-server/internal/data/data.go View File

@@ -7,7 +7,6 @@ import (
"server/common/log"
"server/common/middleware/ctxcopy"
"server/openai-server/internal/conf"
"server/openai-server/internal/data/session"
"time"

"github.com/go-kratos/kratos/v2/middleware"
@@ -24,7 +23,6 @@ type Data struct {
DevelopClient api.DevelopClient
ModelClient api.ModelServiceClient
WorkspaceClient api.WorkspaceServiceClient
SessionClient session.SessionClient
ImageClient api.ImageServiceClient
DatasetClient api.DatasetServiceClient
ResourceSpecClient api.ResourceSpecServiceClient
@@ -66,7 +64,6 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, error) {
TrainJobClient: api.NewTrainJobServiceClient(conn),
ModelClient: api.NewModelServiceClient(conn),
WorkspaceClient: api.NewWorkspaceServiceClient(conn),
SessionClient: session.NewSessionClient(confData, logger),
ImageClient: api.NewImageServiceClient(conn),
DatasetClient: api.NewDatasetServiceClient(conn),
ResourceSpecClient: api.NewResourceSpecServiceClient(conn),


+ 0
- 51
server/openai-server/internal/data/session/session.go View File

@@ -1,51 +0,0 @@
package session

import (
"context"
"server/common/constant"
"server/common/log"
ss "server/common/session"
"server/openai-server/internal/conf"
)

type SessionClient interface {
ss.SessionStore
}

func NewSessionClient(config *conf.Data, logger log.Logger) SessionClient {
logHelper := log.NewHelper("Session", logger)

storeConfig := ss.SessionStoreConfig{
RedisAddr: config.Redis.Addr,
RedisPassword: config.Redis.Password,
RedisUsername: config.Redis.Username,
RedisDBIndex: "0",
}
return &SessionClientImpl{
config: config,
store: ss.NewSessionStore(constant.SESSION_KEY, storeConfig, logger),
logger: logHelper,
}
}

type SessionClientImpl struct {
config *conf.Data
store ss.SessionStore
logger *log.Helper
}

func (s *SessionClientImpl) Create(ctx context.Context, session *ss.Session) error {
return s.store.Create(ctx, session)
}

func (s *SessionClientImpl) Get(ctx context.Context, sessionId string) (*ss.Session, error) {
return s.store.Get(ctx, sessionId)
}

func (s *SessionClientImpl) Update(ctx context.Context, session *ss.Session) error {
return s.store.Update(ctx, session)
}

func (s *SessionClientImpl) Delete(ctx context.Context, sessionId string) error {
return s.store.Delete(ctx, sessionId)
}

+ 45
- 21
server/openai-server/internal/server/http.go View File

@@ -2,22 +2,26 @@ package server

import (
"context"
"fmt"
nethttp "net/http"
innterapi "server/base-server/api/v1"
"net/http/httputil"
"net/url"
"server/common/constant"
"server/common/constant/userconfig"
comCtx "server/common/context"
commctx "server/common/context"
"server/common/errors"
comHttp "server/common/http"
"server/common/log"
"server/common/middleware/jwt"
"server/common/middleware/logging"
"server/common/middleware/session"
"server/common/middleware/validate"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/service"
"strings"

"github.com/gorilla/mux"

"github.com/go-kratos/kratos/v2/middleware"
"github.com/go-kratos/kratos/v2/middleware/recovery"
"github.com/go-kratos/kratos/v2/middleware/tracing"
@@ -44,22 +48,6 @@ func NewHTTPServer(c *conf.Server, service *service.Service) *http.Server {
options.NoAuthUris = noAuthUris
})

var sessionOpts = []session.Option{}
sessionOpts = append(sessionOpts, func(options *session.Options) {
options.Store = service.Data.SessionClient
options.NoAuthUris = noAuthUris
options.CheckSession = func(ctx context.Context, s *ss.Session) error {
if s.Status != int32(innterapi.UserStatus_ACTIVITY) {
return errors.Errorf(nil, errors.ErrorAuthenticationForbidden)
}

if comCtx.CreatedAtFromContext(ctx) != s.CreatedAt {
return errors.Errorf(nil, errors.ErrorTokenRenew)
}
return nil
}
})

options := []http.HandleOption{
http.Middleware(
middleware.Chain(
@@ -67,7 +55,7 @@ func NewHTTPServer(c *conf.Server, service *service.Service) *http.Server {
tracing.Server(),
logging.Server(),
jwt.Server(jwtOpts...),
session.Server(sessionOpts...),
handleHeader(),
checkJointCloudPerm(service),
validate.Server(),
),
@@ -83,6 +71,21 @@ func NewHTTPServer(c *conf.Server, service *service.Service) *http.Server {
srv.HandlePrefix("/v1/authmanage", api.NewAuthHandler(service.AuthService, options...))
srv.HandlePrefix("/v1/algorithmmanage", api.NewAlgorithmHandler(service.AlgorithmService, options...))
srv.HandlePrefix("/v1/developmanage", api.NewDevelopHandler(service.DevelopService, options...))
srv.HandleFunc("/v1/trainmanage/trainjob/{id}/task/{taskId}/replica/{replicaIdx}/log", func(w nethttp.ResponseWriter, r *nethttp.Request) {
proto := "http"
if strings.Contains(r.Proto, "HTTPS") {
proto = "https"
}
url, _ := url.Parse(fmt.Sprintf("%s://%s/log/user/trainjob/%s/%s/%s/index.log", proto, r.Host, mux.Vars(r)["id"], mux.Vars(r)["taskId"], mux.Vars(r)["replicaIdx"]))
log.Info(context.TODO(), url)
proxy := httputil.ReverseProxy{
Director: func(request *nethttp.Request) {
request.URL = url
},
}

proxy.ServeHTTP(w, r)
})
srv.HandlePrefix("/v1/trainmanage", api.NewTrainJobServiceHandler(service.TrainJobService, options...))
srv.HandlePrefix("/v1/modelmanage", api.NewModelHandler(service.ModelService, options...))
srv.HandlePrefix("/v1/datasetmanage", api.NewDatasetServiceHandler(service.DatasetService, options...))
@@ -119,3 +122,24 @@ func checkJointCloudPerm(service *service.Service) middleware.Middleware {
}
}
}

func handleHeader() middleware.Middleware {
return func(handler middleware.Handler) middleware.Handler {
return func(ctx context.Context, req interface{}) (interface{}, error) {
var request *nethttp.Request
if info, ok := http.FromServerContext(ctx); ok {
request = info.Request
} else {
return handler(ctx, req)
}

spaceId := request.Header.Get("Octopus-Space-Id")
if spaceId == "" {
spaceId = constant.SYSTEM_WORKSPACE_DEFAULT
}

ctx = commctx.SpaceIdToContext(ctx, spaceId)
return handler(ctx, req)
}
}
}

+ 15
- 87
server/openai-server/internal/service/algorithm.go View File

@@ -7,7 +7,6 @@ import (
commctx "server/common/context"
"server/common/errors"
"server/common/log"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -106,11 +105,7 @@ func (s *AlgorithmService) ListPreAlgorithm(ctx context.Context, req *api.ListPr

// 查询我的算法列表
func (s *AlgorithmService) ListMyAlgorithm(ctx context.Context, req *api.ListMyAlgorithmRequest) (*api.ListMyAlgorithmReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.ListMyAlgorithm(ctx, &innterapi.ListMyAlgorithmRequest{
SpaceId: spaceId,
@@ -142,10 +137,7 @@ func (s *AlgorithmService) ListMyAlgorithm(ctx context.Context, req *api.ListMyA

// 查询公共算法列表
func (s *AlgorithmService) ListCommAlgorithm(ctx context.Context, req *api.ListCommAlgorithmRequest) (*api.ListCommAlgorithmReply, error) {
_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.ListCommAlgorithm(ctx, &innterapi.ListCommAlgorithmRequest{
SpaceId: spaceId,
@@ -176,11 +168,7 @@ func (s *AlgorithmService) ListCommAlgorithm(ctx context.Context, req *api.ListC

// 查询算法版本列表
func (s *AlgorithmService) ListAlgorithmVersion(ctx context.Context, req *api.ListAlgorithmVersionRequest) (*api.ListAlgorithmVersionReply, error) {

_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.ListAlgorithmVersion(ctx, &innterapi.ListAlgorithmVersionRequest{
AlgorithmId: req.AlgorithmId,
@@ -227,10 +215,7 @@ func (s *AlgorithmService) ListAlgorithmVersion(ctx context.Context, req *api.Li

// 新增我的算法版本
func (s *AlgorithmService) AddMyAlgorithmVersion(ctx context.Context, req *api.AddMyAlgorithmVersionRequest) (*api.AddMyAlgorithmVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.AddMyAlgorithmVersion(ctx, &innterapi.AddMyAlgorithmVersionRequest{
SpaceId: spaceId,
@@ -253,11 +238,7 @@ func (s *AlgorithmService) AddMyAlgorithmVersion(ctx context.Context, req *api.A

// 查询公共算法版本列表
func (s *AlgorithmService) ListCommAlgorithmVersion(ctx context.Context, req *api.ListCommAlgorithmVersionRequest) (*api.ListCommAlgorithmVersionReply, error) {

_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.ListCommAlgorithmVersion(ctx, &innterapi.ListCommAlgorithmVersionRequest{
SpaceId: spaceId,
@@ -289,11 +270,7 @@ func (s *AlgorithmService) ListCommAlgorithmVersion(ctx context.Context, req *ap

// 分享算法版本到公共算法
func (s *AlgorithmService) ShareAlgorithmVersion(ctx context.Context, req *api.ShareAlgorithmVersionRequest) (*api.ShareAlgorithmVersionReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

ShareSpaceIdList := []string{}
ShareSpaceIdList = append(ShareSpaceIdList, spaceId)
@@ -316,11 +293,7 @@ func (s *AlgorithmService) ShareAlgorithmVersion(ctx context.Context, req *api.S

// 取消分享算法版本到公共算法
func (s *AlgorithmService) CloseShareAlgorithmVersion(ctx context.Context, req *api.CloseShareAlgorithmVersionRequest) (*api.CloseShareAlgorithmVersionReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

ShareSpaceIdList := []string{}
ShareSpaceIdList = append(ShareSpaceIdList, spaceId)
@@ -343,10 +316,7 @@ func (s *AlgorithmService) CloseShareAlgorithmVersion(ctx context.Context, req *

// 删除我的算法版本
func (s *AlgorithmService) DeleteMyAlgorithmVersion(ctx context.Context, req *api.DeleteMyAlgorithmVersionRequest) (*api.DeleteMyAlgorithmVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.DeleteMyAlgorithmVersion(ctx, &innterapi.DeleteMyAlgorithmVersionRequest{
SpaceId: spaceId,
@@ -365,11 +335,7 @@ func (s *AlgorithmService) DeleteMyAlgorithmVersion(ctx context.Context, req *ap

// 删除我的算法
func (s *AlgorithmService) DeleteMyAlgorithm(ctx context.Context, req *api.DeleteMyAlgorithmRequest) (*api.DeleteMyAlgorithmReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.DeleteMyAlgorithm(ctx, &innterapi.DeleteMyAlgorithmRequest{
SpaceId: spaceId,
@@ -404,11 +370,7 @@ func (s *AlgorithmService) DownloadAlgorithmVersionCompress(ctx context.Context,

// 复制算法
func (s *AlgorithmService) CopyAlgorithmVersion(ctx context.Context, req *api.CopyAlgorithmVersionRequest) (*api.CopyAlgorithmVersionReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.CopyAlgorithmVersion(ctx, &innterapi.CopyAlgorithmVersionRequest{
SpaceId: spaceId,
@@ -449,10 +411,7 @@ func (s *AlgorithmService) DownloadAlgorithmVersion(ctx context.Context, req *ap

// 新增我的算法
func (s *AlgorithmService) AddMyAlgorithm(ctx context.Context, req *api.AddMyAlgorithmRequest) (*api.AddMyAlgorithmReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
reply, err := s.data.AlgorithmClient.AddAlgorithm(ctx, &innterapi.AddAlgorithmRequest{
SpaceId: spaceId,
UserId: userId,
@@ -476,10 +435,7 @@ func (s *AlgorithmService) AddMyAlgorithm(ctx context.Context, req *api.AddMyAlg

// 上传算法
func (s *AlgorithmService) UploadAlgorithm(ctx context.Context, req *api.UploadAlgorithmRequest) (*api.UploadAlgorithmReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.UploadAlgorithm(ctx, &innterapi.UploadAlgorithmRequest{
SpaceId: spaceId,
@@ -500,11 +456,7 @@ func (s *AlgorithmService) UploadAlgorithm(ctx context.Context, req *api.UploadA

// 上传算法确认
func (s *AlgorithmService) ConfirmUploadAlgorithm(ctx context.Context, req *api.ConfirmUploadAlgorithmRequest) (*api.ConfirmUploadAlgorithmReply, error) {

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.ConfirmUploadAlgorithm(ctx, &innterapi.ConfirmUploadAlgorithmRequest{
SpaceId: spaceId,
@@ -565,10 +517,7 @@ func (s *AlgorithmService) BatchQueryAlgorithm(ctx context.Context, req *api.Bat

// 修改我的算法
func (s *AlgorithmService) UpdateMyAlgorithm(ctx context.Context, req *api.UpdateMyAlgorithmRequest) (*api.UpdateMyAlgorithmReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.UpdateAlgorithm(ctx, &innterapi.UpdateAlgorithmRequest{
SpaceId: spaceId,
@@ -591,10 +540,7 @@ func (s *AlgorithmService) UpdateMyAlgorithm(ctx context.Context, req *api.Updat

// 修改我的算法版本
func (s *AlgorithmService) UpdatePreAlgorithmVersion(ctx context.Context, req *api.UpdateMyAlgorithmVersionRequest) (*api.UpdateMyAlgorithmVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.AlgorithmClient.UpdateAlgorithmVersion(ctx, &innterapi.UpdateAlgorithmVersionRequest{
SpaceId: spaceId,
@@ -685,21 +631,3 @@ func (s *AlgorithmService) myAlgorithmTransfer(ctx context.Context, algorithm *i
IsShared: isShared,
}
}

func (s *AlgorithmService) getUserIdAndSpaceId(ctx context.Context) (string, string, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
err := errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
s.log.Errorw(ctx, err)
return "", "", err
}

session := ss.SessionFromContext(ctx)
if session == nil {
err := errors.Errorf(nil, errors.ErrorUserNoAuthSession)
s.log.Errorw(ctx, err)
return "", "", err
}

return userId, session.GetWorkspace(), nil
}

+ 26
- 52
server/openai-server/internal/service/auth.go View File

@@ -4,11 +4,9 @@ import (
"context"
"encoding/base64"
innterapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/jwt"
"server/common/log"
ss "server/common/session"
"server/common/utils"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
@@ -60,11 +58,13 @@ func (s *AuthService) GetToken(ctx context.Context, req *api.GetTokenRequest) (*
}
reqBind := &innterapi.Bind{
Platform: req.Bind.Platform,
UserId: string(userId),
UserId: "",
UserName: req.Bind.UserName,
}
//判断该云脑账号是否已绑定第三方平台的其他账号
rep, err := s.data.UserClient.FindUser(ctx, &innterapi.FindUserRequest{
Bind: reqBind,
Email: req.Username,
Bind: reqBind,
})
if err != nil {
return nil, err
@@ -72,6 +72,18 @@ func (s *AuthService) GetToken(ctx context.Context, req *api.GetTokenRequest) (*
if rep.User != nil {
return nil, errors.Errorf(nil, errors.ErrorUserAccountBinded)
}
//判断第三方平台账号是否已绑定其他云脑账号
reqBind.UserId = string(userId)
reps, err := s.data.UserClient.FindUser(ctx, &innterapi.FindUserRequest{
Bind: reqBind,
})
if err != nil {
return nil, err
}
if reps.User != nil {
return nil, errors.Errorf(nil, errors.ErrorUserAccountBinded)
}

bindInfo := make([]*innterapi.Bind, 0)
bindInfo = append(bindInfo, reqBind)
if reply.User.Bind != nil {
@@ -92,32 +104,14 @@ func (s *AuthService) GetToken(ctx context.Context, req *api.GetTokenRequest) (*
if err != nil {
return nil, err
}
tokenClaim, err := jwt.ParseToken(token, s.conf.Server.Http.JwtSecrect)
if err != nil {
return nil, err
}
// create user online session
if err = s.data.SessionClient.Create(ctx, &ss.Session{
Id: reply.User.Id,
UserId: reply.User.Id,
Status: int32(reply.User.Status),
Attributes: make(map[string]string),
CreatedAt: tokenClaim.CreatedAt,
}); err != nil {
return nil, err
}

return &api.GetTokenReply{
Token: token,
Expiration: 0,
Expiration: s.conf.Service.TokenExpirationSec,
}, nil
}

func (s *AuthService) DeleteToken(ctx context.Context, req *api.DeleteTokenRequest) (*api.DeleteTokenReply, error) {
userId := commctx.UserIdFromContext(ctx)
if err := s.data.SessionClient.Delete(ctx, userId); err != nil {
return nil, err
}
return &api.DeleteTokenReply{}, nil
}

@@ -146,29 +140,23 @@ func (s *AuthService) RegisterAndBind(ctx context.Context, req *api.RegisterRequ
if err != nil {
return nil, err
}
//生成token
token, err := jwt.CreateToken(newUser.User.Id, s.conf.Server.Http.JwtSecrect, time.Second*time.Duration(s.conf.Service.TokenExpirationSec))
//初始化用户机时数据
_, err = s.data.BillingClient.CreateBillingOwner(ctx, &innterapi.CreateBillingOwnerRequest{
OwnerId: newUser.User.Id,
OwnerType: innterapi.BillingOwnerType_BOT_USER,
})
if err != nil {
return nil, err
}
tokenClaim, err := jwt.ParseToken(token, s.conf.Server.Http.JwtSecrect)
//生成token
token, err := jwt.CreateToken(newUser.User.Id, s.conf.Server.Http.JwtSecrect, time.Second*time.Duration(s.conf.Service.TokenExpirationSec))
if err != nil {
return nil, err
}
// create user online session
if err = s.data.SessionClient.Create(ctx, &ss.Session{
Id: newUser.User.Id,
UserId: newUser.User.Id,
Status: int32(newUser.User.Status),
Attributes: make(map[string]string),
CreatedAt: tokenClaim.CreatedAt,
}); err != nil {
return nil, err
}

return &api.RegisterReply{
Token: token,
Expiration: 0,
Expiration: s.conf.Service.TokenExpirationSec,
UserId: newUser.User.Id,
}, nil
}
@@ -194,24 +182,10 @@ func (s *AuthService) GetTokenByBind(ctx context.Context, req *api.GetTokenReque
if err != nil {
return nil, err
}
tokenClaim, err := jwt.ParseToken(token, s.conf.Server.Http.JwtSecrect)
if err != nil {
return nil, err
}
// create user online session
if err = s.data.SessionClient.Create(ctx, &ss.Session{
Id: reply.User.Id,
UserId: reply.User.Id,
Status: int32(reply.User.Status),
Attributes: make(map[string]string),
CreatedAt: tokenClaim.CreatedAt,
}); err != nil {
return nil, err
}

return &api.GetTokenReply{
Token: token,
Expiration: 0,
Expiration: s.conf.Service.TokenExpirationSec,
}, nil
} else {
return &api.GetTokenReply{


+ 14
- 38
server/openai-server/internal/service/billing.go View File

@@ -3,9 +3,9 @@ package service
import (
"context"
innerapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/log"
"server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -33,13 +33,9 @@ func NewBillingService(conf *conf.Bootstrap, logger log.Logger, data *data.Data)
}

func (s *billingService) GetBillingUser(ctx context.Context, req *api.GetBillingUserRequest) (*api.GetBillingUserReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)
owner, err := s.data.BillingClient.GetBillingOwner(ctx, &innerapi.GetBillingOwnerRequest{
OwnerId: session.UserId,
OwnerId: userId,
OwnerType: innerapi.BillingOwnerType_BOT_USER,
})
if err != nil {
@@ -53,17 +49,13 @@ func (s *billingService) GetBillingUser(ctx context.Context, req *api.GetBilling
}}, nil
}
func (s *billingService) ListUserPayRecord(ctx context.Context, req *api.ListUserPayRecordRequest) (*api.ListUserPayRecordReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)
innerReq := &innerapi.ListBillingPayRecordRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.OwnerId = session.UserId
innerReq.OwnerId = userId
innerReq.OwnerType = innerapi.BillingOwnerType_BOT_USER

innerReply, err := s.data.BillingClient.ListBillingPayRecord(ctx, innerReq)
@@ -80,17 +72,13 @@ func (s *billingService) ListUserPayRecord(ctx context.Context, req *api.ListUse
return reply, nil
}
func (s *billingService) ListUserRechargeRecord(ctx context.Context, req *api.ListUserRechargeRecordRequest) (*api.ListUserRechargeRecordReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)
innerReq := &innerapi.ListBillingRechargeRecordRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.OwnerId = session.UserId
innerReq.OwnerId = userId
innerReq.OwnerType = innerapi.BillingOwnerType_BOT_USER

innerReply, err := s.data.BillingClient.ListBillingRechargeRecord(ctx, innerReq)
@@ -107,13 +95,9 @@ func (s *billingService) ListUserRechargeRecord(ctx context.Context, req *api.Li
return reply, nil
}
func (s *billingService) GetBillingSpace(ctx context.Context, req *api.GetBillingSpaceRequest) (*api.GetBillingSpaceReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
owner, err := s.data.BillingClient.GetBillingOwner(ctx, &innerapi.GetBillingOwnerRequest{
OwnerId: session.GetWorkspace(),
OwnerId: spaceId,
OwnerType: innerapi.BillingOwnerType_BOT_SPACE,
})
if err != nil {
@@ -127,19 +111,15 @@ func (s *billingService) GetBillingSpace(ctx context.Context, req *api.GetBillin
}}, nil
}
func (s *billingService) ListSpacePayRecord(ctx context.Context, req *api.ListSpacePayRecordRequest) (*api.ListSpacePayRecordReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
innerReq := &innerapi.ListBillingPayRecordRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.OwnerId = session.GetWorkspace()
innerReq.OwnerId = spaceId
innerReq.OwnerType = innerapi.BillingOwnerType_BOT_SPACE
innerReq.ExtraInfo = map[string]string{"userId": session.UserId}
innerReq.ExtraInfo = map[string]string{"userId": userId}

innerReply, err := s.data.BillingClient.ListBillingPayRecord(ctx, innerReq)
if err != nil {
@@ -155,17 +135,13 @@ func (s *billingService) ListSpacePayRecord(ctx context.Context, req *api.ListSp
return reply, nil
}
func (s *billingService) ListSpaceRechargeRecord(ctx context.Context, req *api.ListSpaceRechargeRecordRequest) (*api.ListSpaceRechargeRecordReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
innerReq := &innerapi.ListBillingRechargeRecordRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.OwnerId = session.GetWorkspace()
innerReq.OwnerId = spaceId
innerReq.OwnerType = innerapi.BillingOwnerType_BOT_SPACE

innerReply, err := s.data.BillingClient.ListBillingRechargeRecord(ctx, innerReq)


+ 40
- 107
server/openai-server/internal/service/dataset.go View File

@@ -6,8 +6,6 @@ import (
commctx "server/common/context"
"server/common/errors"
"server/common/log"
"server/common/session"
ss "server/common/session"
"server/common/utils/collections/set"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
@@ -31,27 +29,27 @@ func NewDatasetService(conf *conf.Bootstrap, logger log.Logger, data *data.Data)
}
}

func (s *DatasetService) checkDatasetPerm(ctx context.Context, datasetId string, session *session.Session) error {
func (s *DatasetService) checkDatasetPerm(ctx context.Context, datasetId string, userId string) error {
reply, err := s.data.DatasetClient.GetDataset(ctx, &innerapi.GetDatasetRequest{Id: datasetId})
if err != nil {
return err
}

if reply.Dataset.UserId != session.UserId {
if reply.Dataset.UserId != userId {
return errors.Errorf(nil, errors.ErrorNotAuthorized)
}
return nil
}

func (s *DatasetService) checkVersionQueryPerm(ctx context.Context, datasetId string, version string, session *session.Session) error {
func (s *DatasetService) checkVersionQueryPerm(ctx context.Context, datasetId string, version string, userId string, spaceId string) error {
reply, err := s.data.DatasetClient.GetDatasetVersion(ctx, &innerapi.GetDatasetVersionRequest{DatasetId: datasetId, Version: version})
if err != nil {
return err
}
if session.UserId != reply.Dataset.UserId && reply.Dataset.SourceType == innerapi.DatasetSourceType_DST_USER {
if userId != reply.Dataset.UserId && reply.Dataset.SourceType == innerapi.DatasetSourceType_DST_USER {
hasPerm := false
for _, i := range reply.VersionAccesses {
if session.GetWorkspace() == i.SpaceId {
if spaceId == i.SpaceId {
hasPerm = true
}
}
@@ -109,14 +107,11 @@ func (s *DatasetService) ListDatasetApply(ctx context.Context, req *api.ListData
}

func (s *DatasetService) CreateDataset(ctx context.Context, req *api.CreateDatasetRequest) (*api.CreateDatasetReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.CreateDatasetRequest{
SpaceId: session.GetWorkspace(),
UserId: session.UserId,
SpaceId: spaceId,
UserId: userId,
SourceType: innerapi.DatasetSourceType_DST_USER,
Name: req.Name,
TypeId: req.TypeId,
@@ -139,10 +134,7 @@ func (s *DatasetService) CreateDataset(ctx context.Context, req *api.CreateDatas
}

func (s *DatasetService) ListMyDataset(ctx context.Context, req *api.ListMyDatasetRequest) (*api.ListMyDatasetReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.ListDatasetRequest{}
err := copier.Copy(innerReq, req)
@@ -150,8 +142,8 @@ func (s *DatasetService) ListMyDataset(ctx context.Context, req *api.ListMyDatas
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.SourceType = innerapi.DatasetSourceType_DST_USER
innerReq.UserId = session.UserId
innerReq.SpaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.SpaceId = spaceId

innerReply, err := s.data.DatasetClient.ListDataset(ctx, innerReq)
if err != nil {
@@ -168,11 +160,6 @@ func (s *DatasetService) ListMyDataset(ctx context.Context, req *api.ListMyDatas
}

func (s *DatasetService) ListPreDataset(ctx context.Context, req *api.ListPreDatasetRequest) (*api.ListPreDatasetReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

innerReq := &innerapi.ListDatasetRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
@@ -195,10 +182,7 @@ func (s *DatasetService) ListPreDataset(ctx context.Context, req *api.ListPreDat
}

func (s *DatasetService) ListCommDataset(ctx context.Context, req *api.ListCommDatasetRequest) (*api.ListCommDatasetReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.ListCommDatasetRequest{}
err := copier.Copy(innerReq, req)
@@ -206,7 +190,7 @@ func (s *DatasetService) ListCommDataset(ctx context.Context, req *api.ListCommD
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.SourceType = innerapi.DatasetSourceType_DST_USER
innerReq.ShareSpaceId = session.GetWorkspace()
innerReq.ShareSpaceId = spaceId

innerReply, err := s.data.DatasetClient.ListCommDataset(ctx, innerReq)
if err != nil {
@@ -251,12 +235,9 @@ func (s *DatasetService) listUserInCond(ctx context.Context, ids []string) (map[
}

func (s *DatasetService) DeleteDataset(ctx context.Context, req *api.DeleteDatasetRequest) (*api.DeleteDatasetReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.Id, session)
err := s.checkDatasetPerm(ctx, req.Id, userId)
if err != nil {
return nil, err
}
@@ -272,12 +253,9 @@ func (s *DatasetService) DeleteDataset(ctx context.Context, req *api.DeleteDatas
}

func (s *DatasetService) CreateDatasetVersion(ctx context.Context, req *api.CreateDatasetVersionRequest) (*api.CreateDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -297,19 +275,16 @@ func (s *DatasetService) CreateDatasetVersion(ctx context.Context, req *api.Crea
}

func (s *DatasetService) ListDatasetVersion(ctx context.Context, req *api.ListDatasetVersionRequest) (*api.ListDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

if req.Shared {
return s.listCommDatasetVersion(ctx, session, req)
return s.listCommDatasetVersion(ctx, spaceId, req)
} else {
return s.listDatasetVersion(ctx, session, req)
return s.listDatasetVersion(ctx, spaceId, req)
}
}

func (s *DatasetService) listDatasetVersion(ctx context.Context, session *session.Session, req *api.ListDatasetVersionRequest) (*api.ListDatasetVersionReply, error) {
func (s *DatasetService) listDatasetVersion(ctx context.Context, spaceId string, req *api.ListDatasetVersionRequest) (*api.ListDatasetVersionReply, error) {
reply := &api.ListDatasetVersionReply{}

innerReq := &innerapi.ListDatasetVersionRequest{}
@@ -328,7 +303,7 @@ func (s *DatasetService) listDatasetVersion(ctx context.Context, session *sessio
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
commReq.ShareSpaceId = session.GetWorkspace()
commReq.ShareSpaceId = spaceId
commReply, err := s.data.DatasetClient.ListCommDatasetVersion(ctx, commReq)
if err != nil {
return nil, err
@@ -351,7 +326,7 @@ func (s *DatasetService) listDatasetVersion(ctx context.Context, session *sessio
return reply, nil
}

func (s *DatasetService) listCommDatasetVersion(ctx context.Context, session *session.Session, req *api.ListDatasetVersionRequest) (*api.ListDatasetVersionReply, error) {
func (s *DatasetService) listCommDatasetVersion(ctx context.Context, spaceId string, req *api.ListDatasetVersionRequest) (*api.ListDatasetVersionReply, error) {
reply := &api.ListDatasetVersionReply{}

innerReq := &innerapi.ListCommDatasetVersionRequest{}
@@ -359,7 +334,7 @@ func (s *DatasetService) listCommDatasetVersion(ctx context.Context, session *se
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.ShareSpaceId = session.GetWorkspace()
innerReq.ShareSpaceId = spaceId

innerReply, err := s.data.DatasetClient.ListCommDatasetVersion(ctx, innerReq)
if err != nil {
@@ -379,12 +354,9 @@ func (s *DatasetService) listCommDatasetVersion(ctx context.Context, session *se
}

func (s *DatasetService) DeleteDatasetVersion(ctx context.Context, req *api.DeleteDatasetVersionRequest) (*api.DeleteDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -401,12 +373,9 @@ func (s *DatasetService) DeleteDatasetVersion(ctx context.Context, req *api.Dele
}

func (s *DatasetService) ShareDatasetVersion(ctx context.Context, req *api.ShareDatasetVersionRequest) (*api.ShareDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -414,7 +383,7 @@ func (s *DatasetService) ShareDatasetVersion(ctx context.Context, req *api.Share
reply, err := s.data.DatasetClient.ShareDatasetVersion(ctx, &innerapi.ShareDatasetVersionRequest{
DatasetId: req.DatasetId,
Version: req.Version,
ShareSpaceId: session.GetWorkspace(),
ShareSpaceId: spaceId,
})
if err != nil {
return nil, err
@@ -424,12 +393,9 @@ func (s *DatasetService) ShareDatasetVersion(ctx context.Context, req *api.Share
}

func (s *DatasetService) CloseShareDatasetVersion(ctx context.Context, req *api.CloseShareDatasetVersionRequest) (*api.CloseShareDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -437,7 +403,7 @@ func (s *DatasetService) CloseShareDatasetVersion(ctx context.Context, req *api.
reply, err := s.data.DatasetClient.CloseShareDatasetVersion(ctx, &innerapi.CloseShareDatasetVersionRequest{
DatasetId: req.DatasetId,
Version: req.Version,
ShareSpaceId: session.GetWorkspace(),
ShareSpaceId: spaceId,
})
if err != nil {
return nil, err
@@ -447,12 +413,9 @@ func (s *DatasetService) CloseShareDatasetVersion(ctx context.Context, req *api.
}

func (s *DatasetService) ConfirmUploadDatasetVersion(ctx context.Context, req *api.ConfirmUploadDatasetVersionRequest) (*api.ConfirmUploadDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -470,12 +433,9 @@ func (s *DatasetService) ConfirmUploadDatasetVersion(ctx context.Context, req *a
}

func (s *DatasetService) UploadDatasetVersion(ctx context.Context, req *api.UploadDatasetVersionRequest) (*api.UploadDatasetVersionReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkDatasetPerm(ctx, req.DatasetId, session)
err := s.checkDatasetPerm(ctx, req.DatasetId, userId)
if err != nil {
return nil, err
}
@@ -496,12 +456,9 @@ func (s *DatasetService) UploadDatasetVersion(ctx context.Context, req *api.Uplo
}

func (s *DatasetService) ListDatasetVersionFile(ctx context.Context, req *api.ListDatasetVersionFileRequest) (*api.ListDatasetVersionFileReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkVersionQueryPerm(ctx, req.DatasetId, req.Version, session)
err := s.checkVersionQueryPerm(ctx, req.DatasetId, req.Version, userId, spaceId)
if err != nil {
return nil, err
}
@@ -525,10 +482,7 @@ func (s *DatasetService) ListDatasetVersionFile(ctx context.Context, req *api.Li
}

func (s *DatasetService) UpdateMyDataset(ctx context.Context, req *api.UpdateMyDatasetRequest) (*api.UpdateMyDatasetReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.DatasetClient.UpdateDataset(ctx, &innerapi.UpdateDatasetRequest{
SpaceId: spaceId,
@@ -549,10 +503,7 @@ func (s *DatasetService) UpdateMyDataset(ctx context.Context, req *api.UpdateMyD
}

func (s *DatasetService) UpdateMyDatasetVersion(ctx context.Context, req *api.UpdateMyDatasetVersionRequest) (*api.UpdateMyDatasetVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.DatasetClient.UpdateDatasetVersion(ctx, &innerapi.UpdateDatasetVersionRequest{
SpaceId: spaceId,
@@ -570,21 +521,3 @@ func (s *DatasetService) UpdateMyDatasetVersion(ctx context.Context, req *api.Up
UpdatedAt: reply.UpdatedAt,
}, nil
}

func (s *DatasetService) getUserIdAndSpaceId(ctx context.Context) (string, string, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
err := errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
s.log.Errorw(ctx, err)
return "", "", err
}

session := ss.SessionFromContext(ctx)
if session == nil {
err := errors.Errorf(nil, errors.ErrorUserNoAuthSession)
s.log.Errorw(ctx, err)
return "", "", err
}

return userId, session.GetWorkspace(), nil
}

+ 15
- 48
server/openai-server/internal/service/develop.go View File

@@ -3,9 +3,9 @@ package service
import (
"context"
innerapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/log"
"server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -29,18 +29,15 @@ func NewDevelopService(conf *conf.Bootstrap, logger log.Logger, data *data.Data)
}

func (s *DevelopService) CreateNotebook(ctx context.Context, req *api.CreateNotebookRequest) (*api.CreateNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.CreateNotebookRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, err
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.DevelopClient.CreateNotebook(ctx, innerReq)
if err != nil {
@@ -63,12 +60,9 @@ func (s *DevelopService) checkPermission(ctx context.Context, notebookId string,
}

func (s *DevelopService) StartNotebook(ctx context.Context, req *api.StartNotebookRequest) (*api.StartNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.Id, session.UserId)
err := s.checkPermission(ctx, req.Id, userId)
if err != nil {
return nil, err
}
@@ -82,12 +76,9 @@ func (s *DevelopService) StartNotebook(ctx context.Context, req *api.StartNotebo
}

func (s *DevelopService) StopNotebook(ctx context.Context, req *api.StopNotebookRequest) (*api.StopNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.Id, session.UserId)
err := s.checkPermission(ctx, req.Id, userId)
if err != nil {
return nil, err
}
@@ -101,12 +92,9 @@ func (s *DevelopService) StopNotebook(ctx context.Context, req *api.StopNotebook
}

func (s *DevelopService) DeleteNotebook(ctx context.Context, req *api.DeleteNotebookRequest) (*api.DeleteNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.Id, session.UserId)
err := s.checkPermission(ctx, req.Id, userId)
if err != nil {
return nil, err
}
@@ -120,18 +108,15 @@ func (s *DevelopService) DeleteNotebook(ctx context.Context, req *api.DeleteNote
}

func (s *DevelopService) ListNotebook(ctx context.Context, req *api.ListNotebookRequest) (*api.ListNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.ListNotebookRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.DevelopClient.ListNotebook(ctx, innerReq)
if err != nil {
@@ -148,11 +133,6 @@ func (s *DevelopService) ListNotebook(ctx context.Context, req *api.ListNotebook
}

func (s *DevelopService) QueryNotebook(ctx context.Context, req *api.QueryNotebookRequest) (*api.QueryNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

innerReq := &innerapi.GetNotebookRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
@@ -175,11 +155,6 @@ func (s *DevelopService) QueryNotebook(ctx context.Context, req *api.QueryNotebo

// Notebook事件列表
func (s *DevelopService) GetNotebookEventList(ctx context.Context, req *api.NotebookEventListRequest) (*api.NotebookEventListReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

innerReq := &innerapi.NotebookEventListRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
@@ -201,11 +176,6 @@ func (s *DevelopService) GetNotebookEventList(ctx context.Context, req *api.Note

// 保存notebook
func (s *DevelopService) SaveNotebook(ctx context.Context, req *api.SaveNotebookRequest) (*api.SaveNotebookReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

sReq := &innerapi.SaveNotebookRequest{
NotebookId: req.NotebookId,
TaskName: req.TaskName,
@@ -220,12 +190,9 @@ func (s *DevelopService) SaveNotebook(ctx context.Context, req *api.SaveNotebook
}

func (s *DevelopService) ListNotebookEventRecord(ctx context.Context, req *api.ListNotebookEventRecordRequest) (*api.ListNotebookEventRecordReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.NotebookId, session.UserId)
err := s.checkPermission(ctx, req.NotebookId, userId)
if err != nil {
return nil, err
}


+ 10
- 30
server/openai-server/internal/service/image.go View File

@@ -6,7 +6,6 @@ import (
commctx "server/common/context"
"server/common/errors"
"server/common/log"
ss "server/common/session"
"server/common/utils/collections/set"
pb "server/openai-server/api/v1"
"server/openai-server/internal/conf"
@@ -70,11 +69,7 @@ func (s *ImageService) ListPreImage(ctx context.Context, req *pb.ListPreImageReq
}

func (s *ImageService) ListUserImage(ctx context.Context, req *pb.ListUserImageRequest) (*pb.ListUserImageReply, error) {
userId := commctx.UserIdFromContext(ctx)
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ImageClient.ListUserImage(ctx, &innterapi.ListUserImageRequest{
PageSize: req.PageSize,
@@ -82,7 +77,7 @@ func (s *ImageService) ListUserImage(ctx context.Context, req *pb.ListUserImageR
SortBy: req.SortBy,
OrderBy: req.OrderBy,
UserId: userId,
SpaceId: session.GetWorkspace(),
SpaceId: spaceId,
ImageNameLike: req.ImageNameLike,
NameVerLike: req.NameVerLike,
SourceType: innterapi.ImageSourceType(req.SourceType),
@@ -159,17 +154,14 @@ func (s *ImageService) ListUserImage(ctx context.Context, req *pb.ListUserImageR
}

func (s *ImageService) ListCommImage(ctx context.Context, req *pb.ListCommImageRequest) (*pb.ListCommImageReply, error) {
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ImageClient.ListCommImage(ctx, &innterapi.ListCommImageRequest{
PageSize: req.PageSize,
PageIndex: req.PageIndex,
SortBy: req.SortBy,
OrderBy: req.OrderBy,
SpaceId: session.GetWorkspace(),
SpaceId: spaceId,
ImageNameLike: req.ImageNameLike,
NameVerLike: req.NameVerLike,
SourceType: innterapi.ImageSourceType(req.SourceType),
@@ -223,11 +215,7 @@ func (s *ImageService) ListCommImage(ctx context.Context, req *pb.ListCommImageR
}

func (s *ImageService) AddImage(ctx context.Context, req *pb.AddImageRequest) (*pb.AddImageReply, error) {
userId := commctx.UserIdFromContext(ctx)
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ImageClient.AddImage(ctx, &innterapi.AddImageRequest{
ImageName: req.ImageName,
@@ -237,7 +225,7 @@ func (s *ImageService) AddImage(ctx context.Context, req *pb.AddImageRequest) (*
SourceType: innterapi.ImageSourceType(req.SourceType),
IsPrefab: innterapi.ImageIsPrefab_IMAGE_IS_PREFAB_NO,
UserId: userId,
SpaceId: session.GetWorkspace(),
SpaceId: spaceId,
})

if err != nil {
@@ -320,12 +308,8 @@ func (s *ImageService) UpdateImage(ctx context.Context, req *pb.UpdateImageReque
}

func (s *ImageService) ShareImage(ctx context.Context, req *pb.ShareImageRequest) (*pb.ShareImageReply, error) {
userId := commctx.UserIdFromContext(ctx)
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
reply, err := s.data.ImageClient.ShareImage(ctx, &innterapi.ShareImageRequest{ImageId: req.ImageId, UserId: userId, SpaceId: session.GetWorkspace()})
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
reply, err := s.data.ImageClient.ShareImage(ctx, &innterapi.ShareImageRequest{ImageId: req.ImageId, UserId: userId, SpaceId: spaceId})
if err != nil {
return nil, err
}
@@ -333,15 +317,11 @@ func (s *ImageService) ShareImage(ctx context.Context, req *pb.ShareImageRequest
}

func (s *ImageService) CloseShareImage(ctx context.Context, req *pb.CloseShareImageRequest) (*pb.CloseShareImageReply, error) {
userId := commctx.UserIdFromContext(ctx)
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)
reply, err := s.data.ImageClient.CloseShareImage(ctx, &innterapi.CloseShareImageRequest{
ImageId: req.ImageId,
UserId: userId,
SpaceId: session.GetWorkspace(),
SpaceId: spaceId,
})
if err != nil {
return nil, err


+ 4
- 33
server/openai-server/internal/service/jointcloud.go View File

@@ -5,8 +5,6 @@ import (
innerapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/session"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -136,18 +134,15 @@ func (s *JointCloudService) ListJointCloudInterpreterVersion(ctx context.Context

//创建训练任务
func (s *JointCloudService) JointCloudTrainJob(ctx context.Context, req *api.JointCloudTrainJobRequest) (*api.JointCloudTrainJobReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.JointCloudTrainJobRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.JointCloudClient.TrainJob(ctx, innerReq)
if err != nil {
@@ -164,10 +159,7 @@ func (s *JointCloudService) ListJointCloudJob(ctx context.Context, req *api.List
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}

userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq.UserId = userId
innerReq.SpaceId = spaceId
@@ -188,11 +180,6 @@ func (s *JointCloudService) ListJointCloudJob(ctx context.Context, req *api.List

// 停止训练任务
func (s *JointCloudService) StopJob(ctx context.Context, req *api.JointCloudStopJobRequest) (*api.JointCloudStopJobReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

//trainJob, err := s.data.JointCloudClient.GetTrainJobInfo(ctx, &innerapi.TrainJobInfoRequest{Id: req.Id})
//if err != nil {
// return nil, err
@@ -210,19 +197,3 @@ func (s *JointCloudService) StopJob(ctx context.Context, req *api.JointCloudStop
}
return &api.JointCloudStopJobReply{StoppedAt: reply.StoppedAt}, nil
}

func (s *JointCloudService) getUserIdAndSpaceId(ctx context.Context) (string, string, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
err := errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
return "", "", err
}

session := ss.SessionFromContext(ctx)
if session == nil {
err := errors.Errorf(nil, errors.ErrorUserNoAuthSession)
return "", "", err
}

return userId, session.GetWorkspace(), nil
}

+ 9
- 55
server/openai-server/internal/service/model.go View File

@@ -6,7 +6,6 @@ import (
commctx "server/common/context"
"server/common/errors"
"server/common/log"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -61,10 +60,7 @@ func (s *ModelService) ListPreModel(ctx context.Context, req *api.ListPreModelRe

// 查询我的模型列表
func (s *ModelService) ListMyModel(ctx context.Context, req *api.ListMyModelRequest) (*api.ListMyModelReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.ListMyModel(ctx, &innterapi.ListMyModelRequest{
SpaceId: spaceId,
@@ -98,10 +94,7 @@ func (s *ModelService) ListMyModel(ctx context.Context, req *api.ListMyModelRequ

// 查询公共模型列表
func (s *ModelService) ListCommModel(ctx context.Context, req *api.ListCommModelRequest) (*api.ListCommModelReply, error) {
_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.ListCommModel(ctx, &innterapi.ListCommModelRequest{
SpaceId: spaceId,
@@ -134,10 +127,7 @@ func (s *ModelService) ListCommModel(ctx context.Context, req *api.ListCommModel

// 查询模型版本列表
func (s *ModelService) ListModelVersion(ctx context.Context, req *api.ListModelVersionRequest) (*api.ListModelVersionReply, error) {
_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.ListModelVersion(ctx, &innterapi.ListModelVersionRequest{
ModelId: req.ModelId,
@@ -185,10 +175,7 @@ func (s *ModelService) ListModelVersion(ctx context.Context, req *api.ListModelV

// 查询公共模型版本列表
func (s *ModelService) ListCommModelVersion(ctx context.Context, req *api.ListCommModelVersionRequest) (*api.ListCommModelVersionReply, error) {
_, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
_, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.ListCommModelVersion(ctx, &innterapi.ListCommModelVersionRequest{
SpaceId: spaceId,
@@ -218,10 +205,7 @@ func (s *ModelService) ListCommModelVersion(ctx context.Context, req *api.ListCo

// 分享模型版本到公共模型
func (s *ModelService) ShareModelVersion(ctx context.Context, req *api.ShareModelVersionRequest) (*api.ShareModelVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.ShareModelVersion(ctx, &innterapi.ShareModelVersionRequest{
SpaceId: spaceId,
@@ -241,10 +225,7 @@ func (s *ModelService) ShareModelVersion(ctx context.Context, req *api.ShareMode

// 取消分享模型版本到公共模型
func (s *ModelService) CloseShareModelVersion(ctx context.Context, req *api.CloseShareModelVersionRequest) (*api.CloseShareModelVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.CloseShareModelVersion(ctx, &innterapi.CloseShareModelVersionRequest{
SpaceId: spaceId,
@@ -264,10 +245,7 @@ func (s *ModelService) CloseShareModelVersion(ctx context.Context, req *api.Clos

// 删除我的模型版本
func (s *ModelService) DeleteMyModelVersion(ctx context.Context, req *api.DeleteMyModelVersionRequest) (*api.DeleteMyModelVersionReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.DeleteMyModelVersion(ctx, &innterapi.DeleteMyModelVersionRequest{
SpaceId: spaceId,
@@ -286,10 +264,7 @@ func (s *ModelService) DeleteMyModelVersion(ctx context.Context, req *api.Delete

// 删除我的模型
func (s *ModelService) DeleteMyModel(ctx context.Context, req *api.DeleteMyModelRequest) (*api.DeleteMyModelReply, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.DeleteMyModel(ctx, &innterapi.DeleteMyModelRequest{
SpaceId: spaceId,
@@ -421,29 +396,8 @@ func (s *ModelService) modelVersionTransfer(modelVersion *innterapi.VersionDetai
return modelVersionDetail, nil
}

func (s *ModelService) getUserIdAndSpaceId(ctx context.Context) (string, string, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
err := errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
s.log.Errorw(ctx, err)
return "", "", err
}

session := ss.SessionFromContext(ctx)
if session == nil {
err := errors.Errorf(nil, errors.ErrorUserNoAuthSession)
s.log.Errorw(ctx, err)
return "", "", err
}

return userId, session.GetWorkspace(), nil
}

func (s *ModelService) viewCtrl(ctx context.Context, modelId string, version string) (bool, error) {
userId, spaceId, err := s.getUserIdAndSpaceId(ctx)
if err != nil {
return false, err
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

reply, err := s.data.ModelClient.QueryModelVersion(ctx, &innterapi.QueryModelVersionRequest{
ModelId: modelId,


+ 15
- 30
server/openai-server/internal/service/modeldeploy.go View File

@@ -3,9 +3,9 @@ package service
import (
"context"
innerapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/log"
"server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -30,18 +30,15 @@ func NewModelDeployService(conf *conf.Bootstrap, logger log.Logger, data *data.D

//创建模型服务
func (s *ModelDeployService) DeployModel(ctx context.Context, req *api.DepRequest) (*api.DepReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.DepRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.ModelDeployClient.DeployModel(ctx, innerReq)
if err != nil {
@@ -57,16 +54,13 @@ func (s *ModelDeployService) DeployModel(ctx context.Context, req *api.DepReques

// 停止模型服务
func (s *ModelDeployService) StopDepModel(ctx context.Context, req *api.StopDepRequest) (*api.StopDepReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)
//查询任务是否存在及用户是否一致
depInfo, err := s.data.ModelDeployClient.GetModelDepInfo(ctx, &innerapi.DepInfoRequest{Id: req.Id})
if err != nil {
return nil, err
}
if depInfo.DepInfo.UserId != session.UserId {
if depInfo.DepInfo.UserId != userId {
return nil, errors.Errorf(nil, errors.ErrorNotAuthorized)
}
innerReq := &innerapi.StopDepRequest{
@@ -82,17 +76,14 @@ func (s *ModelDeployService) StopDepModel(ctx context.Context, req *api.StopDepR

//删除模型服务
func (s *ModelDeployService) DeleteDepModel(ctx context.Context, req *api.DeleteDepRequest) (*api.DeleteDepReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.JobIds, session.UserId)
err := s.checkPermission(ctx, req.JobIds, userId)
if err != nil {
return nil, err
}

innerReq := &innerapi.DeleteDepRequest{UserId: session.UserId, JobIds: req.JobIds}
innerReq := &innerapi.DeleteDepRequest{UserId: userId, JobIds: req.JobIds}
reply, err := s.data.ModelDeployClient.DeleteDepModel(ctx, innerReq)
if err != nil {
return nil, err
@@ -117,18 +108,15 @@ func (s *ModelDeployService) checkPermission(ctx context.Context, serviceIds []s

// 模型服务调用
func (s *ModelDeployService) ModelServiceInfer(ctx context.Context, req *api.ServiceRequest) (*api.ServiceReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.ServiceRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.ModelDeployClient.ModelServiceInfer(ctx, innerReq)
if err != nil {
@@ -159,10 +147,7 @@ func (s *ModelDeployService) GetModelDepInfo(ctx context.Context, req *api.DepIn

// 模型服务列表
func (s *ModelDeployService) ListDepModel(ctx context.Context, req *api.DepListRequest) (*api.DepListReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.DepListRequest{}
err := copier.Copy(innerReq, req)
@@ -170,8 +155,8 @@ func (s *ModelDeployService) ListDepModel(ctx context.Context, req *api.DepListR
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}

innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.ModelDeployClient.ListDepModel(ctx, innerReq)
if err != nil {


+ 6
- 21
server/openai-server/internal/service/resourcespec.go View File

@@ -3,10 +3,10 @@ package service
import (
"context"
innerapi "server/base-server/api/v1"
"server/common/constant"
commctx "server/common/context"
"server/common/errors"
"server/common/log"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -32,14 +32,11 @@ func NewResourceSpecService(conf *conf.Bootstrap, logger log.Logger, data *data.

func (rsvc *ResourceSpecService) ListResourceSpec(ctx context.Context, req *empty.Empty) (*api.ListResourceSpecReply, error) {

_, workSpaceId, isDefaultSpace, err := rsvc.getUserIdAndSpaceId(ctx)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorListResourceSpec)
}
_, workSpaceId, isDefaultSpace := rsvc.getUserIdAndSpaceId(ctx)

rq := &innerapi.GetResourcePoolReply{}
if isDefaultSpace {
rq, err = rsvc.data.ResourcePoolClient.GetDefaultResourcePool(ctx, &empty.Empty{})
_, err := rsvc.data.ResourcePoolClient.GetDefaultResourcePool(ctx, &empty.Empty{})

if err != nil {
return nil, errors.Errorf(err, errors.ErrorListResourceSpec)
@@ -101,20 +98,8 @@ func (rsvc *ResourceSpecService) ListResourceSpec(ctx context.Context, req *empt
}, nil
}

func (rsvc *ResourceSpecService) getUserIdAndSpaceId(ctx context.Context) (string, string, bool, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
err := errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
rsvc.log.Errorw(ctx, err)
return "", "", false, err
}

session := ss.SessionFromContext(ctx)
if session == nil {
err := errors.Errorf(nil, errors.ErrorUserNoAuthSession)
rsvc.log.Errorw(ctx, err)
return "", "", false, err
}
func (rsvc *ResourceSpecService) getUserIdAndSpaceId(ctx context.Context) (string, string, bool) {
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

return userId, session.GetWorkspace(), session.IsDefaultWorkspace(), nil
return userId, spaceId, spaceId == constant.SYSTEM_WORKSPACE_DEFAULT
}

+ 29
- 63
server/openai-server/internal/service/trainjob.go View File

@@ -3,9 +3,9 @@ package service
import (
"context"
innerapi "server/base-server/api/v1"
commctx "server/common/context"
"server/common/errors"
"server/common/log"
"server/common/session"
"server/common/utils"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
@@ -31,18 +31,15 @@ func NewTrainJobService(conf *conf.Bootstrap, logger log.Logger, data *data.Data

//创建训练任务
func (s *TrainJobService) TrainJob(ctx context.Context, req *api.TrainJobRequest) (*api.TrainJobReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.TrainJobRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.TrainJobClient.TrainJob(ctx, innerReq)
if err != nil {
@@ -54,16 +51,14 @@ func (s *TrainJobService) TrainJob(ctx context.Context, req *api.TrainJobRequest

// 停止训练任务
func (s *TrainJobService) StopJob(ctx context.Context, req *api.StopJobRequest) (*api.StopJobReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

//查询任务是否存在及用户是否一直
trainJob, err := s.data.TrainJobClient.GetTrainJobInfo(ctx, &innerapi.TrainJobInfoRequest{Id: req.Id})
if err != nil {
return nil, err
}
if trainJob.TrainJob.UserId != session.UserId {
if trainJob.TrainJob.UserId != userId {
return nil, errors.Errorf(nil, errors.ErrorNotAuthorized)
}
innerReq := &innerapi.StopJobRequest{
@@ -79,17 +74,14 @@ func (s *TrainJobService) StopJob(ctx context.Context, req *api.StopJobRequest)

//删除训练任务
func (s *TrainJobService) DeleteJob(ctx context.Context, req *api.DeleteJobRequest) (*api.DeleteJobReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

err := s.checkPermission(ctx, req.JobIds, session.UserId)
err := s.checkPermission(ctx, req.JobIds, userId)
if err != nil {
return nil, err
}

innerReq := &innerapi.DeleteJobRequest{UserId: session.UserId, JobIds: req.JobIds}
innerReq := &innerapi.DeleteJobRequest{UserId: userId, JobIds: req.JobIds}
reply, err := s.data.TrainJobClient.DeleteJob(ctx, innerReq)
if err != nil {
return nil, err
@@ -100,17 +92,14 @@ func (s *TrainJobService) DeleteJob(ctx context.Context, req *api.DeleteJobReque

// 获取训练任务详情
func (s *TrainJobService) GetJobInfo(ctx context.Context, req *api.TrainJobInfoRequest) (*api.TrainJobInfoReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

innerTrainJobInfo, err := s.data.TrainJobClient.GetTrainJobInfo(ctx, &innerapi.TrainJobInfoRequest{Id: req.Id})
if err != nil {
return nil, err
}

if innerTrainJobInfo.TrainJob.UserId != session.UserId {
if innerTrainJobInfo.TrainJob.UserId != userId {
return nil, errors.Errorf(nil, errors.ErrorNotAuthorized)
}

@@ -130,18 +119,15 @@ func (s *TrainJobService) GetJobInfo(ctx context.Context, req *api.TrainJobInfoR

// 训练任务列表
func (s *TrainJobService) TrainJobList(ctx context.Context, req *api.TrainJobListRequest) (*api.TrainJobListReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.TrainJobListRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.TrainJobClient.TrainJobList(ctx, innerReq)
if err != nil {
@@ -171,18 +157,15 @@ func (s *TrainJobService) TrainJobList(ctx context.Context, req *api.TrainJobLis

// 创建训练任务模板
func (s *TrainJobService) CreateJobTemplate(ctx context.Context, req *api.TrainJobTemplateRequest) (*api.TrainJobTemplateReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.TrainJobTemplateRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, err
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.TrainJobClient.CreateJobTemplate(ctx, innerReq)
if err != nil {
@@ -202,21 +185,18 @@ func (s *TrainJobService) CopyJobTemplate(ctx context.Context, req *api.CopyJobT
}
return &api.CopyJobTemplateReply{
TemplateId: reply.TemplateId,
},nil
}, nil
}

//获取任务模板信息
func (s *TrainJobService) GetJobTemplate(ctx context.Context, req *api.GetJobTemplateRequest) (*api.GetJobTemplateReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReply, err := s.data.TrainJobClient.GetJobTemplate(ctx, &innerapi.GetJobTemplateRequest{Id: req.Id})
if err != nil {
return nil, err
}
if innerReply.JobTemplate.UserId != session.UserId {
if innerReply.JobTemplate.UserId != userId {
return nil, errors.Errorf(nil, errors.ErrorNotAuthorized)
}

@@ -236,16 +216,13 @@ func (s *TrainJobService) GetJobTemplate(ctx context.Context, req *api.GetJobTem

//更新任务模板
func (s *TrainJobService) UpdateJobTemplate(ctx context.Context, req *api.TrainJobTemplate) (*api.TrainJobTemplateReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

innerJobTemplate, err := s.data.TrainJobClient.GetJobTemplate(ctx, &innerapi.GetJobTemplateRequest{Id: req.Id})
if err != nil {
return nil, err
}
if innerJobTemplate.JobTemplate.UserId != session.UserId {
if innerJobTemplate.JobTemplate.UserId != userId {
return nil, errors.Errorf(nil, errors.ErrorNotAuthorized)
}

@@ -254,7 +231,7 @@ func (s *TrainJobService) UpdateJobTemplate(ctx context.Context, req *api.TrainJ
if err != nil {
return nil, err
}
innerReq.UserId = session.UserId
innerReq.UserId = userId
innerReq.WorkspaceId = innerJobTemplate.JobTemplate.WorkspaceId

innerReply, err := s.data.TrainJobClient.UpdateJobTemplate(ctx, innerReq)
@@ -269,13 +246,10 @@ func (s *TrainJobService) UpdateJobTemplate(ctx context.Context, req *api.TrainJ

// 删除任务模板
func (s *TrainJobService) DeleteTemplate(ctx context.Context, req *api.DeleteJobTemplateRequest) (*api.DeleteJobTemplateReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.DeleteJobTemplateRequest{
UserId: session.UserId,
UserId: userId,
TemplateIds: req.TemplateIds,
}

@@ -290,18 +264,15 @@ func (s *TrainJobService) DeleteTemplate(ctx context.Context, req *api.DeleteJob

// 任务模板列表
func (s *TrainJobService) TrainJobTemplateList(ctx context.Context, req *api.TrainJobTemplateListRequest) (*api.TrainJobTemplateListReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
userId, spaceId := commctx.UserIdAndSpaceIdFromContext(ctx)

innerReq := &innerapi.TrainJobTemplateListRequest{}
err := copier.Copy(innerReq, req)
if err != nil {
return nil, errors.Errorf(err, errors.ErrorStructCopy)
}
innerReq.UserId = session.UserId
innerReq.WorkspaceId = session.GetWorkspace()
innerReq.UserId = userId
innerReq.WorkspaceId = spaceId

innerReply, err := s.data.TrainJobClient.ListJobTemplate(ctx, innerReq)
if err != nil {
@@ -475,11 +446,6 @@ func (s *TrainJobService) assignValueToTemplate(ctx context.Context, templates [

// 任务事件列表
func (s *TrainJobService) GetJobEventList(ctx context.Context, req *api.JobEventListRequest) (*api.JobEventListReply, error) {
session := session.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

innerReq := &innerapi.JobEventListRequest{}
err := copier.Copy(innerReq, req)
if err != nil {


+ 2
- 60
server/openai-server/internal/service/user.go View File

@@ -7,7 +7,6 @@ import (
commctx "server/common/context"
"server/common/errors"
"server/common/log"
ss "server/common/session"
api "server/openai-server/api/v1"
"server/openai-server/internal/conf"
"server/openai-server/internal/data"
@@ -43,12 +42,6 @@ func (s *UserService) GetUserInfo(ctx context.Context, req *api.GetUserInfoReque
return nil, errors.Errorf(nil, errors.ErrorUserAccountNotExisted)
}

session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}

workspaceId := session.GetWorkspace()
return &api.GetUserInfoReply{
User: &api.UserItem{
Id: reply.User.Id,
@@ -60,7 +53,6 @@ func (s *UserService) GetUserInfo(ctx context.Context, req *api.GetUserInfoReque
Gender: int32(reply.User.Gender),
Status: int32(reply.User.Status),
},
WorkspaceId: workspaceId,
}, nil
}

@@ -99,59 +91,9 @@ func (s *UserService) ListUserWorkspaces(ctx context.Context, req *api.ListUserW
}, nil
}

func (s *UserService) PutUserWorkspace(ctx context.Context, req *api.PutUserWorkspaceRequest) (*api.PutUserWorkspaceReply, error) {
userId := commctx.UserIdFromContext(ctx)
if userId == "" {
return nil, errors.Errorf(nil, errors.ErrorInvalidRequestParameter)
}
if userId != req.UserId {
return nil, errors.Errorf(nil, errors.ErrorUserIdNotRight)
}
if req.WorkspaceId == "" {
req.WorkspaceId = constant.SYSTEM_WORKSPACE_DEFAULT
}
if req.WorkspaceId != constant.SYSTEM_WORKSPACE_DEFAULT {
// is it having workspace
result, err := s.data.WorkspaceClient.GetWorkspace(ctx, &innterapi.GetWorkspaceRequest{WorkspaceId: req.WorkspaceId})
if err != nil {
return nil, err
}
if result.Workspace == nil {
return nil, errors.Errorf(nil, errors.ErrorWorkSpaceNotExist)
}
// is it user in workspace
userWorkspaces, err := s.data.WorkspaceClient.ListUserWorkspaces(ctx, &innterapi.ListUserWorkspacesRequest{UserId: userId})
if err != nil {
return nil, err
}
var isInWorkspace bool
for _, w := range userWorkspaces.Workspaces {
if w.Id == req.WorkspaceId {
isInWorkspace = true
break
}
}
if !isInWorkspace {
return nil, errors.Errorf(nil, errors.ErrorUserWorkSpaceNoPermission)
}
}

session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
if err := session.SetWorkspace(req.WorkspaceId); err != nil {
return nil, err
}
return &api.PutUserWorkspaceReply{}, nil
}

func (s *UserService) GetUserConfig(ctx context.Context, req *api.GetUserConfigRequest) (*api.GetUserConfigReply, error) {
session := ss.SessionFromContext(ctx)
if session == nil {
return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession)
}
reply, err := s.data.UserClient.GetUserConfig(ctx, &innterapi.GetUserConfigRequest{UserId: session.UserId})
userId, _ := commctx.UserIdAndSpaceIdFromContext(ctx)
reply, err := s.data.UserClient.GetUserConfig(ctx, &innterapi.GetUserConfigRequest{UserId: userId})
if err != nil {
return nil, err
}


Loading…
Cancel
Save