Skip to content

Commit

Permalink
Merge pull request #82 from samson-samson/v0.5.2
Browse files Browse the repository at this point in the history
V0.5.2
  • Loading branch information
samson-samson committed Sep 27, 2023
2 parents 0d7502c + 1cb6223 commit 08a7b9b
Show file tree
Hide file tree
Showing 27 changed files with 536 additions and 624 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ ChaosMeta is a platform dedicated to supporting all stages of fault drills, cove
# core advantages
#### Simple and easy to use, provides user interface, low threshold for use
Support visual user interface, Kubernetes API, command line, HTTP API, and other methods.
![](docs/static/workflow.png)
[![docs/static/componentlink.png
](docs/static/workflow.png)](https://player.bilibili.com/player.html?aid=276433781&bvid=BV1yF411m7b4&cid=1280401525&p=1)

#### Fully verified by a large amount of practical experience, high reliability

Expand Down
4 changes: 3 additions & 1 deletion README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ ChaosMeta 是一个致力于支撑故障演练各个阶段的平台,覆盖了
# 核心优势
#### 简单易用,提供用户界面,使用门槛低
支持可视化用户界面、Kubernetes API、命令行、HTTP等多种使用方式
![](docs/static/workflow.png)

[![docs/static/componentlink.png
](docs/static/workflow.png)](https://player.bilibili.com/player.html?aid=276433781&bvid=BV1yF411m7b4&cid=1280401525&p=1)

#### 大量实践经验充分验证,功能可靠性高

Expand Down
4 changes: 2 additions & 2 deletions chaosmeta-deploy/templates/chaosmeta-platform-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ spec:
serviceAccountName: chaosmeta-platform
containers:
- name: chaosmeta-platform
image: registry.cn-hangzhou.aliyuncs.com/chaosmeta/chaosmeta-platform:v0.0.6
image: registry.cn-hangzhou.aliyuncs.com/chaosmeta/chaosmeta-platform:v0.0.7
resources:
requests:
cpu: "1"
Expand All @@ -101,7 +101,7 @@ spec:
- name: chaosmeta-config
mountPath: /home/admin/conf
- name: chaosmeta-platform-frontend
image: registry.cn-hangzhou.aliyuncs.com/chaosmeta/chaosmeta-platform-frontend:v0.0.3
image: registry.cn-hangzhou.aliyuncs.com/chaosmeta/chaosmeta-platform-frontend:v0.0.4
ports:
- containerPort: 8000
volumes:
Expand Down
4 changes: 2 additions & 2 deletions chaosmeta-platform-frontend/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ export default defineConfig({
},
proxy: {
'/users': {
target: 'http://127.0.0.1/',
target: 'http://127.0.0.1:8082/',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
'/chaosmeta': {
target: 'http://127.0.0.1/',
target: 'http://127.0.0.1:8082/',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ func (c *ClusterController) Create() {
c.Error(&c.Controller, err)
return
}
username := c.Ctx.Input.GetData("userName").(string)
log.Error(username, "create:", requestBody.Name)

clusterService := &cluster.ClusterService{}
clusterId, err := clusterService.Create(context.Background(), requestBody.Name, requestBody.Kubeconfig)
if err != nil {
Expand All @@ -47,6 +46,7 @@ func (c *ClusterController) Create() {
c.Success(&c.Controller, CreateClusterResponse{
ID: clusterId,
})
log.Info(c.Ctx.Input.GetData("userName").(string), "create:", requestBody.Name)
}

func (c *ClusterController) Get() {
Expand Down Expand Up @@ -121,12 +121,12 @@ func (c *ClusterController) Delete() {
c.Error(&c.Controller, err)
return
}
username := c.Ctx.Input.GetData("userName").(string)
log.Error(username, "delete:", clusterId)

clusterService := &cluster.ClusterService{}
if err := clusterService.Delete(context.Background(), clusterId); err != nil {
c.Error(&c.Controller, err)
return
}
c.Success(&c.Controller, "ok")
log.Info(c.Ctx.Input.GetData("userName").(string), "delete:", clusterId)
}
35 changes: 35 additions & 0 deletions chaosmeta-platform/pkg/models/experiment/workflow_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package experiment

import (
models "chaosmeta-platform/pkg/models/common"
"errors"
"github.com/beego/beego/v2/client/orm"
)

Expand All @@ -33,6 +34,7 @@ type WorkflowNode struct {
TargetId int `json:"target_id" orm:"column(target_id); int(11)"`
ExecType string `json:"exec_type" orm:"column(exec_type);size(32)"`
ExecID int `json:"exec_id" orm:"column(exec_id); int(11)"`
Version int `json:"-" orm:"column(version);default(0);version"`
models.BaseTimeModel
}

Expand Down Expand Up @@ -73,6 +75,39 @@ func CreateWorkflowNode(workflowNode *WorkflowNode) error {
return err
}

func UpdateWorkflowNode(workflowNode *WorkflowNode) error {
o := models.GetORM()
tx, err := o.Begin()
if err != nil {
return err
}

existing := WorkflowNode{UUID: workflowNode.UUID}
err = tx.Read(&existing)
if err != nil {
tx.Rollback()
return err
}

if workflowNode.Version != existing.Version {
tx.Rollback()
return errors.New("Concurrent modification detected")
}

workflowNode.Version = existing.Version + 1
if _, err = tx.Update(workflowNode); err != nil {
tx.Rollback()
return err
}

if err = tx.Commit(); err != nil {
tx.Rollback()
return err
}

return nil
}

func DeleteWorkflowNodeByUUID(uuid string) error {
_, err := models.GetORM().QueryTable(new(WorkflowNode).TableName()).Filter("uuid", uuid).Delete()
return err
Expand Down
7 changes: 7 additions & 0 deletions chaosmeta-platform/pkg/models/namespace/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ func DeleteNamespace(ctx context.Context, id int) (int64, error) {
return num, err
}

func GetNamespaceByName(ctx context.Context, namespace *Namespace) error {
if namespace == nil {
return errors.New("namespace is nil")
}
return models.GetORM().Read(namespace, "name")
}

func GetNamespaceById(ctx context.Context, namespace *Namespace) error {
if namespace == nil {
return errors.New("namespace is nil")
Expand Down
6 changes: 6 additions & 0 deletions chaosmeta-platform/pkg/service/cluster/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ func (c *ClusterService) GetList(ctx context.Context, name, orderBy string, page
}

func (c *ClusterService) GetRestConfig(ctx context.Context, id int) (*kubernetes.Clientset, *rest.Config, error) {
if config.DefaultRunOptIns.RunMode == "KubeConfig" {
id = -1
}
if config.DefaultRunOptIns.RunMode == "ServiceAccount" {
id = 0
}
if id == 0 {
return c.getRestConfigInCluster()
}
Expand Down
4 changes: 2 additions & 2 deletions chaosmeta-platform/pkg/service/experiment/argo_workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func (a *argoWorkFlowService) Create(wf v1alpha1.Workflow) (*v1alpha1.Workflow,
if err != nil {
return nil, err
}
log.Errorf("Workflow %s created", createdWorkflow.Name)
log.Infof("Workflow %s created", createdWorkflow.Name)
return createdWorkflow, nil
}

Expand All @@ -86,7 +86,7 @@ func (a *argoWorkFlowService) Update(wf v1alpha1.Workflow) (*v1alpha1.Workflow,
if err != nil {
return nil, err
}
log.Errorf("Workflow %s updated", updatedWorkflow.Name)
log.Infof("Workflow %s updated", updatedWorkflow.Name)
return updatedWorkflow, nil
}

Expand Down
4 changes: 2 additions & 2 deletions chaosmeta-platform/pkg/service/experiment/chaosmeta_inject.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,10 +208,10 @@ func (c *ChaosmetaService) DeleteExpiredList(ctx context.Context) error {
if experiment.Status.Status == SuccessStatusType && experiment.Status.CreateTime != "" && experimentCreateTime.Before(expirationTime) {
err := c.Delete(ctx, experiment.Name)
if err != nil {
log.Errorf("failed to delete chaosmeta experiment %s: %v", experiment.Name, err.Error())
log.Infof("failed to delete chaosmeta experiment %s: %v", experiment.Name, err.Error())
return err
} else {
log.Errorf("chaosmeta experiment %s deleted", experiment.Name)
log.Infof("chaosmeta experiment %s deleted", experiment.Name)
}
}
}
Expand Down
95 changes: 86 additions & 9 deletions chaosmeta-platform/pkg/service/experiment/experiment.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ type ExperimentInfo struct {
Status int `json:"status"`
CreateTime time.Time `json:"create_time,omitempty"`
UpdateTime time.Time `json:"update_time,omitempty"`
LastInstance string `json:"last_instance,omitempty"`
}

type LabelGet struct {
Expand All @@ -73,7 +74,7 @@ type ExperimentGet struct {
ScheduleRule string `json:"schedule_rule"`
NamespaceID int `json:"namespace_id"`
Creator int `json:"creator,omitempty"`
NextExec time.Time `json:"next_exec,omitempty"`
NextExec string `json:"next_exec,omitempty"`
CreatorName string `json:"creator_name,omitempty"`
Status int `json:"status"`
LastInstance string `json:"last_instance"`
Expand Down Expand Up @@ -178,15 +179,89 @@ func (es *ExperimentService) UpdateExperiment(uuid string, experimentParam *Expe
if experimentParam == nil {
return errors.New("experimentParam is nil")
}
_, err := experiment.GetExperimentByUUID(uuid)
getExperiment, err := experiment.GetExperimentByUUID(uuid)
if err != nil {
return err
return fmt.Errorf("no this experiment")
}
if err := es.DeleteExperimentByUUID(uuid); err != nil {
return err

experimentUUid := getExperiment.UUID
log.Error(1)
//label
if len(experimentParam.Labels) > 0 {
if err := experiment.ClearLabelIDsByExperimentUUID(uuid); err != nil {
log.Error(err)
return err
}
if err := experiment.AddLabelIDsToExperiment(uuid, experimentParam.Labels); err != nil {
log.Error(err)
return err
}
}
_, err = es.CreateExperiment(experimentParam)
return err

//workflow_nodes
for _, node := range experimentParam.WorkflowNodes {
node.ExperimentUUID = experimentUUid
workflowNodeCreate := experiment.WorkflowNode{
UUID: node.UUID,
Name: node.Name,
ExperimentUUID: experimentUUid,
Row: node.Row,
Column: node.Column,
Duration: node.Duration,
ScopeId: node.ScopeId,
TargetId: node.TargetId,
ExecType: node.ExecType,
ExecID: node.ExecID,
}

if err := experiment.DeleteWorkflowNodeByUUID(node.UUID); err != nil {
log.Error(err)
return err
}
if err := experiment.CreateWorkflowNode(&workflowNodeCreate); err != nil {
log.Error(err)
return err
}
//args_value
if len(node.ArgsValue) > 0 {
if err := experiment.ClearArgsValuesByWorkflowNodeUUID(node.UUID); err != nil {
log.Error(err)
return err
}
if err := experiment.BatchInsertArgsValues(node.UUID, node.ArgsValue); err != nil {
log.Error(err)
return err
}
}

//exec_range
if node.FaultRange != nil {
node.FaultRange.WorkflowNodeInstanceUUID = node.UUID
if err := experiment.ClearFaultRangesByWorkflowNodeInstanceUUID(node.UUID); err != nil {
log.Error(err)
return err
}
if err := experiment.CreateFaultRange(node.FaultRange); err != nil {
return err
}
}
}

if getExperiment.ScheduleType != experimentParam.ScheduleType {
getExperiment.Status = experiment.ToBeExecuted
}
getExperiment.Name = experimentParam.Name
getExperiment.Description = experimentParam.Description
getExperiment.ScheduleType = experimentParam.ScheduleType
getExperiment.ScheduleRule = experimentParam.ScheduleRule

return experiment.UpdateExperiment(getExperiment)
//experimentParam.Creator = getExperiment.Creator
//if err := es.DeleteExperimentByUUID(uuid); err != nil {
// return err
//}
//_, err = es.CreateExperiment(experimentParam)
//return err
}

func (es *ExperimentService) UpdateExperimentStatusAndLastInstance(uuid string, status int, lastInstance string) error {
Expand Down Expand Up @@ -249,21 +324,23 @@ func (es *ExperimentService) GetExperimentByUUID(uuid string) (*ExperimentGet, e
NamespaceID: experimentGet.NamespaceID,
CreatorName: userGet.Email,
Creator: experimentGet.Creator,
NextExec: experimentGet.NextExec,
Status: int(experimentGet.Status),
LastInstance: experimentGet.LastInstance,
CreateTime: experimentGet.CreateTime,
UpdateTime: experimentGet.UpdateTime,
}

if !experimentGet.NextExec.IsZero() {
experimentReturn.NextExec = experimentGet.NextExec.Format(TimeLayout)
}

experimentCount, _ := experiment_instance.CountExperimentInstances(0, experimentGet.UUID, "", 0)
experimentReturn.Number = experimentCount
if err := es.GetLabelByExperiment(uuid, &experimentReturn); err != nil {
return &experimentReturn, nil
}

return &experimentReturn, es.GetWorkflowNodesByExperiment(uuid, &experimentReturn)

//CountExperimentInstances()
}

Expand Down
Loading

0 comments on commit 08a7b9b

Please sign in to comment.