Compare commits

...

8 Commits

Author SHA1 Message Date
Liujian 0a1b08157d add default router when create new rest service 2024-12-16 14:31:52 +08:00
Liujian 4c685a9ec6 fix aksk bug 2024-12-13 18:52:21 +08:00
Liujian a93e5b4ff8 fix ai provider upstream bug 2024-12-10 17:24:51 +08:00
ningyv 85d25bebe2 Merge branch 'main' of github.com:APIParkLab/APIPark 2024-12-10 15:34:44 +08:00
lichunxian 9fa43ccc00 Merge branch 'fix/certificatePermission' into 'main'
fix: table-permission

See merge request apipark/APIPark!124
2024-12-10 15:17:11 +08:00
ningyv c2a11050dd fix: table-permission 2024-12-10 15:16:19 +08:00
Dot.L 080bfc3a44 Merge pull request #143 from eltociear/patch-1
chore: update index.tsx
2024-12-09 21:48:14 +08:00
Ikko Eltociear Ashimine 836c7699b8 chore: update index.tsx
protocal -> protocol
2024-12-04 15:54:09 +09:00
14 changed files with 142 additions and 53 deletions
+6 -6
View File
@@ -27,7 +27,7 @@ type imlAPIController struct {
}
func (i *imlAPIController) Create(ctx *gin.Context, serviceId string, input *ai_api_dto.CreateAPI) (*ai_api_dto.API, error) {
info, err := i.serviceModule.Get(ctx, serviceId)
_, err := i.serviceModule.Get(ctx, serviceId)
if err != nil {
return nil, err
}
@@ -52,7 +52,7 @@ func (i *imlAPIController) Create(ctx *gin.Context, serviceId string, input *ai_
plugins["ai_formatter"] = api.PluginSetting{
Config: plugin_model.ConfigType{
"model": input.AiModel.Id,
"provider": fmt.Sprintf("%s@ai-provider", info.Provider.Id),
"provider": fmt.Sprintf("%s@ai-provider", input.AiModel.Provider),
"config": input.AiModel.Config,
},
}
@@ -73,7 +73,7 @@ func (i *imlAPIController) Create(ctx *gin.Context, serviceId string, input *ai_
Retry: input.Retry,
Plugins: plugins,
},
Upstream: info.Provider.Id,
Upstream: input.AiModel.Provider,
Disable: false,
})
@@ -86,7 +86,7 @@ func (i *imlAPIController) Create(ctx *gin.Context, serviceId string, input *ai_
}
func (i *imlAPIController) Edit(ctx *gin.Context, serviceId string, apiId string, input *ai_api_dto.EditAPI) (*ai_api_dto.API, error) {
info, err := i.serviceModule.Get(ctx, serviceId)
_, err := i.serviceModule.Get(ctx, serviceId)
if err != nil {
return nil, err
}
@@ -106,11 +106,11 @@ func (i *imlAPIController) Edit(ctx *gin.Context, serviceId string, apiId string
proxy.Plugins["ai_formatter"] = api.PluginSetting{
Config: plugin_model.ConfigType{
"model": input.AiModel.Id,
"provider": fmt.Sprintf("%s@ai-provider", info.Provider.Id),
"provider": fmt.Sprintf("%s@ai-provider", input.AiModel.Provider),
"config": input.AiModel.Config,
},
}
upstream = &info.Provider.Id
upstream = &input.AiModel.Provider
}
if input.AiPrompt != nil {
+27 -1
View File
@@ -326,7 +326,33 @@ func (i *imlServiceController) Create(ctx *gin.Context, teamID string, input *se
if input.Kind == "ai" {
return i.createAIService(ctx, teamID, input)
}
return i.module.Create(ctx, teamID, input)
var err error
var info *service_dto.Service
err = i.transaction.Transaction(ctx, func(txCtx context.Context) error {
info, err = i.module.Create(txCtx, teamID, input)
if err != nil {
return err
}
path := fmt.Sprintf("/%s/", strings.Trim(input.Prefix, "/"))
_, err = i.routerModule.Create(txCtx, info.Id, &router_dto.Create{
Id: uuid.New().String(),
Name: "",
Path: path + "*",
Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodPatch, http.MethodOptions},
Description: "auto create by create service",
Protocols: []string{"http", "https"},
MatchRules: nil,
Upstream: "",
Proxy: &router_dto.InputProxy{
Path: path,
Timeout: 30000,
Retry: 0,
},
Disable: false,
})
return err
})
return info, err
}
func (i *imlServiceController) Edit(ctx *gin.Context, id string, input *service_dto.EditService) (*service_dto.Service, error) {
+22 -1
View File
@@ -265,7 +265,8 @@ func (i *imlInitController) OnInit() {
return fmt.Errorf("create default team error: %v", err)
}
// 创建Rest服务
_, err = i.serviceModule.Create(ctx, info.Id, &service_dto.CreateService{
restPath := "/rest-demo"
serviceInfo, err := i.serviceModule.Create(ctx, info.Id, &service_dto.CreateService{
Name: "REST Demo Service",
Prefix: "/rest-demo",
Description: "Auto created By APIPark",
@@ -277,6 +278,26 @@ func (i *imlInitController) OnInit() {
if err != nil {
return fmt.Errorf("create default service error: %v", err)
}
path := fmt.Sprintf("/%s/", strings.Trim(restPath, "/"))
_, err = i.routerModule.Create(ctx, serviceInfo.Id, &router_dto.Create{
Id: uuid.NewString(),
Name: "",
Path: path + "*",
Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodPatch, http.MethodOptions},
Description: "auto create by create service",
Protocols: []string{"http", "https"},
MatchRules: nil,
Upstream: "",
Proxy: &router_dto.InputProxy{
Path: path,
Timeout: 30000,
Retry: 0,
},
Disable: false,
})
if err != nil {
return fmt.Errorf("create default router error: %v", err)
}
// 创建AI服务
err = i.createAIService(ctx, info.Id, &service_dto.CreateService{
Name: "AI Demo Service",
@@ -295,7 +295,7 @@ export interface IconParkIconElement extends HTMLElement {
| 'apispace'
| 'auto-generate-api'
| 'compare-api'
| 'multi-protocal'
| 'multi-protocol'
| 'read-good'
| 'richdoc'
| 'mockapi'
@@ -106,9 +106,9 @@ const AiSettingList = ()=>{
</a>
<div>
<CancelBtn/>
<WithPermission access="system.devops.ai_provider.edit" showDisabled={false}>
<OkBtn/>
</WithPermission>
{
checkAccess('system.devops.ai_provider.edit', accessData) ? <OkBtn/> : null
}
</div>
</div>
);
+1 -1
View File
@@ -34,7 +34,7 @@ func newAIUpstream(provider string, uri model_runtime.IProviderURI) *gateway.Dyn
"driver": "http",
"balance": "round-robin",
"nodes": []string{fmt.Sprintf("%s weight=100", uri.Host())},
"pass_node": "node",
"pass_host": "node",
"scheme": uri.Scheme(),
"timeout": 300000,
},
+5 -1
View File
@@ -3,6 +3,7 @@ package api_doc
import (
"context"
"errors"
api_doc_dto "github.com/APIParkLab/APIPark/module/api-doc/dto"
api_doc "github.com/APIParkLab/APIPark/service/api-doc"
"github.com/APIParkLab/APIPark/service/service"
@@ -20,16 +21,19 @@ type imlAPIDocModule struct {
}
func (i *imlAPIDocModule) UpdateDoc(ctx context.Context, serviceId string, input *api_doc_dto.UpdateDoc) (*api_doc_dto.ApiDocDetail, error) {
_, err := i.serviceService.Get(ctx, serviceId)
info, err := i.serviceService.Get(ctx, serviceId)
if err != nil {
return nil, err
}
if input.Id == "" {
input.Id = uuid.New().String()
}
// 每个API加上前缀
err = i.apiDocService.UpdateDoc(ctx, serviceId, &api_doc.UpdateDoc{
ID: input.Id,
Content: input.Content,
Prefix: info.Prefix,
})
if err != nil {
return nil, err
@@ -3,9 +3,9 @@ package aksk
import (
"encoding/json"
"fmt"
auth_driver "github.com/APIParkLab/APIPark/module/application-authorization/auth-driver"
application_authorization_dto "github.com/APIParkLab/APIPark/module/application-authorization/dto"
)
@@ -26,8 +26,7 @@ type Config struct {
}
func (a *Config) ID() string {
//TODO implement me
panic("implement me")
return a.Ak
}
func (a *Config) Valid() ([]byte, error) {
+1 -23
View File
@@ -165,29 +165,7 @@ func (i *imlLogModule) Get(ctx context.Context, driver string) (*log_dto.LogSour
}
func (i *imlLogModule) OnComplete() {
drivers := log_driver.Drivers()
if len(drivers) < 1 {
return
}
ctx := context.Background()
for _, driver := range drivers {
factory, has := log_driver.GetFactory(driver)
if !has {
log_print.Errorf("driver %s not found", driver)
continue
}
info, err := i.service.GetLogSource(ctx, driver)
if err != nil {
log_print.Errorf("get log source %s error: %s", driver, err)
continue
}
d, _, err := factory.Create(info.Config)
if err != nil {
log_print.Errorf("create driver %s error: %s,config: %s", driver, err, info.Config)
continue
}
log_driver.SetDriver(driver, d)
}
}
func (i *imlLogModule) initGateway(ctx context.Context, clusterId string, clientDriver gateway.IClientDriver) error {
+12 -1
View File
@@ -76,6 +76,17 @@ func (i *imlAPIDocService) UpdateDoc(ctx context.Context, serviceId string, inpu
if err := doc.Valid(); err != nil {
return err
}
if input.Prefix != "" {
err = doc.AddPrefixInAll(input.Prefix)
if err != nil {
return err
}
}
data, err := doc.Marshal()
if err != nil {
return err
}
input.Content = string(data)
info, err := i.store.First(ctx, map[string]interface{}{
"service": serviceId,
@@ -94,9 +105,9 @@ func (i *imlAPIDocService) UpdateDoc(ctx context.Context, serviceId string, inpu
APICount: doc.APICount(),
})
}
info.Content = input.Content
info.Updater = operator
info.UpdateAt = time.Now()
info.Content = input.Content
info.APICount = doc.APICount()
return i.store.Save(ctx, info)
}
+1
View File
@@ -5,6 +5,7 @@ import "time"
type UpdateDoc struct {
ID string
Content string
Prefix string
}
type Doc struct {
+32 -10
View File
@@ -3,10 +3,14 @@ package api_doc
import (
"context"
"fmt"
"reflect"
"strings"
yaml "gopkg.in/yaml.v3"
"github.com/APIParkLab/APIPark/service/universally/commit"
"github.com/eolinker/go-common/autowire"
"github.com/getkin/kin-openapi/openapi3"
"reflect"
)
type IAPIDocService interface {
@@ -65,15 +69,6 @@ func (d *DocLoader) Valid() error {
if d.openAPI3Doc.Paths == nil {
return fmt.Errorf("openAPI3Doc.Paths is nil")
}
//err := d.openAPI3Doc.Validate(openapi3Loader.Context)
//if err != nil {
// openAPI2Doc, err := openapi2conv.FromV3(d.openAPI3Doc)
// if err != nil {
// return err
// }
// validate.
//
//}
return nil
}
@@ -110,3 +105,30 @@ func (d *DocLoader) APICount() int64 {
}
return count
}
func (d *DocLoader) AddPrefixInAll(prefix string) error {
prefix = strings.TrimSpace(prefix)
if prefix == "" || d.openAPI3Doc == nil || d.openAPI3Doc.Paths == nil {
return nil
}
prefix = fmt.Sprintf("/%s/", strings.Trim(prefix, "/"))
for path, item := range d.openAPI3Doc.Paths.Map() {
path = strings.TrimSpace(path)
if strings.HasPrefix(path, prefix) {
continue
}
newPath := fmt.Sprintf("%s%s", prefix, strings.TrimPrefix(path, "/"))
d.openAPI3Doc.Paths.Delete(path)
d.openAPI3Doc.Paths.Set(newPath, item)
}
return nil
}
func (d *DocLoader) Marshal() ([]byte, error) {
result, err := d.openAPI3Doc.MarshalYAML()
if err != nil {
return nil, err
}
return yaml.Marshal(result)
}
+3
View File
@@ -162,6 +162,9 @@ func (i *imlAPIService) Save(ctx context.Context, id string, model *Edit) error
if model.Disable != nil {
ev.Disable = *model.Disable
}
if model.Upstream != nil {
ev.Upstream = *model.Upstream
}
e := i.apiInfoStore.Save(ctx, ev)
if e != nil {
+25 -1
View File
@@ -5,6 +5,8 @@ import (
"errors"
"time"
log_print "github.com/eolinker/eosc/log"
"github.com/google/uuid"
log_driver "github.com/APIParkLab/APIPark/log-driver"
@@ -25,7 +27,29 @@ type imlLogService struct {
}
func (i *imlLogService) OnComplete() {
drivers := log_driver.Drivers()
if len(drivers) < 1 {
return
}
ctx := context.Background()
for _, driver := range drivers {
factory, has := log_driver.GetFactory(driver)
if !has {
log_print.Errorf("driver %s not found", driver)
continue
}
info, err := i.GetLogSource(ctx, driver)
if err != nil {
log_print.Errorf("get log source %s error: %s", driver, err)
continue
}
d, _, err := factory.Create(info.Config)
if err != nil {
log_print.Errorf("create driver %s error: %s,config: %s", driver, err, info.Config)
continue
}
log_driver.SetDriver(driver, d)
}
}
func (i *imlLogService) UpdateLogSource(ctx context.Context, driver string, input *Save) error {