Feat: add log provider (#3711)

* Feat: add log provider

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix lift

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix vet

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix rebase vet

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>
This commit is contained in:
Tianxin Dong
2022-04-22 13:14:51 +08:00
committed by GitHub
parent 007f13d2ee
commit 426b22d2e5
7 changed files with 68 additions and 21 deletions
@@ -33,6 +33,7 @@ import (
"github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2/application/assemble"
"github.com/oam-dev/kubevela/pkg/cue/model/value"
"github.com/oam-dev/kubevela/pkg/cue/process"
monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context"
"github.com/oam-dev/kubevela/pkg/monitor/metrics"
"github.com/oam-dev/kubevela/pkg/multicluster"
"github.com/oam-dev/kubevela/pkg/oam"
@@ -56,7 +57,7 @@ var (
// GenerateApplicationSteps generate application steps.
// nolint:gocyclo
func (h *AppHandler) GenerateApplicationSteps(ctx context.Context,
func (h *AppHandler) GenerateApplicationSteps(ctx monitorContext.Context,
app *v1beta1.Application,
appParser *appfile.Parser,
af *appfile.Appfile,
@@ -68,7 +69,7 @@ func (h *AppHandler) GenerateApplicationSteps(ctx context.Context,
appParser, appRev, af), h.renderComponentFunc(appParser, appRev, af))
http.Install(handlerProviders, h.r.Client, app.Namespace)
pCtx := process.NewContext(generateContextDataFromApp(app, appRev.Name))
taskDiscover := tasks.NewTaskDiscoverFromRevision(handlerProviders, h.r.pd, appRev, h.r.dm, pCtx)
taskDiscover := tasks.NewTaskDiscoverFromRevision(ctx, handlerProviders, h.r.pd, appRev, h.r.dm, pCtx)
multiclusterProvider.Install(handlerProviders, h.r.Client, app)
terraformProvider.Install(handlerProviders, app, func(comp common.ApplicationComponent) (*appfile.Workload, error) {
return appParser.ParseWorkloadFromRevision(comp, appRev)
@@ -30,6 +30,7 @@ import (
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
oamcore "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context"
"github.com/oam-dev/kubevela/pkg/oam/util"
)
@@ -114,7 +115,8 @@ var _ = Describe("Test Application workflow generator", func() {
handler, err := NewAppHandler(ctx, reconciler, app, appParser)
Expect(err).Should(Succeed())
taskRunner, err := handler.GenerateApplicationSteps(ctx, app, appParser, af, appRev)
logCtx := monitorContext.NewTraceContext(ctx, "")
taskRunner, err := handler.GenerateApplicationSteps(logCtx, app, appParser, af, appRev)
Expect(err).To(BeNil())
Expect(len(taskRunner)).Should(BeEquivalentTo(2))
Expect(taskRunner[0].Name()).Should(BeEquivalentTo("myweb1"))
@@ -155,7 +157,8 @@ var _ = Describe("Test Application workflow generator", func() {
handler, err := NewAppHandler(ctx, reconciler, app, appParser)
Expect(err).Should(Succeed())
taskRunner, err := handler.GenerateApplicationSteps(ctx, app, appParser, af, appRev)
logCtx := monitorContext.NewTraceContext(ctx, "")
taskRunner, err := handler.GenerateApplicationSteps(logCtx, app, appParser, af, appRev)
Expect(err).To(BeNil())
Expect(len(taskRunner)).Should(BeEquivalentTo(2))
Expect(taskRunner[0].Name()).Should(BeEquivalentTo("myweb1"))
@@ -274,7 +277,8 @@ var _ = Describe("Test Application workflow generator", func() {
handler, err := NewAppHandler(ctx, reconciler, app, appParser)
Expect(err).Should(Succeed())
taskRunner, err := handler.GenerateApplicationSteps(ctx, app, appParser, af, appRev)
logCtx := monitorContext.NewTraceContext(ctx, "")
taskRunner, err := handler.GenerateApplicationSteps(logCtx, app, appParser, af, appRev)
Expect(err).To(BeNil())
Expect(len(taskRunner)).Should(BeEquivalentTo(2))
Expect(taskRunner[0].Name()).Should(BeEquivalentTo("myweb1"))
@@ -314,7 +318,8 @@ var _ = Describe("Test Application workflow generator", func() {
handler, err := NewAppHandler(ctx, reconciler, app, appParser)
Expect(err).Should(Succeed())
_, err = handler.GenerateApplicationSteps(ctx, app, appParser, af, appRev)
logCtx := monitorContext.NewTraceContext(ctx, "")
_, err = handler.GenerateApplicationSteps(logCtx, app, appParser, af, appRev)
Expect(err).NotTo(BeNil())
})
@@ -351,7 +356,8 @@ var _ = Describe("Test Application workflow generator", func() {
handler, err := NewAppHandler(ctx, reconciler, app, appParser)
Expect(err).Should(Succeed())
_, err = handler.GenerateApplicationSteps(ctx, app, appParser, af, appRev)
logCtx := monitorContext.NewTraceContext(ctx, "")
_, err = handler.GenerateApplicationSteps(logCtx, app, appParser, af, appRev)
Expect(err).NotTo(BeNil())
})
})
+2
View File
@@ -166,6 +166,8 @@ import (
#ConvertString: util.#String
#Log: util.#Log
#DateToTimestamp: time.#DateToTimestamp
#TimestampToDate: time.#TimestampToDate
+7
View File
@@ -15,3 +15,10 @@
str?: string
...
}
#Log: {
#do: "log"
#provider: "util"
data: {...}
}
+24 -3
View File
@@ -19,6 +19,7 @@ package util
import (
"github.com/oam-dev/kubevela/pkg/cue/model"
"github.com/oam-dev/kubevela/pkg/cue/model/value"
monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context"
wfContext "github.com/oam-dev/kubevela/pkg/workflow/context"
"github.com/oam-dev/kubevela/pkg/workflow/providers"
"github.com/oam-dev/kubevela/pkg/workflow/types"
@@ -29,7 +30,9 @@ const (
ProviderName = "util"
)
type provider struct{}
type provider struct {
logCtx monitorContext.Context
}
func (p *provider) PatchK8sObject(ctx wfContext.Context, v *value.Value, act types.Action) error {
val, err := v.LookupValue("value")
@@ -72,11 +75,29 @@ func (p *provider) String(ctx wfContext.Context, v *value.Value, act types.Actio
return v.FillObject(string(s), "str")
}
// Log print cue value in log
func (p *provider) Log(ctx wfContext.Context, v *value.Value, act types.Action) error {
data, err := v.LookupValue("data")
if err != nil {
return err
}
s, err := data.String()
if err != nil {
return err
}
logCtx := p.logCtx.Fork("cue logs")
logCtx.Info(s)
return nil
}
// Install register handlers to provider discover.
func Install(p providers.Providers) {
prd := &provider{}
func Install(ctx monitorContext.Context, p providers.Providers) {
prd := &provider{
logCtx: ctx,
}
p.Register(ProviderName, map[string]providers.Handler{
"patch-k8s-object": prd.PatchK8sObject,
"string": prd.String,
"log": prd.Log,
})
}
+16 -1
View File
@@ -17,6 +17,7 @@
package util
import (
"context"
"errors"
"testing"
@@ -24,6 +25,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/oam-dev/kubevela/pkg/cue/model/value"
monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context"
"github.com/oam-dev/kubevela/pkg/workflow/providers"
)
@@ -192,9 +194,22 @@ func TestConvertString(t *testing.T) {
}
}
func TestLog(t *testing.T) {
r := require.New(t)
v, err := value.NewValue(`
data: "test"
`, nil, "")
r.NoError(err)
logCtx := monitorContext.NewTraceContext(context.Background(), "")
prd := &provider{logCtx: logCtx}
err = prd.Log(nil, v, nil)
r.NoError(err)
}
func TestInstall(t *testing.T) {
logCtx := monitorContext.NewTraceContext(context.Background(), "")
p := providers.NewProviders()
Install(p)
Install(logCtx, p)
h, ok := p.GetHandler("util", "string")
r := require.New(t)
r.Equal(ok, true)
+5 -10
View File
@@ -29,6 +29,7 @@ import (
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/pkg/cue/packages"
"github.com/oam-dev/kubevela/pkg/cue/process"
monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context"
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
"github.com/oam-dev/kubevela/pkg/velaql/providers/query"
wfContext "github.com/oam-dev/kubevela/pkg/workflow/context"
@@ -86,11 +87,11 @@ func suspend(step v1beta1.WorkflowStep, opt *types.GeneratorOptions) (types.Task
return tr, nil
}
func newTaskDiscover(providerHandlers providers.Providers, pd *packages.PackageDiscover, pCtx process.Context, templateLoader template.Loader) types.TaskDiscover {
func newTaskDiscover(ctx monitorContext.Context, providerHandlers providers.Providers, pd *packages.PackageDiscover, pCtx process.Context, templateLoader template.Loader) types.TaskDiscover {
// install builtin provider
workspace.Install(providerHandlers)
email.Install(providerHandlers)
util.Install(providerHandlers)
util.Install(ctx, providerHandlers)
return &taskDiscover{
builtins: map[string]types.TaskGenerator{
@@ -101,16 +102,10 @@ func newTaskDiscover(providerHandlers providers.Providers, pd *packages.PackageD
}
}
// NewTaskDiscover will create a client for load task generator.
func NewTaskDiscover(providerHandlers providers.Providers, pd *packages.PackageDiscover, cli client.Client, dm discoverymapper.DiscoveryMapper, pCtx process.Context) types.TaskDiscover {
templateLoader := template.NewWorkflowStepTemplateLoader(cli, dm)
return newTaskDiscover(providerHandlers, pd, pCtx, templateLoader)
}
// NewTaskDiscoverFromRevision will create a client for load task generator from ApplicationRevision.
func NewTaskDiscoverFromRevision(providerHandlers providers.Providers, pd *packages.PackageDiscover, rev *v1beta1.ApplicationRevision, dm discoverymapper.DiscoveryMapper, pCtx process.Context) types.TaskDiscover {
func NewTaskDiscoverFromRevision(ctx monitorContext.Context, providerHandlers providers.Providers, pd *packages.PackageDiscover, rev *v1beta1.ApplicationRevision, dm discoverymapper.DiscoveryMapper, pCtx process.Context) types.TaskDiscover {
templateLoader := template.NewWorkflowStepTemplateRevisionLoader(rev, dm)
return newTaskDiscover(providerHandlers, pd, pCtx, templateLoader)
return newTaskDiscover(ctx, providerHandlers, pd, pCtx, templateLoader)
}
type suspendTaskRunner struct {