mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-25 00:58:07 +00:00
feat: working targets and check integration
This commit is contained in:
parent
c2eabedb91
commit
b8c37cfd3c
7 changed files with 63 additions and 27 deletions
|
@ -4,10 +4,10 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/dop251/goja"
|
"github.com/dop251/goja"
|
||||||
"github.com/mentos1386/zdravko/database/models"
|
|
||||||
"github.com/mentos1386/zdravko/internal/server/services"
|
"github.com/mentos1386/zdravko/internal/server/services"
|
||||||
"github.com/mentos1386/zdravko/internal/temporal"
|
"github.com/mentos1386/zdravko/internal/temporal"
|
||||||
"github.com/mentos1386/zdravko/pkg/script"
|
"github.com/mentos1386/zdravko/pkg/script"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Activities) TargetsFilter(ctx context.Context, param temporal.ActivityTargetsFilterParam) (*temporal.ActivityTargetsFilterResult, error) {
|
func (a *Activities) TargetsFilter(ctx context.Context, param temporal.ActivityTargetsFilterParam) (*temporal.ActivityTargetsFilterResult, error) {
|
||||||
|
@ -17,22 +17,50 @@ func (a *Activities) TargetsFilter(ctx context.Context, param temporal.ActivityT
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
filteredTargets := make([]*models.Target, 0)
|
filteredTargets := make([]*temporal.Target, 0)
|
||||||
|
|
||||||
|
program, err := goja.Compile("filter", script.UnescapeString(param.Filter), false)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
for _, target := range allTargets {
|
for _, target := range allTargets {
|
||||||
vm := goja.New()
|
vm := goja.New()
|
||||||
|
vm.SetFieldNameMapper(goja.UncapFieldNameMapper())
|
||||||
|
|
||||||
err = vm.Set("target", target)
|
var metadata map[string]interface{}
|
||||||
|
err := yaml.Unmarshal([]byte(target.Metadata), &metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
value, err := vm.RunString(script.UnescapeString(param.Filter))
|
a.logger.Info("TargetsFilter", "target", target)
|
||||||
|
|
||||||
|
targetWithMedatada := &struct {
|
||||||
|
Name string
|
||||||
|
Group string
|
||||||
|
Metadata map[string]interface{}
|
||||||
|
}{
|
||||||
|
Name: target.Name,
|
||||||
|
Group: target.Group,
|
||||||
|
Metadata: metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = vm.Set("target", targetWithMedatada)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := vm.RunProgram(program)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if value.Export().(bool) {
|
if value.Export().(bool) {
|
||||||
filteredTargets = append(filteredTargets, target)
|
filteredTargets = append(filteredTargets, &temporal.Target{
|
||||||
|
Name: target.Name,
|
||||||
|
Group: target.Group,
|
||||||
|
Metadata: target.Metadata,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package temporal
|
package temporal
|
||||||
|
|
||||||
import "github.com/mentos1386/zdravko/database/models"
|
|
||||||
|
|
||||||
type ActivityCheckParam struct {
|
type ActivityCheckParam struct {
|
||||||
Script string
|
Script string
|
||||||
Target *models.Target
|
Target *Target
|
||||||
}
|
}
|
||||||
|
|
||||||
type ActivityCheckResult struct {
|
type ActivityCheckResult struct {
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
package temporal
|
package temporal
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/mentos1386/zdravko/database/models"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ActivityTargetsFilterParam struct {
|
type ActivityTargetsFilterParam struct {
|
||||||
Filter string
|
Filter string
|
||||||
}
|
}
|
||||||
|
|
||||||
type ActivityTargetsFilterResult struct {
|
type ActivityTargetsFilterResult struct {
|
||||||
Targets []*models.Target
|
Targets []*Target
|
||||||
}
|
}
|
||||||
|
|
||||||
const ActivityTargetsFilterName = "TARGETS_FILTER"
|
const ActivityTargetsFilterName = "TARGETS_FILTER"
|
||||||
|
|
|
@ -12,6 +12,12 @@ import (
|
||||||
"go.temporal.io/sdk/client"
|
"go.temporal.io/sdk/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Target struct {
|
||||||
|
Name string
|
||||||
|
Group string
|
||||||
|
Metadata string
|
||||||
|
}
|
||||||
|
|
||||||
// Must be default, as we are also processing
|
// Must be default, as we are also processing
|
||||||
// some temporal things.
|
// some temporal things.
|
||||||
const TEMPORAL_SERVER_QUEUE = "default"
|
const TEMPORAL_SERVER_QUEUE = "default"
|
||||||
|
|
|
@ -8,16 +8,23 @@ import (
|
||||||
"github.com/mentos1386/zdravko/pkg/k6"
|
"github.com/mentos1386/zdravko/pkg/k6"
|
||||||
"github.com/mentos1386/zdravko/pkg/k6/zdravko"
|
"github.com/mentos1386/zdravko/pkg/k6/zdravko"
|
||||||
"github.com/mentos1386/zdravko/pkg/script"
|
"github.com/mentos1386/zdravko/pkg/script"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Activities) Check(ctx context.Context, param temporal.ActivityCheckParam) (*temporal.ActivityCheckResult, error) {
|
func (a *Activities) Check(ctx context.Context, param temporal.ActivityCheckParam) (*temporal.ActivityCheckResult, error) {
|
||||||
execution := k6.NewExecution(slog.Default(), script.UnescapeString(param.Script))
|
execution := k6.NewExecution(slog.Default(), script.UnescapeString(param.Script))
|
||||||
|
|
||||||
|
var metadata map[string]interface{}
|
||||||
|
err := yaml.Unmarshal([]byte(param.Target.Metadata), &metadata)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
ctx = zdravko.WithZdravkoContext(ctx, zdravko.Context{
|
ctx = zdravko.WithZdravkoContext(ctx, zdravko.Context{
|
||||||
Target: zdravko.Target{
|
Target: zdravko.Target{
|
||||||
Name: param.Target.Name,
|
Name: param.Target.Name,
|
||||||
Group: param.Target.Group,
|
Group: param.Target.Group,
|
||||||
//Metadata: param.Target.Metadata,
|
Metadata: metadata,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,6 @@ import "context"
|
||||||
|
|
||||||
type zdravkoContextKey string
|
type zdravkoContextKey string
|
||||||
|
|
||||||
type Target struct {
|
|
||||||
Name string
|
|
||||||
Group string
|
|
||||||
Metadata map[string]interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Context struct {
|
type Context struct {
|
||||||
Target Target
|
Target Target
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package zdravko
|
package zdravko
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/dop251/goja"
|
||||||
"go.k6.io/k6/js/modules"
|
"go.k6.io/k6/js/modules"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -41,14 +42,20 @@ func (*RootModule) NewModuleInstance(vu modules.VU) modules.Instance {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Zdravko struct {
|
type Target struct {
|
||||||
vu modules.VU
|
Name string
|
||||||
Targets []string
|
Group string
|
||||||
|
Metadata map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z *Zdravko) GetTarget() Target {
|
type Zdravko struct {
|
||||||
|
vu modules.VU
|
||||||
|
Targets []Target
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *Zdravko) GetTarget() goja.Value {
|
||||||
zdravkoContext := GetZdravkoContext(z.vu.Context())
|
zdravkoContext := GetZdravkoContext(z.vu.Context())
|
||||||
return zdravkoContext.Target
|
return z.vu.Runtime().ToValue(zdravkoContext.Target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exports implements the modules.Instance interface and returns the exported types for the JS module.
|
// Exports implements the modules.Instance interface and returns the exported types for the JS module.
|
||||||
|
|
Loading…
Reference in a new issue