(api-refactor): Refactored GQL server APIs and updated frontend dir (#3579)
* Updated GQL Schema naming convention and docs (#3434) * schema fix for naming convention and doc Signed-off-by: Soumya Ghosh Dastidar <gdsoumya@gmail.com> * splitted the schema into multiple gql files Signed-off-by: arkajyotiMukherjee <arko@chaosnative.com> * rearranged queries Signed-off-by: arkajyotiMukherjee <arko@chaosnative.com> * added comments Signed-off-by: arkajyotiMukherjee <arko@chaosnative.com> * Updated chaoshub code docs and removed unused models Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * userClusterReg -> registerCluster Signed-off-by: arkajyotiMukherjee <arko@chaosnative.com> * added cluster mutation API changes Signed-off-by: arkajyotiMukherjee <arko@chaosnative.com> * Interfaces + queries updated, pages WIP Signed-off-by: Vansh Bhatia <vansh@chaosnative.com> * frontend queries refactored Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * more mutation changes Signed-off-by: Arkajyoti Mukherjee <arkajyoti31@gmail.com> * more mutation changes Signed-off-by: Arkajyoti Mukherjee <arkajyoti31@gmail.com> * mutations refactored Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Fixed handler name Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * All errors fixed, frontend compiling, LogSwitcher fix WIP Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Log Switcher fixed Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * linter fixes Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Updated ChaosHub mutations Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Changed query names and parameter accordint to convention in backend Signed-off-by: Saranya-jena <saranya.jena@harness.io> * Changed query names and parameters in FE Signed-off-by: Saranya-jena <saranya.jena@harness.io> * chaosHub fixes Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Updated subscriber schema and minor refactoring Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * frontend fixes Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Renamed get to list in queries Signed-off-by: SarthakJain26 <sarthak@chaosnative.com> * Fixed enums issue Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Fixed workflow related schemas in FE and minor change in ENUMs Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Added FE integration for workflow creation Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Updated analytics queries in FE Signed-off-by: Saranya-jena <saranya.jena@harness.io> * Updated chaoshub queries in FE Signed-off-by: Saranya-jena <saranya.jena@harness.io> * Updated workflows, logs and template queries and mutations in FE Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Deepscan fix Signed-off-by: Vansh Bhatia <vansh.bhatia@harness.io> * Fixed analytics, myhub, usage and project related queries Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * fixed workflow stats page Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Updated payload data type in subscriber Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * minor fix Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Fixed analytics and delete workflow issue Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Fixed usage stats schema in frontend and backend Signed-off-by: Saranya-jena <saranya.jena@harness.io> * Added fix username fetching issue in usage table Signed-off-by: Saranya-jena <saranya.jena@harness.io> * Added query for agent details Signed-off-by: Amit Kumar Das <amit@chaosnative.com> * Updated go mod in auth svr Signed-off-by: Amit Kumar Das <amit@chaosnative.com> Co-authored-by: Soumya Ghosh Dastidar <44349253+gdsoumya@users.noreply.github.com> Co-authored-by: arkajyotiMukherjee <arko@chaosnative.com> Co-authored-by: Vansh Bhatia <vansh@chaosnative.com> Co-authored-by: Vansh Bhatia <vansh.bhatia@harness.io> Co-authored-by: Arkajyoti Mukherjee <arkajyoti31@gmail.com> Co-authored-by: Saranya-jena <saranya.jena@harness.io> Co-authored-by: SarthakJain26 <sarthak@chaosnative.com>
This commit is contained in:
parent
4d71cea292
commit
3f8021f09b
|
|
@ -12,7 +12,7 @@ require (
|
|||
github.com/kelseyhightower/envconfig v1.4.0
|
||||
github.com/sirupsen/logrus v1.4.2
|
||||
go.mongodb.org/mongo-driver v1.5.3
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd
|
||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f
|
||||
google.golang.org/grpc v1.32.0
|
||||
google.golang.org/protobuf v1.27.1
|
||||
|
|
|
|||
|
|
@ -254,8 +254,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38=
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
|
@ -313,8 +313,8 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
|
|||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
|
@ -364,16 +364,19 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ type Project struct {
|
|||
}
|
||||
|
||||
type Owner struct {
|
||||
UserId string `bson:"user_id"`
|
||||
UserID string `bson:"user_id"`
|
||||
Username string `bson:"username"`
|
||||
}
|
||||
type MemberStat struct {
|
||||
|
|
@ -22,7 +22,7 @@ type MemberStat struct {
|
|||
|
||||
type ProjectStats struct {
|
||||
Name string `bson:"name"`
|
||||
ProjectId string `bson:"_id"`
|
||||
ProjectID string `bson:"_id"`
|
||||
Members *MemberStat `bson:"memberStat"`
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ func getChaosData(nodeStatus v1alpha13.NodeStatus, engineName, engineNS string,
|
|||
return cd, nil
|
||||
}
|
||||
|
||||
// util function, checks if event is a chaos-exp event, if so - extract the chaos data
|
||||
//CheckChaosData util function, checks if event is a chaos-exp event, if so - extract the chaos data
|
||||
func CheckChaosData(nodeStatus v1alpha13.NodeStatus, workflowNS string, chaosClient *v1alpha12.LitmuschaosV1alpha1Client) (string, *types.ChaosData, error) {
|
||||
nodeType := string(nodeStatus.Type)
|
||||
var cd *types.ChaosData = nil
|
||||
|
|
@ -115,7 +115,7 @@ func getNameFromLog(log string) string {
|
|||
return name[1]
|
||||
}
|
||||
|
||||
// converts unix timestamp to string
|
||||
//StrConvTime converts unix timestamp to string
|
||||
func StrConvTime(time int64) string {
|
||||
if time < 0 {
|
||||
return ""
|
||||
|
|
@ -147,9 +147,9 @@ func GetWorkflowObj(uid string) (*v1alpha1.Workflow, error) {
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
// generate graphql mutation payload for events event
|
||||
//GenerateWorkflowPayload generate graphql mutation payload for events event
|
||||
func GenerateWorkflowPayload(cid, accessKey, version, completed string, wfEvent types.WorkflowEvent) ([]byte, error) {
|
||||
clusterID := `{cluster_id: \"` + cid + `\", version: \"` + version + `\", access_key: \"` + accessKey + `\"}`
|
||||
clusterID := `{clusterID: \"` + cid + `\", version: \"` + version + `\", accessKey: \"` + accessKey + `\"}`
|
||||
|
||||
for id, event := range wfEvent.Nodes {
|
||||
event.Message = strings.Replace(event.Message, `"`, ``, -1)
|
||||
|
|
@ -160,7 +160,7 @@ func GenerateWorkflowPayload(cid, accessKey, version, completed string, wfEvent
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mutation := `{ workflow_id: \"` + wfEvent.WorkflowID + `\", workflow_run_id: \"` + wfEvent.UID + `\", completed: ` + completed + `, workflow_name:\"` + wfEvent.Name + `\", cluster_id: ` + clusterID + `, executed_by:\"` + wfEvent.ExecutedBy + `\", execution_data:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
var payload = []byte(`{"query":"mutation { chaosWorkflowRun(workflowData:` + mutation + ` )}"}`)
|
||||
mutation := `{ workflowID: \"` + wfEvent.WorkflowID + `\", workflowRunID: \"` + wfEvent.UID + `\", completed: ` + completed + `, workflowName:\"` + wfEvent.Name + `\", clusterID: ` + clusterID + `, executedBy:\"` + wfEvent.ExecutedBy + `\", executionData:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
var payload = []byte(`{"query":"mutation { chaosWorkflowRun(request:` + mutation + ` )}"}`)
|
||||
return payload, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ var (
|
|||
ClusterID = os.Getenv("CLUSTER_ID")
|
||||
)
|
||||
|
||||
// initializes the Argo Workflow event watcher
|
||||
//WorkflowEventWatcher initializes the Argo Workflow event watcher
|
||||
func WorkflowEventWatcher(stopCh chan struct{}, stream chan types.WorkflowEvent, clusterData map[string]string) {
|
||||
startTime, err := strconv.Atoi(clusterData["START_TIME"])
|
||||
if err != nil {
|
||||
|
|
@ -48,17 +48,21 @@ func WorkflowEventWatcher(stopCh chan struct{}, stream chan types.WorkflowEvent,
|
|||
if err != nil {
|
||||
logrus.WithError(err).Fatal("Could not get kube config")
|
||||
}
|
||||
|
||||
// ClientSet to create Informer
|
||||
clientSet, err := versioned.NewForConfig(cfg)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Fatal("Could not generate dynamic client for config")
|
||||
}
|
||||
|
||||
// Create a factory object to watch workflows depending on default scope
|
||||
f := externalversions.NewSharedInformerFactoryWithOptions(clientSet, resyncPeriod,
|
||||
externalversions.WithTweakListOptions(func(list *v1.ListOptions) {
|
||||
list.LabelSelector = fmt.Sprintf("cluster_id=%s,workflows.argoproj.io/controller-instanceid=%s", ClusterID, ClusterID)
|
||||
}))
|
||||
|
||||
informer := f.Argoproj().V1alpha1().Workflows().Informer()
|
||||
|
||||
if AgentScope == "namespace" {
|
||||
f = externalversions.NewSharedInformerFactoryWithOptions(clientSet, resyncPeriod, externalversions.WithNamespace(AgentNamespace),
|
||||
externalversions.WithTweakListOptions(func(list *v1.ListOptions) {
|
||||
|
|
@ -70,7 +74,7 @@ func WorkflowEventWatcher(stopCh chan struct{}, stream chan types.WorkflowEvent,
|
|||
go startWatchWorkflow(stopCh, informer, stream, int64(startTime))
|
||||
}
|
||||
|
||||
// handles the different events events - add, update and delete
|
||||
//startWatchWorkflow handles the different events events - add, update and delete
|
||||
func startWatchWorkflow(stopCh <-chan struct{}, s cache.SharedIndexInformer, stream chan types.WorkflowEvent, startTime int64) {
|
||||
handlers := cache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
|
|
@ -99,7 +103,7 @@ func startWatchWorkflow(stopCh <-chan struct{}, s cache.SharedIndexInformer, str
|
|||
s.Run(stopCh)
|
||||
}
|
||||
|
||||
// responsible for extracting the required data from the event and streaming
|
||||
//WorkflowEventHandler responsible for extracting the required data from the event and streaming
|
||||
func WorkflowEventHandler(workflowObj *v1alpha1.Workflow, eventType string, startTime int64) (types.WorkflowEvent, error) {
|
||||
if workflowObj.Labels["workflow_id"] == "" {
|
||||
logrus.WithFields(map[string]interface{}{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ func SendRequest(server string, payload []byte) (string, error) {
|
|||
return string(body), nil
|
||||
}
|
||||
|
||||
// process event data into proper format acceptable by graphql
|
||||
// MarshalGQLData processes event data into proper format acceptable by graphql
|
||||
func MarshalGQLData(gqlData interface{}) (string, error) {
|
||||
data, err := json.Marshal(gqlData)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import (
|
|||
|
||||
var KubeConfig *string
|
||||
|
||||
//getKubeConfig setup the config for access cluster resource
|
||||
// GetKubeConfig sets up the config for access cluster resource
|
||||
func GetKubeConfig() (*rest.Config, error) {
|
||||
// Use in-cluster config if kubeconfig path is not specified
|
||||
if *KubeConfig == "" {
|
||||
|
|
@ -28,7 +28,7 @@ func GetGenericK8sClient() (*kubernetes.Clientset, error) {
|
|||
return kubernetes.NewForConfig(config)
|
||||
}
|
||||
|
||||
//This function returns dynamic client and discovery client
|
||||
// GetDynamicAndDiscoveryClient returns dynamic client and discovery client
|
||||
func GetDynamicAndDiscoveryClient() (discovery.DiscoveryInterface, dynamic.Interface, error) {
|
||||
// returns a config object which uses the service account kubernetes gives to pods
|
||||
config, err := GetKubeConfig()
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ func GetLogs(podName, namespace, container string) (string, error) {
|
|||
return str, nil
|
||||
}
|
||||
|
||||
// create pod log for normal pods and chaos-engine pods
|
||||
//CreatePodLog creates pod log for normal pods and chaos-engine pods
|
||||
func CreatePodLog(podLog types.PodLogRequest) (types.PodLog, error) {
|
||||
logDetails := types.PodLog{}
|
||||
mainLog, err := GetLogs(podLog.PodName, podLog.PodNamespace, "main")
|
||||
|
|
@ -109,7 +109,7 @@ func SendPodLogs(clusterData map[string]string, podLog types.PodLogRequest) {
|
|||
}
|
||||
|
||||
func GenerateLogPayload(cid, accessKey, version string, podLog types.PodLogRequest) ([]byte, error) {
|
||||
clusterID := `{cluster_id: \"` + cid + `\", version: \"` + version + `\", access_key: \"` + accessKey + `\"}`
|
||||
clusterID := `{clusterID: \"` + cid + `\", version: \"` + version + `\", accessKey: \"` + accessKey + `\"}`
|
||||
processed := " Could not get logs "
|
||||
|
||||
// get the logs
|
||||
|
|
@ -122,8 +122,8 @@ func GenerateLogPayload(cid, accessKey, version string, podLog types.PodLogReque
|
|||
}
|
||||
}
|
||||
|
||||
mutation := `{ cluster_id: ` + clusterID + `, request_id:\"` + podLog.RequestID + `\", workflow_run_id: \"` + podLog.WorkflowRunID + `\", pod_name: \"` + podLog.PodName + `\", pod_type: \"` + podLog.PodType + `\", log:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
var payload = []byte(`{"query":"mutation { podLog(log:` + mutation + ` )}"}`)
|
||||
mutation := `{ clusterID: ` + clusterID + `, requestID:\"` + podLog.RequestID + `\", workflowRunID: \"` + podLog.WorkflowRunID + `\", podName: \"` + podLog.PodName + `\", podType: \"` + podLog.PodType + `\", log:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
var payload = []byte(`{"query":"mutation { podLog(request:` + mutation + ` )}"}`)
|
||||
|
||||
return payload, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ func GetKubernetesObjects(request types.KubeObjRequest) ([]*types.KubeObject, er
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
clientset, err := kubernetes.NewForConfig(conf)
|
||||
clientSet, err := kubernetes.NewForConfig(conf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@ func GetKubernetesObjects(request types.KubeObjRequest) ([]*types.KubeObject, er
|
|||
}
|
||||
ObjData = append(ObjData, KubeObj)
|
||||
} else {
|
||||
namespace, err := clientset.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
||||
namespace, err := clientSet.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -73,7 +73,7 @@ func GetKubernetesObjects(request types.KubeObjRequest) ([]*types.KubeObject, er
|
|||
ObjData = append(ObjData, KubeObj)
|
||||
}
|
||||
} else {
|
||||
return nil, errors.New("No namespace available")
|
||||
return nil, errors.New("no namespace available")
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -108,9 +108,9 @@ func GetObjectDataByNamespace(namespace string, dynamicClient dynamic.Interface,
|
|||
return kubeObjects, nil
|
||||
}
|
||||
|
||||
func GenerateKubeObject(cid string, accessKey, version string, kubeobjectrequest types.KubeObjRequest) ([]byte, error) {
|
||||
clusterID := `{cluster_id: \"` + cid + `\", version: \"` + version + `\", access_key: \"` + accessKey + `\"}`
|
||||
kubeObj, err := GetKubernetesObjects(kubeobjectrequest)
|
||||
func GenerateKubeObject(cid string, accessKey, version string, kubeObjectRequest types.KubeObjRequest) ([]byte, error) {
|
||||
clusterID := `{clusterID: \"` + cid + `\", version: \"` + version + `\", accessKey: \"` + accessKey + `\"}`
|
||||
kubeObj, err := GetKubernetesObjects(kubeObjectRequest)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -118,16 +118,16 @@ func GenerateKubeObject(cid string, accessKey, version string, kubeobjectrequest
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mutation := `{ cluster_id: ` + clusterID + `, request_id:\"` + kubeobjectrequest.RequestID + `\", kube_obj:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
mutation := `{ clusterID: ` + clusterID + `, requestID:\"` + kubeObjectRequest.RequestID + `\", kubeObj:\"` + processed[1:len(processed)-1] + `\"}`
|
||||
|
||||
var payload = []byte(`{"query":"mutation { kubeObj(kubeData:` + mutation + ` )}"}`)
|
||||
var payload = []byte(`{"query":"mutation { kubeObj(request:` + mutation + ` )}"}`)
|
||||
return payload, nil
|
||||
}
|
||||
|
||||
//SendKubeObjects generates graphql mutation to send kubernetes objects data to graphql server
|
||||
func SendKubeObjects(clusterData map[string]string, kubeobjectrequest types.KubeObjRequest) error {
|
||||
func SendKubeObjects(clusterData map[string]string, kubeObjectRequest types.KubeObjRequest) error {
|
||||
// generate graphql payload
|
||||
payload, err := GenerateKubeObject(clusterData["CLUSTER_ID"], clusterData["ACCESS_KEY"], clusterData["VERSION"], kubeobjectrequest)
|
||||
payload, err := GenerateKubeObject(clusterData["CLUSTER_ID"], clusterData["ACCESS_KEY"], clusterData["VERSION"], kubeObjectRequest)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Print("Error while getting KubeObject Data")
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ func applyRequest(requestType string, obj *unstructured.Unstructured) (*unstruct
|
|||
if requestType == "create" {
|
||||
response, err := dr.Create(ctx, obj, metav1.CreateOptions{})
|
||||
if k8s_errors.IsAlreadyExists(err) {
|
||||
// This doesnt ever happen even if it does already exist
|
||||
// This doesn't ever happen even if it does already exist
|
||||
logrus.Info("Already exists")
|
||||
return nil, nil
|
||||
}
|
||||
|
|
@ -222,7 +222,7 @@ func applyRequest(requestType string, obj *unstructured.Unstructured) (*unstruct
|
|||
} else if requestType == "update" {
|
||||
getObj, err := dr.Get(ctx, obj.GetName(), metav1.GetOptions{})
|
||||
if k8s_errors.IsNotFound(err) {
|
||||
// This doesnt ever happen even if it is already deleted or not found
|
||||
// This doesn't ever happen even if it is already deleted or not found
|
||||
logrus.Info("%v not found", obj.GetName())
|
||||
return nil, nil
|
||||
}
|
||||
|
|
@ -243,7 +243,7 @@ func applyRequest(requestType string, obj *unstructured.Unstructured) (*unstruct
|
|||
} else if requestType == "delete" {
|
||||
err := dr.Delete(ctx, obj.GetName(), metav1.DeleteOptions{})
|
||||
if k8s_errors.IsNotFound(err) {
|
||||
// This doesnt ever happen even if it is already deleted or not found
|
||||
// This doesn't ever happen even if it is already deleted or not found
|
||||
logrus.Info("%v not found", obj.GetName())
|
||||
return nil, nil
|
||||
}
|
||||
|
|
@ -257,7 +257,7 @@ func applyRequest(requestType string, obj *unstructured.Unstructured) (*unstruct
|
|||
} else if requestType == "get" {
|
||||
response, err := dr.Get(ctx, obj.GetName(), metav1.GetOptions{})
|
||||
if k8s_errors.IsNotFound(err) {
|
||||
// This doesnt ever happen even if it is already deleted or not found
|
||||
// This doesn't ever happen even if it is already deleted or not found
|
||||
logrus.Info("%v not found", obj.GetName())
|
||||
return nil, nil
|
||||
}
|
||||
|
|
@ -287,7 +287,7 @@ func addCustomLabels(obj *unstructured.Unstructured, customLabels map[string]str
|
|||
obj.SetLabels(newLabels)
|
||||
}
|
||||
|
||||
// This function handles cluster operations
|
||||
// ClusterOperations handles cluster operations
|
||||
func ClusterOperations(clusterAction types.Action) (*unstructured.Unstructured, error) {
|
||||
|
||||
// Converting JSON to YAML and store it in yamlStr variable
|
||||
|
|
@ -333,7 +333,7 @@ func ClusterOperations(clusterAction types.Action) (*unstructured.Unstructured,
|
|||
}
|
||||
|
||||
func ClusterConfirm(clusterData map[string]string) ([]byte, error) {
|
||||
payload := `{"query":"mutation{ clusterConfirm(identity: {cluster_id: \"` + clusterData["CLUSTER_ID"] + `\", version: \"` + clusterData["VERSION"] + `\", access_key: \"` + clusterData["ACCESS_KEY"] + `\"}){isClusterConfirmed newAccessKey cluster_id}}"}`
|
||||
payload := `{"query":"mutation{ confirmClusterRegistration(request: {clusterID: \"` + clusterData["CLUSTER_ID"] + `\", version: \"` + clusterData["VERSION"] + `\", accessKey: \"` + clusterData["ACCESS_KEY"] + `\"}){isClusterConfirmed newAccessKey clusterID}}"}`
|
||||
resp, err := graphql.SendRequest(clusterData["SERVER_ADDR"], []byte(payload))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import (
|
|||
)
|
||||
|
||||
func ClusterConnect(clusterData map[string]string) {
|
||||
query := `{"query":"subscription {\n clusterConnect(clusterInfo: {cluster_id: \"` + clusterData["CLUSTER_ID"] + `\", version: \"` + clusterData["VERSION"] + `\", access_key: \"` + clusterData["ACCESS_KEY"] + `\"}) {\n \t project_id,\n action{\n k8s_manifest,\n external_data,\n request_type\n username\n namespace\n }\n }\n}\n"}`
|
||||
query := `{"query":"subscription {\n clusterConnect(clusterInfo: {clusterID: \"` + clusterData["CLUSTER_ID"] + `\", version: \"` + clusterData["VERSION"] + `\", accessKey: \"` + clusterData["ACCESS_KEY"] + `\"}) {\n \t projectID,\n action{\n k8sManifest,\n externalData,\n requestType\n username\n namespace\n }\n }\n}\n"}`
|
||||
serverURL, err := url.Parse(clusterData["SERVER_ADDR"])
|
||||
if err != nil {
|
||||
logrus.WithError(err).Fatal("Failed to parse URL")
|
||||
|
|
@ -72,7 +72,6 @@ func ClusterConnect(clusterData map[string]string) {
|
|||
if err != nil {
|
||||
logrus.WithError(err).Fatal("Failed to read message")
|
||||
}
|
||||
|
||||
var r types.RawData
|
||||
err = json.Unmarshal(message, &r)
|
||||
if err != nil {
|
||||
|
|
@ -90,7 +89,6 @@ func ClusterConnect(clusterData map[string]string) {
|
|||
logrus.Error("Error response from the server : ", string(message))
|
||||
continue
|
||||
}
|
||||
|
||||
err = RequestProcessor(clusterData, r)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Error("Error on processing request")
|
||||
|
|
@ -103,7 +101,6 @@ func RequestProcessor(clusterData map[string]string, r types.RawData) error {
|
|||
KubeObjRequest := types.KubeObjRequest{
|
||||
RequestID: r.Payload.Data.ClusterConnect.ProjectID,
|
||||
}
|
||||
|
||||
err := json.Unmarshal([]byte(r.Payload.Data.ClusterConnect.Action.ExternalData), &KubeObjRequest)
|
||||
if err != nil {
|
||||
return errors.New("failed to json unmarshal: " + err.Error())
|
||||
|
|
|
|||
|
|
@ -19,43 +19,30 @@ type Payload struct {
|
|||
}
|
||||
|
||||
type Data struct {
|
||||
ClusterConfirm ClusterConfirm `json:"clusterConfirm"`
|
||||
ClusterConfirm ClusterConfirm `json:"confirmClusterRegistration"`
|
||||
ClusterConnect ClusterConnect `json:"clusterConnect"`
|
||||
}
|
||||
|
||||
type ClusterConfirm struct {
|
||||
IsClusterConfirmed bool `json:isClusterConfirmed`
|
||||
NewAccessKey string `json:newAccessKey`
|
||||
ClusterID string `json:cluster_id`
|
||||
IsClusterConfirmed bool `json:"isClusterConfirmed"`
|
||||
NewAccessKey string `json:"newAccessKey"`
|
||||
ClusterID string `json:"clusterID"`
|
||||
}
|
||||
|
||||
type ClusterConnect struct {
|
||||
ProjectID string `json:"project_id"`
|
||||
ProjectID string `json:"projectID"`
|
||||
Action Action `json:"action"`
|
||||
}
|
||||
|
||||
type KubeObjRequest struct {
|
||||
RequestID string
|
||||
ClusterID string `json:"cluster_id"`
|
||||
ObjectType string `json:"object_type"`
|
||||
KubeGVRRequest KubeGVRRequest `json:"kube_obj_request"`
|
||||
}
|
||||
|
||||
type KubeGVRRequest struct {
|
||||
Group string `json:"group"`
|
||||
Version string `json:"version"`
|
||||
Resource string `json:"resource"`
|
||||
}
|
||||
|
||||
type Action struct {
|
||||
K8SManifest string `json:"k8s_manifest"`
|
||||
ExternalData string `json:"external_data"`
|
||||
RequestType string `json:"request_type"`
|
||||
K8SManifest string `json:"k8sManifest"`
|
||||
ExternalData string `json:"externalData"`
|
||||
RequestType string `json:"requestType"`
|
||||
Username string `json:"username"`
|
||||
Namespace string `json:"namespace"`
|
||||
}
|
||||
|
||||
type WorkflowSyncExternalData struct {
|
||||
WorkflowID string `json:"workflow_id"`
|
||||
WorkflowRunID string `json:"workflow_run_id"`
|
||||
WorkflowID string `json:"workflowID"`
|
||||
WorkflowRunID string `json:"workflowRunID"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ package types
|
|||
|
||||
import "github.com/litmuschaos/chaos-operator/pkg/apis/litmuschaos/v1alpha1"
|
||||
|
||||
// events data
|
||||
// WorkflowEvent consists of workflow related data
|
||||
type WorkflowEvent struct {
|
||||
WorkflowType string `json:"workflow_type"`
|
||||
WorkflowType string `json:"workflowType"`
|
||||
WorkflowID string `json:"-"`
|
||||
EventType string `json:"event_type"`
|
||||
EventType string `json:"eventType"`
|
||||
UID string `json:"-"`
|
||||
Namespace string `json:"namespace"`
|
||||
Name string `json:"name"`
|
||||
|
|
@ -16,10 +16,10 @@ type WorkflowEvent struct {
|
|||
StartedAt string `json:"startedAt"`
|
||||
FinishedAt string `json:"finishedAt"`
|
||||
Nodes map[string]Node `json:"nodes"`
|
||||
ExecutedBy string `json:"executed_by"`
|
||||
ExecutedBy string `json:"executedBy"`
|
||||
}
|
||||
|
||||
// each node/step data
|
||||
// Node consist of node/step data
|
||||
type Node struct {
|
||||
Name string `json:"name"`
|
||||
Phase string `json:"phase"`
|
||||
|
|
@ -31,7 +31,7 @@ type Node struct {
|
|||
ChaosExp *ChaosData `json:"chaosData,omitempty"`
|
||||
}
|
||||
|
||||
// chaos data
|
||||
// ChaosData consists of ChaosEngine related data
|
||||
type ChaosData struct {
|
||||
EngineUID string `json:"engineUID"`
|
||||
EngineContext string `json:"engineContext"`
|
||||
|
|
|
|||
|
|
@ -6,19 +6,34 @@ import (
|
|||
"k8s.io/apimachinery/pkg/types"
|
||||
)
|
||||
|
||||
type KubeObjRequest struct {
|
||||
RequestID string
|
||||
ClusterID string `json:"clusterID"`
|
||||
ObjectType string `json:"objectType"`
|
||||
KubeGVRRequest KubeGVRRequest `json:"kubeObjRequest"`
|
||||
}
|
||||
|
||||
type KubeGVRRequest struct {
|
||||
Group string `json:"group"`
|
||||
Version string `json:"version"`
|
||||
Resource string `json:"resource"`
|
||||
}
|
||||
|
||||
//KubeObject consists of all the namespaces and its related K8S object details
|
||||
type KubeObject struct {
|
||||
Namespace string `json:"namespace"`
|
||||
Data []ObjectData `json:"data"`
|
||||
}
|
||||
|
||||
//ObjectData consists of Kubernetes Objects related details
|
||||
type ObjectData struct {
|
||||
Name string `json:"name"`
|
||||
UID types.UID `json:"uid"`
|
||||
Namespace string `json:"namespace"`
|
||||
APIVersion string `json:"api_version"`
|
||||
CreationTimestamp metav1.Time `json:"creation_timestamp"`
|
||||
APIVersion string `json:"apiVersion"`
|
||||
CreationTimestamp metav1.Time `json:"creationTimestamp"`
|
||||
Containers []v1.Container `json:"containers"`
|
||||
TerminationGracePeriods *int64 `json:"termination_grace_periods"`
|
||||
TerminationGracePeriods *int64 `json:"terminationGracePeriods"`
|
||||
Volumes []v1.Volume `json:"volumes"`
|
||||
Labels map[string]string `json:"labels"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,17 +2,18 @@ package types
|
|||
|
||||
type PodLogRequest struct {
|
||||
RequestID string
|
||||
ClusterID string `json:"cluster_id"`
|
||||
WorkflowRunID string `json:"workflow_run_id"`
|
||||
PodName string `json:"pod_name"`
|
||||
PodNamespace string `json:"pod_namespace"`
|
||||
PodType string `json:"pod_type"`
|
||||
ExpPod *string `json:"exp_pod"`
|
||||
RunnerPod *string `json:"runner_pod"`
|
||||
ChaosNamespace *string `json:"chaos_namespace"`
|
||||
ClusterID string `json:"clusterID"`
|
||||
WorkflowRunID string `json:"workflowRunID"`
|
||||
PodName string `json:"podName"`
|
||||
PodNamespace string `json:"podNamespace"`
|
||||
PodType string `json:"podType"`
|
||||
ExpPod *string `json:"expPod"`
|
||||
RunnerPod *string `json:"runnerPod"`
|
||||
ChaosNamespace *string `json:"chaosNamespace"`
|
||||
}
|
||||
|
||||
// PodLog consists logs from Chaos related pods and experiment pods
|
||||
type PodLog struct {
|
||||
MainPod string `json:"main_logs"`
|
||||
ChaosPod map[string]string `json:"chaos_logs",omitempty`
|
||||
MainPod string `json:"mainLogs"`
|
||||
ChaosPod map[string]string `json:"chaosLogs",omitempty`
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -73,7 +73,7 @@ const LocalQuickActionCard: React.FC<LocalQuickActionCardProps> = ({
|
|||
|
||||
// TODO: settings only accessible by Owner
|
||||
(homePage || returningHome || community || observability) &&
|
||||
getProjectRole() === Role.owner
|
||||
getProjectRole() === Role.OWNER
|
||||
? {
|
||||
src: './icons/teamMember.svg',
|
||||
alt: 'team',
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ const SideBar: React.FC = () => {
|
|||
</CustomisedListItem>
|
||||
)}
|
||||
|
||||
{role === UserRole.admin && projectRole === 'Owner' && (
|
||||
{role === UserRole.ADMIN && projectRole === 'Owner' && (
|
||||
<CustomisedListItem
|
||||
key="usage-statistics"
|
||||
handleClick={() => {
|
||||
|
|
|
|||
|
|
@ -27,12 +27,12 @@ const UsefulLinks: React.FC<UsefulLinkProps> = ({
|
|||
</Typography>
|
||||
</div>
|
||||
{maintainers?.map((m: Maintainer) => (
|
||||
<div className={classes.maintainerField} key={m.Name}>
|
||||
<div className={classes.maintainerField} key={m.name}>
|
||||
<Typography className={classes.maintainerlinks}>
|
||||
{m.Name}
|
||||
{m.name}
|
||||
</Typography>
|
||||
<Typography className={classes.maintainerlinks}>
|
||||
{m.Email}
|
||||
{m.email}
|
||||
</Typography>
|
||||
</div>
|
||||
))}
|
||||
|
|
@ -50,15 +50,15 @@ const UsefulLinks: React.FC<UsefulLinkProps> = ({
|
|||
</div>
|
||||
{data?.map(
|
||||
(d: Link) =>
|
||||
d.Url && (
|
||||
<div key={d.Name}>
|
||||
d.url && (
|
||||
<div key={d.name}>
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href={d.Url}
|
||||
href={d.url}
|
||||
className={classes.createLinkText}
|
||||
>
|
||||
<Typography className={classes.linkType}>{d.Name}</Typography>
|
||||
<Typography className={classes.linkType}>{d.name}</Typography>
|
||||
</a>
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ const Routes: React.FC = () => {
|
|||
<Route exact path="/create-workflow" component={CreateWorkflow} />
|
||||
<Route
|
||||
exact
|
||||
path="/workflows/:workflowRunId"
|
||||
path="/workflows/:workflowRunID"
|
||||
component={WorkflowDetails}
|
||||
/>
|
||||
<Route
|
||||
|
|
@ -221,7 +221,7 @@ const Routes: React.FC = () => {
|
|||
/>
|
||||
<Route
|
||||
exact
|
||||
path="/analytics/workflowStatistics/:workflowId"
|
||||
path="/analytics/workflowStatistics/:workflowID"
|
||||
component={WorkflowInfoStats}
|
||||
/>
|
||||
<Route exact path="/community" component={Community} />
|
||||
|
|
@ -244,7 +244,7 @@ const Routes: React.FC = () => {
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{role === UserRole.admin ? (
|
||||
{role === UserRole.ADMIN ? (
|
||||
<Route path="/usage-statistics" component={UsageStatistics} />
|
||||
) : (
|
||||
<Redirect
|
||||
|
|
|
|||
|
|
@ -1,320 +0,0 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const CREATE_WORKFLOW = gql`
|
||||
mutation createChaosWorkFlow($ChaosWorkFlowInput: ChaosWorkFlowInput!) {
|
||||
createChaosWorkFlow(input: $ChaosWorkFlowInput) {
|
||||
workflow_id
|
||||
cronSyntax
|
||||
workflow_name
|
||||
workflow_description
|
||||
isCustomWorkflow
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const ADD_WORKFLOW_TEMPLATE = gql`
|
||||
mutation addWorkflowTemplate($data: TemplateInput!) {
|
||||
createManifestTemplate(templateInput: $data) {
|
||||
template_name
|
||||
template_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_WORKFLOW_TEMPLATE = gql`
|
||||
mutation deleteManifestTemplate($projectID: String!, $data: String!) {
|
||||
deleteManifestTemplate(projectID: $projectID, template_id: $data)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_USER_STATE = gql`
|
||||
mutation updateUserState($uid: String!, $isDeactivate: Boolean!) {
|
||||
updateUserState(uid: $uid, isDeactivate: $isDeactivate)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_SCHEDULE = gql`
|
||||
mutation updateChaos($ChaosWorkFlowInput: ChaosWorkFlowInput!) {
|
||||
updateChaosWorkflow(input: $ChaosWorkFlowInput) {
|
||||
workflow_id
|
||||
workflow_name
|
||||
workflow_description
|
||||
isCustomWorkflow
|
||||
cronSyntax
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_DETAILS = gql`
|
||||
mutation updateUser($user: UpdateUserInput!) {
|
||||
updateUser(user: $user)
|
||||
}
|
||||
`;
|
||||
|
||||
export const USER_CLUSTER_REG = gql`
|
||||
mutation userCluster($ClusterInput: ClusterInput!) {
|
||||
userClusterReg(clusterInput: $ClusterInput) {
|
||||
token
|
||||
cluster_id
|
||||
cluster_name
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const ADD_MY_HUB = gql`
|
||||
mutation addMyHub($MyHubDetails: CreateMyHub!, $projectID: String!) {
|
||||
addMyHub(myhubInput: $MyHubDetails, projectID: $projectID) {
|
||||
HubName
|
||||
RepoURL
|
||||
RepoBranch
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const SAVE_MY_HUB = gql`
|
||||
mutation saveMyHub($MyHubDetails: CreateMyHub!, $projectID: String!) {
|
||||
saveMyHub(myhubInput: $MyHubDetails, projectID: $projectID) {
|
||||
HubName
|
||||
RepoURL
|
||||
RepoBranch
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_MY_HUB = gql`
|
||||
mutation updateMyHub($MyHubDetails: UpdateMyHub!, $projectID: String!) {
|
||||
updateMyHub(myhubInput: $MyHubDetails, projectID: $projectID) {
|
||||
HubName
|
||||
RepoURL
|
||||
RepoBranch
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const SYNC_REPO = gql`
|
||||
mutation syncHub($id: ID!, $projectID: String!) {
|
||||
syncHub(id: $id, projectID: $projectID) {
|
||||
id
|
||||
RepoURL
|
||||
RepoBranch
|
||||
IsAvailable
|
||||
TotalExp
|
||||
HubName
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_HUB = gql`
|
||||
mutation deleteMyHub($hub_id: String!, $projectID: String!) {
|
||||
deleteMyHub(hub_id: $hub_id, projectID: $projectID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GENERATE_SSH = gql`
|
||||
mutation generateSSHKey {
|
||||
generaterSSHKey {
|
||||
privateKey
|
||||
publicKey
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_CLUSTERS = gql`
|
||||
mutation deleteClusters($projectID: String!, $cluster_ids: [String]!) {
|
||||
deleteClusters(projectID: $projectID, cluster_ids: $cluster_ids)
|
||||
}
|
||||
`;
|
||||
|
||||
export const ENABLE_GITOPS = gql`
|
||||
mutation enableGitOps($gitConfig: GitConfig!) {
|
||||
enableGitOps(config: $gitConfig)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_GITOPS = gql`
|
||||
mutation updateGitOps($gitConfig: GitConfig!) {
|
||||
updateGitOps(config: $gitConfig)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DISABLE_GITOPS = gql`
|
||||
mutation disableGitOPs($data: String!) {
|
||||
disableGitOps(project_id: $data)
|
||||
}
|
||||
`;
|
||||
|
||||
export const RERUN_CHAOS_WORKFLOW = gql`
|
||||
mutation rerunChaosWorkflow($projectID: String!, $data: String!) {
|
||||
reRunChaosWorkFlow(projectID: $projectID, workflowID: $data)
|
||||
}
|
||||
`;
|
||||
|
||||
export const LEAVE_PROJECT = gql`
|
||||
mutation LeaveProject($data: MemberInput!) {
|
||||
leaveProject(member: $data)
|
||||
}
|
||||
`;
|
||||
|
||||
export const CREATE_DATASOURCE = gql`
|
||||
mutation createDataSource($DSInput: DSInput) {
|
||||
createDataSource(datasource: $DSInput) {
|
||||
ds_id
|
||||
ds_name
|
||||
ds_type
|
||||
ds_url
|
||||
access_type
|
||||
auth_type
|
||||
basic_auth_username
|
||||
basic_auth_password
|
||||
scrape_interval
|
||||
query_timeout
|
||||
http_method
|
||||
project_id
|
||||
health_status
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_DATASOURCE = gql`
|
||||
mutation updateDataSource($DSInput: DSInput!) {
|
||||
updateDataSource(datasource: $DSInput) {
|
||||
ds_id
|
||||
ds_name
|
||||
ds_type
|
||||
ds_url
|
||||
access_type
|
||||
auth_type
|
||||
basic_auth_username
|
||||
basic_auth_password
|
||||
scrape_interval
|
||||
query_timeout
|
||||
http_method
|
||||
project_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_DATASOURCE = gql`
|
||||
mutation deleteDataSource(
|
||||
$projectID: String!
|
||||
$deleteDSInput: deleteDSInput!
|
||||
) {
|
||||
deleteDataSource(projectID: $projectID, input: $deleteDSInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const CREATE_DASHBOARD = gql`
|
||||
mutation createDashBoard($createDBInput: createDBInput) {
|
||||
createDashBoard(dashboard: $createDBInput) {
|
||||
db_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_DASHBOARD = gql`
|
||||
mutation updateDashboard(
|
||||
$projectID: String!
|
||||
$updateDBInput: updateDBInput!
|
||||
$chaosQueryUpdate: Boolean!
|
||||
) {
|
||||
updateDashboard(
|
||||
projectID: $projectID
|
||||
dashboard: $updateDBInput
|
||||
chaosQueryUpdate: $chaosQueryUpdate
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_DASHBOARD = gql`
|
||||
mutation deleteDashboard($projectID: String!, $dbID: String) {
|
||||
deleteDashboard(projectID: $projectID, db_id: $dbID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_PANEL = gql`
|
||||
mutation updatePanel($panelInput: [panel]) {
|
||||
updatePanel(panelInput: $panelInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const ADD_IMAGE_REGISTRY = gql`
|
||||
mutation createImageRegistry(
|
||||
$projectID: String!
|
||||
$imageRegistryInfo: imageRegistryInput!
|
||||
) {
|
||||
createImageRegistry(
|
||||
project_id: $projectID
|
||||
imageRegistryInfo: $imageRegistryInfo
|
||||
) {
|
||||
image_registry_info {
|
||||
image_repo_name
|
||||
image_registry_name
|
||||
image_registry_type
|
||||
is_default
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_IMAGE_REGISTRY = gql`
|
||||
mutation updateImageRegistry(
|
||||
$imageRegistryID: String!
|
||||
$projectID: String!
|
||||
$imageRegistryInfo: imageRegistryInput!
|
||||
) {
|
||||
updateImageRegistry(
|
||||
image_registry_id: $imageRegistryID
|
||||
project_id: $projectID
|
||||
imageRegistryInfo: $imageRegistryInfo
|
||||
) {
|
||||
image_registry_info {
|
||||
image_repo_name
|
||||
image_registry_name
|
||||
image_registry_type
|
||||
is_default
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const SYNC_WORKFLOW = gql`
|
||||
mutation syncWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String!
|
||||
$workflow_run_id: String!
|
||||
) {
|
||||
syncWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflow_run_id: $workflow_run_id
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_WORKFLOW = gql`
|
||||
mutation deleteWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String
|
||||
$workflow_run_id: String
|
||||
) {
|
||||
deleteChaosWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflow_run_id: $workflow_run_id
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const TERMINATE_WORKFLOW = gql`
|
||||
mutation terminateWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String
|
||||
$workflow_run_id: String
|
||||
) {
|
||||
terminateChaosWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflow_run_id: $workflow_run_id
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const CREATE_DATASOURCE = gql`
|
||||
mutation createDataSource($DSInput: DSInput) {
|
||||
createDataSource(datasource: $DSInput) {
|
||||
dsID
|
||||
dsName
|
||||
dsType
|
||||
dsURL
|
||||
accessType
|
||||
authType
|
||||
basicAuthUsername
|
||||
basicAuthPassword
|
||||
scrapeInterval
|
||||
queryTimeout
|
||||
httpMethod
|
||||
projectID
|
||||
healthStatus
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_DATASOURCE = gql`
|
||||
mutation updateDataSource($DSInput: DSInput!) {
|
||||
updateDataSource(datasource: $DSInput) {
|
||||
dsID
|
||||
dsName
|
||||
dsType
|
||||
dsURL
|
||||
accessType
|
||||
authType
|
||||
basicAuthUsername
|
||||
basicAuthPassword
|
||||
scrapeInterval
|
||||
queryTimeout
|
||||
httpMethod
|
||||
projectID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_DATASOURCE = gql`
|
||||
mutation deleteDataSource(
|
||||
$projectID: String!
|
||||
$deleteDSInput: deleteDSInput!
|
||||
) {
|
||||
deleteDataSource(projectID: $projectID, input: $deleteDSInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const CREATE_DASHBOARD = gql`
|
||||
mutation createDashBoard($dashboard: CreateDBInput!) {
|
||||
createDashBoard(dashboard: $dashboard) {
|
||||
dbID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_DASHBOARD = gql`
|
||||
mutation updateDashboard(
|
||||
$projectID: String!
|
||||
$dashboard: UpdateDBInput!
|
||||
$chaosQueryUpdate: Boolean!
|
||||
) {
|
||||
updateDashboard(
|
||||
projectID: $projectID
|
||||
dashboard: $dashboard
|
||||
chaosQueryUpdate: $chaosQueryUpdate
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_DASHBOARD = gql`
|
||||
mutation deleteDashboard($projectID: String!, $dbID: String) {
|
||||
deleteDashboard(projectID: $projectID, dbID: $dbID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_PANEL = gql`
|
||||
mutation updatePanel($panelInput: [panel]) {
|
||||
updatePanel(panelInput: $panelInput)
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// chaosHub (Change mutation name to add_chaos_hub)
|
||||
export const ADD_MY_HUB = gql`
|
||||
mutation addChaosHub($request: CreateChaosHubRequest!) {
|
||||
addChaosHub(request: $request) {
|
||||
hubName
|
||||
repoURL
|
||||
repoBranch
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_MY_HUB = gql`
|
||||
mutation updateChaosHub($request: UpdateChaosHubRequest!) {
|
||||
updateChaosHub(request: $request) {
|
||||
hubName
|
||||
repoURL
|
||||
repoBranch
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const SYNC_REPO = gql`
|
||||
mutation syncChaosHub($id: ID!, $projectID: String!) {
|
||||
syncChaosHub(id: $id, projectID: $projectID) {
|
||||
id
|
||||
repoURL
|
||||
repoBranch
|
||||
isAvailable
|
||||
totalExp
|
||||
hubName
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_HUB = gql`
|
||||
mutation deleteChaosHub($hubID: String!, $projectID: String!) {
|
||||
deleteChaosHub(hubID: $hubID, projectID: $projectID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GENERATE_SSH = gql`
|
||||
mutation generateSSHKey {
|
||||
generaterSSHKey {
|
||||
privateKey
|
||||
publicKey
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// gitOps
|
||||
export const ENABLE_GITOPS = gql`
|
||||
mutation enableGitOps($config: GitConfigResponse!) {
|
||||
enableGitOps(config: $config)
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_GITOPS = gql`
|
||||
mutation updateGitOps($config: GitConfigResponse!) {
|
||||
updateGitOps(config: $config)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DISABLE_GITOPS = gql`
|
||||
mutation disableGitOps($projectID: String!) {
|
||||
disableGitOps(projectID: $data)
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// ImageResgistry
|
||||
export const ADD_IMAGE_REGISTRY = gql`
|
||||
mutation createImageRegistry(
|
||||
$projectID: String!
|
||||
$imageRegistryInfo: imageRegistryInput!
|
||||
) {
|
||||
createImageRegistry(
|
||||
projectID: $projectID
|
||||
imageRegistryInfo: $imageRegistryInfo
|
||||
) {
|
||||
imageRegistryInfo {
|
||||
imageRepoName
|
||||
imageRegistryName
|
||||
imageRegistryType
|
||||
isDefault
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_IMAGE_REGISTRY = gql`
|
||||
mutation updateImageRegistry(
|
||||
$imageRegistryID: String!
|
||||
$projectID: String!
|
||||
$imageRegistryInfo: ImageRegistryInput!
|
||||
) {
|
||||
updateImageRegistry(
|
||||
imageRegistryID: $imageRegistryID
|
||||
projectID: $projectID
|
||||
imageRegistryInfo: $imageRegistryInfo
|
||||
) {
|
||||
imageRegistryInfo {
|
||||
imageRepoName
|
||||
imageRegistryName
|
||||
imageRegistryType
|
||||
isDefault
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
export * from './analytics';
|
||||
export * from './chaosHub';
|
||||
export * from './gitOps';
|
||||
export * from './imageRegistry';
|
||||
export * from './template';
|
||||
export * from './workflows';
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const ADD_WORKFLOW_TEMPLATE = gql`
|
||||
mutation createWorkflowTemplate($request: TemplateInput!) {
|
||||
createWorkflowTemplate(request: $request) {
|
||||
templateName
|
||||
templateID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_WORKFLOW_TEMPLATE = gql`
|
||||
mutation deleteWorkflowTemplate($projectID: String!, $templateID: String!) {
|
||||
deleteWorkflowTemplate(projectID: $projectID, templateID: $templateID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_CLUSTERS = gql`
|
||||
mutation deleteClusters($projectID: String!, $clusterIDs: [String]!) {
|
||||
deleteClusters(projectID: $projectID, clusterIDs: $clusterIDs)
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// Workflow
|
||||
export const CREATE_WORKFLOW = gql`
|
||||
mutation createChaosWorkFlow($request: ChaosWorkFlowRequest!) {
|
||||
createChaosWorkFlow(request: $request) {
|
||||
workflowID
|
||||
cronSyntax
|
||||
workflowName
|
||||
workflowDescription
|
||||
isCustomWorkflow
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_SCHEDULE = gql`
|
||||
mutation updateChaosWorkflow($ChaosWorkFlowInput: ChaosWorkFlowInput!) {
|
||||
updateChaosWorkflow(input: $ChaosWorkFlowInput) {
|
||||
workflowID
|
||||
cronSyntax
|
||||
workflowName
|
||||
workflowDescription
|
||||
isCustomWorkflow
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const RERUN_CHAOS_WORKFLOW = gql`
|
||||
mutation reRunChaosWorkflow($projectID: String!, $workflowID: String!) {
|
||||
reRunChaosWorkFlow(projectID: $projectID, workflowID: $workflowID)
|
||||
}
|
||||
`;
|
||||
|
||||
export const SYNC_WORKFLOW = gql`
|
||||
mutation syncWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String!
|
||||
$workflowRunID: String!
|
||||
) {
|
||||
syncWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflowRunID: $workflowRunID
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_WORKFLOW = gql`
|
||||
mutation deleteChaosWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String
|
||||
$workflowRunID: String
|
||||
) {
|
||||
deleteChaosWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflowRunID: $workflowRunID
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
||||
export const TERMINATE_WORKFLOW = gql`
|
||||
mutation terminateWorkflow(
|
||||
$projectID: String!
|
||||
$workflowID: String
|
||||
$workflowRunID: String
|
||||
) {
|
||||
terminateChaosWorkflow(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
workflowRunID: $workflowRunID
|
||||
)
|
||||
}
|
||||
`;
|
||||
|
|
@ -1,648 +0,0 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const WORKFLOW_DETAILS_WITH_EXEC_DATA = gql`
|
||||
query workflowDetails($workflowRunsInput: GetWorkflowRunsInput!) {
|
||||
getWorkflowRuns(workflowRunsInput: $workflowRunsInput) {
|
||||
total_no_of_workflow_runs
|
||||
workflow_runs {
|
||||
workflow_id
|
||||
workflow_name
|
||||
workflow_run_id
|
||||
cluster_name
|
||||
last_updated
|
||||
cluster_id
|
||||
phase
|
||||
execution_data
|
||||
resiliency_score
|
||||
isRemoved
|
||||
executed_by
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_DETAILS = gql`
|
||||
query workflowDetails($workflowRunsInput: GetWorkflowRunsInput!) {
|
||||
getWorkflowRuns(workflowRunsInput: $workflowRunsInput) {
|
||||
total_no_of_workflow_runs
|
||||
workflow_runs {
|
||||
workflow_run_id
|
||||
workflow_id
|
||||
cluster_name
|
||||
last_updated
|
||||
project_id
|
||||
cluster_id
|
||||
workflow_name
|
||||
cluster_type
|
||||
phase
|
||||
resiliency_score
|
||||
experiments_passed
|
||||
experiments_failed
|
||||
experiments_awaited
|
||||
experiments_stopped
|
||||
experiments_na
|
||||
total_experiments
|
||||
isRemoved
|
||||
executed_by
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_RUN_DETAILS = gql`
|
||||
query workflowDetails($workflowRunsInput: GetWorkflowRunsInput!) {
|
||||
getWorkflowRuns(workflowRunsInput: $workflowRunsInput) {
|
||||
total_no_of_workflow_runs
|
||||
workflow_runs {
|
||||
weightages {
|
||||
experiment_name
|
||||
weightage
|
||||
}
|
||||
workflow_id
|
||||
workflow_name
|
||||
workflow_run_id
|
||||
cluster_name
|
||||
execution_data
|
||||
last_updated
|
||||
phase
|
||||
resiliency_score
|
||||
experiments_passed
|
||||
total_experiments
|
||||
isRemoved
|
||||
executed_by
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_STATS = gql`
|
||||
query getWorkflowStats(
|
||||
$filter: TimeFrequency!
|
||||
$project_id: ID!
|
||||
$show_workflow_runs: Boolean!
|
||||
) {
|
||||
getWorkflowStats(
|
||||
filter: $filter
|
||||
project_id: $project_id
|
||||
show_workflow_runs: $show_workflow_runs
|
||||
) {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const STACKED_BAR_GRAPH = gql`
|
||||
query workflowDetails($workflowRunsInput: GetWorkflowRunsInput!) {
|
||||
getWorkflowRuns(workflowRunsInput: $workflowRunsInput) {
|
||||
total_no_of_workflow_runs
|
||||
workflow_runs {
|
||||
workflow_run_id
|
||||
workflow_name
|
||||
last_updated
|
||||
total_experiments
|
||||
experiments_passed
|
||||
resiliency_score
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
export const WORKFLOW_LIST_DETAILS = gql`
|
||||
query workflowListDetails($workflowInput: ListWorkflowsInput!) {
|
||||
ListWorkflow(workflowInput: $workflowInput) {
|
||||
total_no_of_workflows
|
||||
workflows {
|
||||
workflow_id
|
||||
workflow_manifest
|
||||
cronSyntax
|
||||
cluster_name
|
||||
workflow_name
|
||||
workflow_description
|
||||
weightages {
|
||||
experiment_name
|
||||
weightage
|
||||
}
|
||||
isCustomWorkflow
|
||||
updated_at
|
||||
created_at
|
||||
project_id
|
||||
cluster_id
|
||||
cluster_type
|
||||
isRemoved
|
||||
last_updated_by
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_LIST_DETAILS_FOR_MANIFEST = gql`
|
||||
query workflowListDetails($projectID: String!, $workflowIDs: [ID]) {
|
||||
ListWorkflow(project_id: $projectID, workflow_ids: $workflowIDs) {
|
||||
workflow_id
|
||||
workflow_manifest
|
||||
workflow_name
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_WORKFLOW_RUNS_STATS = gql`
|
||||
query getWorkflowRunStats(
|
||||
$workflowRunStatsRequest: WorkflowRunStatsRequest!
|
||||
) {
|
||||
getWorkflowRunStats(workflowRunStatsRequest: $workflowRunStatsRequest) {
|
||||
total_workflow_runs
|
||||
succeeded_workflow_runs
|
||||
failed_workflow_runs
|
||||
running_workflow_runs
|
||||
workflow_run_succeeded_percentage
|
||||
workflow_run_failed_percentage
|
||||
average_resiliency_score
|
||||
passed_percentage
|
||||
failed_percentage
|
||||
total_experiments
|
||||
experiments_passed
|
||||
experiments_failed
|
||||
experiments_awaited
|
||||
experiments_stopped
|
||||
experiments_na
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CLUSTER = gql`
|
||||
query getClusters($project_id: String!, $cluster_type: String) {
|
||||
getCluster(project_id: $project_id, cluster_type: $cluster_type) {
|
||||
cluster_id
|
||||
cluster_name
|
||||
description
|
||||
is_active
|
||||
is_registered
|
||||
is_cluster_confirmed
|
||||
updated_at
|
||||
created_at
|
||||
cluster_type
|
||||
no_of_schedules
|
||||
no_of_workflows
|
||||
token
|
||||
last_workflow_timestamp
|
||||
agent_namespace
|
||||
agent_scope
|
||||
version
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CLUSTER_LENGTH = gql`
|
||||
query getClusters($project_id: String!) {
|
||||
getCluster(project_id: $project_id) {
|
||||
cluster_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CLUSTER_NAMES = gql`
|
||||
query getClusters($project_id: String!) {
|
||||
getCluster(project_id: $project_id) {
|
||||
cluster_name
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const ALL_USERS = gql`
|
||||
query allUsers {
|
||||
users {
|
||||
id
|
||||
name
|
||||
username
|
||||
email
|
||||
created_at
|
||||
deactivated_at
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const CORE_CHART_FIELDS = gql`
|
||||
fragment CoreChartFields on Chart {
|
||||
ApiVersion
|
||||
Kind
|
||||
Metadata {
|
||||
Name
|
||||
Version
|
||||
Annotations {
|
||||
Categories
|
||||
Vendor
|
||||
CreatedAt
|
||||
Repository
|
||||
Support
|
||||
ChartDescription
|
||||
}
|
||||
}
|
||||
Spec {
|
||||
DisplayName
|
||||
CategoryDescription
|
||||
Keywords
|
||||
Maturity
|
||||
Experiments
|
||||
Maintainers {
|
||||
Name
|
||||
Email
|
||||
}
|
||||
MinKubeVersion
|
||||
Provider
|
||||
Links {
|
||||
Name
|
||||
Url
|
||||
}
|
||||
ChaosExpCRDLink
|
||||
Platforms
|
||||
ChaosType
|
||||
}
|
||||
PackageInfo {
|
||||
PackageName
|
||||
Experiments {
|
||||
Name
|
||||
CSV
|
||||
Desc
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CHARTS_DATA = gql`
|
||||
${CORE_CHART_FIELDS}
|
||||
query getCharts($HubName: String!, $projectID: String!) {
|
||||
getCharts(HubName: $HubName, projectID: $projectID) {
|
||||
...CoreChartFields
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_EXPERIMENT_DATA = gql`
|
||||
${CORE_CHART_FIELDS}
|
||||
query getExperiment($data: ExperimentInput!) {
|
||||
getHubExperiment(experimentInput: $data) {
|
||||
...CoreChartFields
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_HUB_STATUS = gql`
|
||||
query getHubStatus($data: String!) {
|
||||
getHubStatus(projectID: $data) {
|
||||
id
|
||||
HubName
|
||||
RepoBranch
|
||||
RepoURL
|
||||
TotalExp
|
||||
IsAvailable
|
||||
AuthType
|
||||
IsPrivate
|
||||
Token
|
||||
UserName
|
||||
Password
|
||||
SSHPrivateKey
|
||||
SSHPublicKey
|
||||
LastSyncedAt
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_ENGINE_YAML = gql`
|
||||
query getEngineData($experimentInput: ExperimentInput!) {
|
||||
getYAMLData(experimentInput: $experimentInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_EXPERIMENT_YAML = gql`
|
||||
query getExperimentData($experimentInput: ExperimentInput!) {
|
||||
getYAMLData(experimentInput: $experimentInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_GITOPS_DATA = gql`
|
||||
query gitOPsData($data: String!) {
|
||||
getGitOpsDetails(project_id: $data) {
|
||||
Enabled
|
||||
ProjectID
|
||||
Branch
|
||||
RepoURL
|
||||
AuthType
|
||||
Token
|
||||
UserName
|
||||
Password
|
||||
SSHPrivateKey
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_MANIFEST_TEMPLATE = gql`
|
||||
query ListManifestTemplate($data: String!) {
|
||||
ListManifestTemplate(project_id: $data) {
|
||||
template_id
|
||||
manifest
|
||||
project_name
|
||||
template_description
|
||||
template_name
|
||||
isCustomWorkflow
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_DATASOURCE = gql`
|
||||
query listDataSource($projectID: String!) {
|
||||
ListDataSource(project_id: $projectID) {
|
||||
ds_id
|
||||
ds_name
|
||||
ds_type
|
||||
ds_url
|
||||
access_type
|
||||
auth_type
|
||||
basic_auth_username
|
||||
basic_auth_password
|
||||
scrape_interval
|
||||
query_timeout
|
||||
http_method
|
||||
project_id
|
||||
created_at
|
||||
updated_at
|
||||
health_status
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_DATASOURCE_OVERVIEW = gql`
|
||||
query listDataSource($projectID: String!) {
|
||||
ListDataSource(project_id: $projectID) {
|
||||
ds_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_PORTAL_DASHBOARDS = gql`
|
||||
query getPortalDashboards($projectID: String!, $hubName: String!) {
|
||||
PortalDashboardData(project_id: $projectID, hub_name: $hubName) {
|
||||
name
|
||||
dashboard_data
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_DASHBOARD = gql`
|
||||
query listDashboard($projectID: String!, $clusterID: String, $dbID: String) {
|
||||
ListDashboard(
|
||||
project_id: $projectID
|
||||
cluster_id: $clusterID
|
||||
db_id: $dbID
|
||||
) {
|
||||
db_id
|
||||
ds_id
|
||||
db_name
|
||||
cluster_name
|
||||
ds_name
|
||||
ds_type
|
||||
ds_url
|
||||
ds_health_status
|
||||
db_type_id
|
||||
db_type_name
|
||||
db_information
|
||||
chaos_event_query_template
|
||||
chaos_verdict_query_template
|
||||
application_metadata_map {
|
||||
namespace
|
||||
applications {
|
||||
kind
|
||||
names
|
||||
}
|
||||
}
|
||||
panel_groups {
|
||||
panels {
|
||||
panel_id
|
||||
created_at
|
||||
prom_queries {
|
||||
queryid
|
||||
prom_query_name
|
||||
legend
|
||||
resolution
|
||||
minstep
|
||||
line
|
||||
close_area
|
||||
}
|
||||
panel_options {
|
||||
points
|
||||
grids
|
||||
left_axis
|
||||
}
|
||||
panel_name
|
||||
y_axis_left
|
||||
y_axis_right
|
||||
x_axis_down
|
||||
unit
|
||||
}
|
||||
panel_group_name
|
||||
panel_group_id
|
||||
}
|
||||
end_time
|
||||
start_time
|
||||
refresh_rate
|
||||
project_id
|
||||
cluster_id
|
||||
viewed_at
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_DASHBOARD_OVERVIEW = gql`
|
||||
query listDashboard($projectID: String!, $clusterID: String, $dbID: String) {
|
||||
ListDashboard(
|
||||
project_id: $projectID
|
||||
cluster_id: $clusterID
|
||||
db_id: $dbID
|
||||
) {
|
||||
db_id
|
||||
db_name
|
||||
db_type_id
|
||||
db_type_name
|
||||
cluster_name
|
||||
cluster_id
|
||||
viewed_at
|
||||
db_information
|
||||
chaos_event_query_template
|
||||
chaos_verdict_query_template
|
||||
application_metadata_map {
|
||||
namespace
|
||||
applications {
|
||||
kind
|
||||
names
|
||||
}
|
||||
}
|
||||
panel_groups {
|
||||
panels {
|
||||
panel_id
|
||||
created_at
|
||||
prom_queries {
|
||||
queryid
|
||||
prom_query_name
|
||||
legend
|
||||
resolution
|
||||
minstep
|
||||
line
|
||||
close_area
|
||||
}
|
||||
panel_options {
|
||||
points
|
||||
grids
|
||||
left_axis
|
||||
}
|
||||
panel_name
|
||||
y_axis_left
|
||||
y_axis_right
|
||||
x_axis_down
|
||||
unit
|
||||
}
|
||||
panel_group_name
|
||||
panel_group_id
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const PROM_QUERY = gql`
|
||||
query PrometheusQuery($prometheusInput: promInput) {
|
||||
GetPromQuery(query: $prometheusInput) {
|
||||
metricsResponse {
|
||||
queryid
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
annotationsResponse {
|
||||
queryid
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const PROM_LABEL_VALUES = gql`
|
||||
query PrometheusLabelValues($prometheusInput: promSeriesInput) {
|
||||
GetPromLabelNamesAndValues(series: $prometheusInput) {
|
||||
series
|
||||
labelValues {
|
||||
label
|
||||
values {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const PROM_SERIES_LIST = gql`
|
||||
query PrometheusSeriesList($prometheusDSInput: dsDetails) {
|
||||
GetPromSeriesList(ds_details: $prometheusDSInput) {
|
||||
seriesList
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_TEMPLATE_BY_ID = gql`
|
||||
query GetManifestTemplate($projectID: String!, $data: String!) {
|
||||
GetTemplateManifestByID(projectID: $projectID, template_id: $data) {
|
||||
template_id
|
||||
template_name
|
||||
template_description
|
||||
manifest
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_PREDEFINED_WORKFLOW_LIST = gql`
|
||||
query GetPredefinedWorkflowList($hubname: String!, $projectid: String!) {
|
||||
GetPredefinedWorkflowList(HubName: $hubname, projectID: $projectid)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_PREDEFINED_EXPERIMENT_YAML = gql`
|
||||
query GetPredefinedExperimentYAML($experimentInput: ExperimentInput!) {
|
||||
GetPredefinedExperimentYAML(experimentInput: $experimentInput)
|
||||
}
|
||||
`;
|
||||
|
||||
export const LIST_IMAGE_REGISTRY = gql`
|
||||
query ListImageRegistry($data: String!) {
|
||||
ListImageRegistry(project_id: $data) {
|
||||
image_registry_info {
|
||||
enable_registry
|
||||
is_default
|
||||
}
|
||||
image_registry_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_IMAGE_REGISTRY = gql`
|
||||
query GetImageRegistry($registryid: String!, $projectid: String!) {
|
||||
GetImageRegistry(image_registry_id: $registryid, project_id: $projectid) {
|
||||
image_registry_info {
|
||||
is_default
|
||||
enable_registry
|
||||
secret_name
|
||||
secret_namespace
|
||||
image_registry_name
|
||||
image_repo_name
|
||||
image_registry_type
|
||||
}
|
||||
image_registry_id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_GLOBAL_STATS = gql`
|
||||
query getGlobalStats($query: UsageQuery!) {
|
||||
UsageQuery(query: $query) {
|
||||
TotalCount {
|
||||
Workflows {
|
||||
Runs
|
||||
ExpRuns
|
||||
Schedules
|
||||
}
|
||||
Agents {
|
||||
Ns
|
||||
Cluster
|
||||
Total
|
||||
}
|
||||
Projects
|
||||
Users
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GLOBAL_PROJECT_DATA = gql`
|
||||
query getStats($query: UsageQuery!) {
|
||||
UsageQuery(query: $query) {
|
||||
TotalCount {
|
||||
Projects
|
||||
}
|
||||
Projects {
|
||||
ProjectId
|
||||
Workflows {
|
||||
Schedules
|
||||
ExpRuns
|
||||
Runs
|
||||
}
|
||||
Agents {
|
||||
Total
|
||||
Ns
|
||||
Cluster
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// listHubStatus
|
||||
export const CORE_CHART_FIELDS = gql`
|
||||
fragment CoreChartFields on Chart {
|
||||
apiVersion
|
||||
kind
|
||||
metadata {
|
||||
name
|
||||
version
|
||||
annotations {
|
||||
categories
|
||||
vendor
|
||||
createdAt
|
||||
repository
|
||||
support
|
||||
chartDescription
|
||||
}
|
||||
}
|
||||
spec {
|
||||
displayName
|
||||
categoryDescription
|
||||
keywords
|
||||
maturity
|
||||
experiments
|
||||
maintainers {
|
||||
name
|
||||
email
|
||||
}
|
||||
minKubeVersion
|
||||
provider {
|
||||
name
|
||||
}
|
||||
links {
|
||||
name
|
||||
url
|
||||
}
|
||||
chaosExpCRDLink
|
||||
platforms
|
||||
chaosType
|
||||
}
|
||||
packageInfo {
|
||||
packageName
|
||||
experiments {
|
||||
name
|
||||
CSV
|
||||
desc
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CHARTS_DATA = gql`
|
||||
${CORE_CHART_FIELDS}
|
||||
query listCharts($hubName: String!, $projectID: String!) {
|
||||
listCharts(hubName: $hubName, projectID: $projectID) {
|
||||
...CoreChartFields
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_EXPERIMENT_DATA = gql`
|
||||
${CORE_CHART_FIELDS}
|
||||
query getHubExperiment($request: ExperimentRequest!) {
|
||||
getHubExperiment(request: $request) {
|
||||
...CoreChartFields
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_HUB_STATUS = gql`
|
||||
query listHubStatus($projectID: String!) {
|
||||
listHubStatus(projectID: $projectID) {
|
||||
id
|
||||
hubName
|
||||
repoBranch
|
||||
repoURL
|
||||
totalExp
|
||||
isAvailable
|
||||
authType
|
||||
isPrivate
|
||||
token
|
||||
userName
|
||||
password
|
||||
sshPrivateKey
|
||||
sshPublicKey
|
||||
lastSyncedAt
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_PREDEFINED_EXPERIMENT_YAML = gql`
|
||||
query getPredefinedExperimentYAML($request: ExperimentRequest!) {
|
||||
getPredefinedExperimentYAML(request: $request)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_ENGINE_YAML = gql`
|
||||
query getEngineData($request: ExperimentRequest!) {
|
||||
getYAMLData(request: $request)
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_EXPERIMENT_YAML = gql`
|
||||
query getYAMLData($request: ExperimentRequest!) {
|
||||
getYAMLData(request: $request)
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const GET_CLUSTER = gql`
|
||||
query listClusters($projectID: String!, $clusterType: String) {
|
||||
listClusters(projectID: $projectID, clusterType: $clusterType) {
|
||||
clusterID
|
||||
clusterName
|
||||
description
|
||||
isActive
|
||||
isRegistered
|
||||
isClusterConfirmed
|
||||
updatedAt
|
||||
createdAt
|
||||
clusterType
|
||||
noOfSchedules
|
||||
noOfWorkflows
|
||||
token
|
||||
lastWorkflowTimestamp
|
||||
agentNamespace
|
||||
agentScope
|
||||
version
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CLUSTER_LENGTH = gql`
|
||||
query listClusters($projectID: String!) {
|
||||
listClusters(projectID: $projectID) {
|
||||
clusterID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_CLUSTER_NAMES = gql`
|
||||
query listClusters($projectID: String!) {
|
||||
listClusters(projectID: $projectID) {
|
||||
clusterName
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// getGitOpsDetails
|
||||
export const GET_GITOPS_DATA = gql`
|
||||
query getGitOpsDetails($projectID: String!) {
|
||||
getGitOpsDetails(projectID: $projectID) {
|
||||
enabled
|
||||
projectID
|
||||
branch
|
||||
repoURL
|
||||
authType
|
||||
token
|
||||
userName
|
||||
password
|
||||
sshPrivateKey
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// GetImageRegistry
|
||||
export const LIST_IMAGE_REGISTRY_BY_PROJECT_ID = gql`
|
||||
query listImageRegistry($data: String!) {
|
||||
listImageRegistry(projectID: $data) {
|
||||
imageRegistryInfo {
|
||||
enableRegistry
|
||||
isDefault
|
||||
}
|
||||
imageRegistryID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getImageRegistry
|
||||
export const GET_IMAGE_REGISTRY = gql`
|
||||
query getImageRegistry($imageRegistryID: String!, $projectID: String!) {
|
||||
getImageRegistry(imageRegistryID: $imageRegistryID, projectID: $projectID) {
|
||||
imageRegistryInfo {
|
||||
isDefault
|
||||
enableRegistry
|
||||
secretName
|
||||
secretNamespace
|
||||
imageRegistryName
|
||||
imageRepoName
|
||||
imageRegistryType
|
||||
}
|
||||
imageRegistryID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
export * from './chaosHub';
|
||||
export * from './cluster';
|
||||
export * from './gitops';
|
||||
export * from './imageRegistry';
|
||||
export * from './manifest';
|
||||
export * from './observability';
|
||||
export * from './usage';
|
||||
export * from './workflows';
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// GetManifestTemplate
|
||||
export const GET_MANIFEST_TEMPLATE = gql`
|
||||
query listWorkflowManifests($projectID: String!) {
|
||||
listWorkflowManifests(projectID: $projectID) {
|
||||
templateID
|
||||
manifest
|
||||
projectName
|
||||
templateDescription
|
||||
templateName
|
||||
isCustomWorkflow
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_TEMPLATE_BY_ID = gql`
|
||||
query getWorkflowManifestByID($projectID: String!, $templateID: String!) {
|
||||
getWorkflowManifestByID(templateID: $templateID, projectID: $projectID) {
|
||||
templateID
|
||||
templateName
|
||||
templateDescription
|
||||
manifest
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// GetDataSource
|
||||
export const GET_DATASOURCE = gql`
|
||||
query listDataSource($projectID: String!) {
|
||||
listDataSource(projectID: $projectID) {
|
||||
dsID
|
||||
dsName
|
||||
dsType
|
||||
dsURL
|
||||
accessType
|
||||
authType
|
||||
basicAuthUsername
|
||||
basicAuthPassword
|
||||
scrapeInterval
|
||||
queryTimeout
|
||||
httpMethod
|
||||
projectID
|
||||
healthStatus
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_DATASOURCE_OVERVIEW = gql`
|
||||
query listDataSource($projectID: String!) {
|
||||
listDataSource(projectID: $projectID) {
|
||||
dsID
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// portalDashboardData
|
||||
export const GET_PORTAL_DASHBOARDS = gql`
|
||||
query listPortalDashboardData($projectID: String!, $hubName: String!) {
|
||||
listPortalDashboardData(projectID: $projectID, hubName: $hubName) {
|
||||
name
|
||||
dashboardData
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// listDashboard
|
||||
export const GET_DASHBOARD = gql`
|
||||
query listDashboard($projectID: String!, $clusterID: String, $dbID: String) {
|
||||
listDashboard(projectID: $projectID, clusterID: $clusterID, dbID: $dbID) {
|
||||
dbID
|
||||
dsID
|
||||
dbName
|
||||
clusterName
|
||||
dsName
|
||||
dsType
|
||||
dsURL
|
||||
dsHealthStatus
|
||||
dbTypeID
|
||||
dbTypeName
|
||||
dbInformation
|
||||
chaosEventQueryTemplate
|
||||
chaosVerdictQueryTemplate
|
||||
applicationMetadataMap {
|
||||
namespace
|
||||
applications {
|
||||
kind
|
||||
names
|
||||
}
|
||||
}
|
||||
panelGroups {
|
||||
panels {
|
||||
panelID
|
||||
createdAt
|
||||
promQueries {
|
||||
queryID
|
||||
promQueryName
|
||||
legend
|
||||
resolution
|
||||
minstep
|
||||
line
|
||||
closeArea
|
||||
}
|
||||
panelOptions {
|
||||
points
|
||||
grIDs
|
||||
leftAxis
|
||||
}
|
||||
panelName
|
||||
yAxisLeft
|
||||
yAxisRight
|
||||
xAxisDown
|
||||
unit
|
||||
}
|
||||
panelGroupName
|
||||
panelGroupID
|
||||
}
|
||||
endTime
|
||||
startTime
|
||||
refreshRate
|
||||
projectID
|
||||
clusterID
|
||||
viewedAt
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_DASHBOARD_OVERVIEW = gql`
|
||||
query listDashboard($projectID: String!, $clusterID: String, $dbID: String) {
|
||||
listDashboard(projectID: $projectID, clusterID: $clusterID, dbID: $dbID) {
|
||||
dbID
|
||||
dbName
|
||||
dbTypeID
|
||||
dbTypeName
|
||||
clusterName
|
||||
clusterID
|
||||
viewedAt
|
||||
dbInformation
|
||||
chaosEventQueryTemplate
|
||||
chaosVerdictQueryTemplate
|
||||
applicationMetadataMap {
|
||||
namespace
|
||||
applications {
|
||||
kind
|
||||
names
|
||||
}
|
||||
}
|
||||
panelGroups {
|
||||
panels {
|
||||
panelID
|
||||
createdAt
|
||||
promQueries {
|
||||
queryID
|
||||
promQueryName
|
||||
legend
|
||||
resolution
|
||||
minstep
|
||||
line
|
||||
closeArea
|
||||
}
|
||||
panelOptions {
|
||||
points
|
||||
grIDs
|
||||
leftAxis
|
||||
}
|
||||
panelName
|
||||
yAxisLeft
|
||||
yAxisRight
|
||||
xAxisDown
|
||||
unit
|
||||
}
|
||||
panelGroupName
|
||||
panelGroupID
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getPromQuery
|
||||
export const PROM_QUERY = gql`
|
||||
query PrometheusQuery($request: PrometheusDataRequest!) {
|
||||
getPrometheusData(request: $request) {
|
||||
metricsResponse {
|
||||
queryID
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
annotationsResponse {
|
||||
queryID
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getPromLabelNamesAndValues
|
||||
export const PROM_LABEL_VALUES = gql`
|
||||
query PrometheusLabelValues($request: PromSeriesInput) {
|
||||
getPromLabelNamesAndValues(request: $request) {
|
||||
series
|
||||
labelValues {
|
||||
label
|
||||
values {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getPromSeriesList
|
||||
export const PROM_SERIES_LIST = gql`
|
||||
query getPromSeriesList($request: DsDetails) {
|
||||
getPromSeriesList(request: $request) {
|
||||
seriesList
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// usageQuery
|
||||
export const GET_GLOBAL_STATS = gql`
|
||||
query getGlobalStats($request: UsageDataRequest!) {
|
||||
getUsageData(request: $request) {
|
||||
totalCount {
|
||||
projects
|
||||
users
|
||||
agents {
|
||||
ns
|
||||
cluster
|
||||
total
|
||||
}
|
||||
workflows {
|
||||
schedules
|
||||
runs
|
||||
expRuns
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// projectId -> projectID needs to be updated in backend
|
||||
export const GLOBAL_PROJECT_DATA = gql`
|
||||
query getStats($request: UsageDataRequest!) {
|
||||
getUsageData(request: $request) {
|
||||
totalCount {
|
||||
projects
|
||||
agents {
|
||||
ns
|
||||
total
|
||||
cluster
|
||||
active
|
||||
}
|
||||
workflows {
|
||||
schedules
|
||||
runs
|
||||
expRuns
|
||||
}
|
||||
}
|
||||
projects {
|
||||
projectID
|
||||
workflows {
|
||||
schedules
|
||||
runs
|
||||
expRuns
|
||||
}
|
||||
agents {
|
||||
ns
|
||||
cluster
|
||||
total
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
// GetWorkflowRuns
|
||||
export const WORKFLOW_DETAILS_WITH_EXEC_DATA = gql`
|
||||
query listWorkflowRuns($request: ListWorkflowRunsRequest!) {
|
||||
listWorkflowRuns(request: $request) {
|
||||
totalNoOfWorkflowRuns
|
||||
workflowRuns {
|
||||
workflowID
|
||||
workflowName
|
||||
workflowRunID
|
||||
clusterName
|
||||
lastUpdated
|
||||
clusterID
|
||||
phase
|
||||
executionData
|
||||
resiliencyScore
|
||||
isRemoved
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_DETAILS = gql`
|
||||
query listWorkflowRuns($request: ListWorkflowRunsRequest!) {
|
||||
listWorkflowRuns(request: $request) {
|
||||
totalNoOfWorkflowRuns
|
||||
workflowRuns {
|
||||
workflowRunID
|
||||
workflowID
|
||||
clusterName
|
||||
lastUpdated
|
||||
projectID
|
||||
clusterID
|
||||
workflowName
|
||||
clusterType
|
||||
phase
|
||||
resiliencyScore
|
||||
experimentsPassed
|
||||
experimentsFailed
|
||||
experimentsAwaited
|
||||
experimentsStopped
|
||||
experimentsNa
|
||||
totalExperiments
|
||||
isRemoved
|
||||
executedBy
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_RUN_DETAILS = gql`
|
||||
query listWorkflowRuns($request: ListWorkflowRunsRequest!) {
|
||||
listWorkflowRuns(request: $request) {
|
||||
totalNoOfWorkflowRuns
|
||||
workflowRuns {
|
||||
weightages {
|
||||
experimentName
|
||||
weightage
|
||||
}
|
||||
workflowID
|
||||
workflowName
|
||||
workflowRunID
|
||||
clusterName
|
||||
executionData
|
||||
lastUpdated
|
||||
phase
|
||||
resiliencyScore
|
||||
experimentsPassed
|
||||
totalExperiments
|
||||
isRemoved
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getWorkflowStats
|
||||
export const WORKFLOW_STATS = gql`
|
||||
query listWorkflowStats(
|
||||
$projectID: ID!
|
||||
$filter: TimeFrequency!
|
||||
$showWorkflowRuns: Boolean!
|
||||
) {
|
||||
listWorkflowStats(
|
||||
projectID: $projectID
|
||||
filter: $filter
|
||||
showWorkflowRuns: $showWorkflowRuns
|
||||
) {
|
||||
date
|
||||
value
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// ListWorkflow
|
||||
export const GET_WORKFLOW_DETAILS = gql`
|
||||
query listWorkflows($request: ListWorkflowsRequest!) {
|
||||
listWorkflows(request: $request) {
|
||||
totalNoOfWorkflows
|
||||
workflows {
|
||||
workflowID
|
||||
workflowManifest
|
||||
cronSyntax
|
||||
clusterName
|
||||
workflowName
|
||||
workflowDescription
|
||||
weightages {
|
||||
experimentName
|
||||
weightage
|
||||
}
|
||||
isCustomWorkflow
|
||||
updatedAt
|
||||
createdAt
|
||||
projectID
|
||||
clusterID
|
||||
clusterType
|
||||
isRemoved
|
||||
lastUpdatedBy
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getWorkflowRunStats
|
||||
export const GET_WORKFLOW_RUNS_STATS = gql`
|
||||
query getWorkflowRunStats(
|
||||
$workflowRunStatsRequest: WorkflowRunStatsRequest!
|
||||
) {
|
||||
getWorkflowRunStats(workflowRunStatsRequest: $workflowRunStatsRequest) {
|
||||
totalWorkflowRuns
|
||||
succeededWorkflowRuns
|
||||
failedWorkflowRuns
|
||||
runningWorkflowRuns
|
||||
workflowRunSucceededPercentage
|
||||
workflowRunFailedPercentage
|
||||
averageResiliencyScore
|
||||
passedPercentage
|
||||
failedPercentage
|
||||
totalExperiments
|
||||
experimentsPassed
|
||||
experimentsFailed
|
||||
experimentsAwaited
|
||||
experimentsStopped
|
||||
experimentsNa
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// getPredefinedWorkflowList
|
||||
export const GET_PREDEFINED_WORKFLOW_LIST = gql`
|
||||
query listPredefinedWorkflows($hubName: String!, $projectID: String!) {
|
||||
listPredefinedWorkflows(hubName: $hubName, projectID: $projectID)
|
||||
}
|
||||
`;
|
||||
|
|
@ -1,73 +1,73 @@
|
|||
import { gql } from '@apollo/client';
|
||||
|
||||
export const WORKFLOW_EVENTS_WITH_EXEC_DATA = gql`
|
||||
subscription workflowEvents($projectID: String!) {
|
||||
workflowEventListener(project_id: $projectID) {
|
||||
workflow_id
|
||||
workflow_name
|
||||
workflow_run_id
|
||||
cluster_name
|
||||
last_updated
|
||||
cluster_id
|
||||
subscription getWorkflowEvents($projectID: String!) {
|
||||
getWorkflowEvents(projectID: $projectID) {
|
||||
workflowID
|
||||
workflowName
|
||||
workflowRunID
|
||||
clusterName
|
||||
lastUpdated
|
||||
clusterID
|
||||
phase
|
||||
execution_data
|
||||
resiliency_score
|
||||
executionData
|
||||
resiliencyScore
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_EVENTS = gql`
|
||||
subscription workflowEvents($projectID: String!) {
|
||||
workflowEventListener(project_id: $projectID) {
|
||||
workflow_id
|
||||
workflow_name
|
||||
workflow_run_id
|
||||
cluster_name
|
||||
last_updated
|
||||
subscription getWorkflowEvents($projectID: String!) {
|
||||
getWorkflowEvents(projectID: $projectID) {
|
||||
workflowID
|
||||
workflowName
|
||||
workflowRunID
|
||||
clusterName
|
||||
lastUpdated
|
||||
phase
|
||||
resiliency_score
|
||||
experiments_passed
|
||||
total_experiments
|
||||
resiliencyScore
|
||||
experimentsPassed
|
||||
totalExperiments
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const WORKFLOW_LOGS = gql`
|
||||
subscription podLog($podDetails: PodLogRequest!) {
|
||||
getPodLog(podDetails: $podDetails) {
|
||||
subscription podLog($request: PodLogRequest!) {
|
||||
getPodLog(request: $request) {
|
||||
log
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const KUBE_OBJ = gql`
|
||||
subscription getKubeObject($data: KubeObjectRequest!) {
|
||||
getKubeObject(kubeObjectRequest: $data) {
|
||||
cluster_id
|
||||
kube_obj
|
||||
subscription getKubeObject($request: KubeObjectRequest!) {
|
||||
getKubeObject(request: $request) {
|
||||
clusterID
|
||||
kubeObj
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const VIEW_DASHBOARD = gql`
|
||||
subscription viewDashboard(
|
||||
$dbID: String
|
||||
$prometheusQueries: [promQueryInput!]!
|
||||
$queryMap: [queryMapForPanelGroup!]!
|
||||
$dataVarMap: dataVars!
|
||||
$dashboardID: String
|
||||
$promQueries: [PromQueryInput!]!
|
||||
$dashboardQueryMap: [QueryMapForPanelGroup!]!
|
||||
$dataVariables: DataVars!
|
||||
) {
|
||||
viewDashboard(
|
||||
dashboardID: $dbID
|
||||
promQueries: $prometheusQueries
|
||||
dashboardQueryMap: $queryMap
|
||||
dataVariables: $dataVarMap
|
||||
dashboardID: $dashboardID
|
||||
promQueries: $promQueries
|
||||
dashboardQueryMap: $dashboardQueryMap
|
||||
dataVariables: $dataVariables
|
||||
) {
|
||||
dashboardMetricsResponse {
|
||||
panelGroupID
|
||||
panelGroupMetricsResponse {
|
||||
panelID
|
||||
PanelMetricsResponse {
|
||||
queryid
|
||||
panelMetricsResponse {
|
||||
queryID
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
|
|
@ -77,7 +77,7 @@ export const VIEW_DASHBOARD = gql`
|
|||
}
|
||||
}
|
||||
annotationsResponse {
|
||||
queryid
|
||||
queryID
|
||||
legends
|
||||
tsvs {
|
||||
date
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
import { BrushPostitionProps, GraphMetric } from 'litmus-ui';
|
||||
import {
|
||||
ApplicationMetadata,
|
||||
ListDashboardResponse,
|
||||
GetDashboardResponse,
|
||||
Panel,
|
||||
PanelGroup,
|
||||
PanelGroupResponse,
|
||||
PanelOption,
|
||||
PanelResponse,
|
||||
PromQuery,
|
||||
updatePanelGroupInput,
|
||||
UpdatePanelGroupRequest,
|
||||
} from './graphql/dashboardsDetails';
|
||||
import { promQueryInput } from './graphql/prometheus';
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ export interface DashboardDetails {
|
|||
agentID?: string;
|
||||
information?: string;
|
||||
panelGroups?: PanelGroupDetails[];
|
||||
panelGroupMap?: updatePanelGroupInput[];
|
||||
panelGroupMap?: UpdatePanelGroupRequest[];
|
||||
selectedPanelGroupMap?: PanelGroupMap[];
|
||||
applicationMetadataMap?: ApplicationMetadata[];
|
||||
selectedPanels?: PanelDetails[];
|
||||
|
|
@ -165,8 +165,8 @@ export interface SelectedDashboardInformation {
|
|||
chaosEventQueryTemplate: string;
|
||||
chaosVerdictQueryTemplate: string;
|
||||
applicationMetadataMap: ApplicationMetadata[];
|
||||
dashboardListForAgent: ListDashboardResponse[];
|
||||
metaData: ListDashboardResponse | undefined;
|
||||
dashboardListForAgent: GetDashboardResponse[];
|
||||
metaData: GetDashboardResponse | undefined;
|
||||
closedAreaQueryIDs: string[];
|
||||
dashboardKey: string;
|
||||
panelNameAndIDList: PanelNameAndID[];
|
||||
|
|
@ -187,9 +187,9 @@ export interface PromQueryDetails extends PromQuery {
|
|||
}
|
||||
|
||||
export interface PanelDetails extends Panel {
|
||||
ds_url?: string;
|
||||
panel_group_name?: string;
|
||||
prom_queries: PromQueryDetails[];
|
||||
dsURL?: string;
|
||||
panelGroupName?: string;
|
||||
promQueries: PromQueryDetails[];
|
||||
}
|
||||
|
||||
export interface PanelGroupDetails extends PanelGroup {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
export interface SSHKey {
|
||||
privateKey: string;
|
||||
publicKey: string;
|
||||
}
|
||||
|
||||
export interface SSHKeys {
|
||||
generaterSSHKey: SSHKey;
|
||||
}
|
||||
|
||||
export interface MyHubRequest {
|
||||
id?: string;
|
||||
hubName: string;
|
||||
repoURL: string;
|
||||
repoBranch: string;
|
||||
isPrivate: Boolean;
|
||||
authType: MyHubType;
|
||||
token?: string;
|
||||
userName?: string;
|
||||
password?: string;
|
||||
sshPrivateKey?: string;
|
||||
sshPublicKey?: string;
|
||||
projectID: string;
|
||||
}
|
||||
|
||||
export interface MyHubData {
|
||||
id: string;
|
||||
repoURL: string;
|
||||
repoBranch: string;
|
||||
projectID: string;
|
||||
hubName: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface CreateMyHub {
|
||||
request: MyHubRequest;
|
||||
}
|
||||
|
||||
export enum MyHubType {
|
||||
BASIC = 'BASIC',
|
||||
TOKEN = 'TOKEN',
|
||||
SSH = 'SSH',
|
||||
NONE = 'NONE',
|
||||
}
|
||||
|
|
@ -1,62 +1,52 @@
|
|||
export interface Cluster {
|
||||
cluster_id: string;
|
||||
project_id: string;
|
||||
cluster_name: string;
|
||||
clusterID: string;
|
||||
projectID: string;
|
||||
clusterName: string;
|
||||
description: string;
|
||||
platform_name: string;
|
||||
access_key: string;
|
||||
is_registered: boolean;
|
||||
is_cluster_confirmed: boolean;
|
||||
is_active: boolean;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
cluster_type: string;
|
||||
no_of_workflows: number;
|
||||
no_of_schedules: number;
|
||||
platformName: string;
|
||||
accessKey: string;
|
||||
isRegistered: boolean;
|
||||
isClusterConfirmed: boolean;
|
||||
isActive: boolean;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
clusterType: string;
|
||||
noOfWorkflows: number;
|
||||
noOfSchedules: number;
|
||||
token: string;
|
||||
agent_namespace: string;
|
||||
serviceaccount: string;
|
||||
agent_scope: string;
|
||||
agent_ns_exists: boolean;
|
||||
agent_sa_exists: boolean;
|
||||
last_workflow_timestamp: string;
|
||||
agentNamespace: string;
|
||||
serviceAccount: string;
|
||||
agentScope: string;
|
||||
agentNSExists: boolean;
|
||||
agentSAExists: boolean;
|
||||
lastWorkflowTimestamp: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
export interface Clusters {
|
||||
getCluster: Cluster[];
|
||||
listClusters: Cluster[];
|
||||
}
|
||||
|
||||
export interface CreateClusterInput {
|
||||
ClusterInput: {
|
||||
cluster_name: string;
|
||||
export interface CreateClusterRequest {
|
||||
request: {
|
||||
clusterName: string;
|
||||
description: string;
|
||||
platform_name: string;
|
||||
project_id: string;
|
||||
cluster_type: string;
|
||||
agent_namespace: string;
|
||||
serviceaccount: string;
|
||||
agent_scope: string;
|
||||
agent_ns_exists: boolean;
|
||||
agent_sa_exists: boolean;
|
||||
platformName: string;
|
||||
projectID: string;
|
||||
clusterType: string;
|
||||
agentNamespace: string;
|
||||
serviceAccount: string;
|
||||
agentScope: string;
|
||||
agentNSExists: boolean;
|
||||
agentSAExists: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface clusterRegResponse {
|
||||
token: string;
|
||||
cluster_id: string;
|
||||
cluster_name: string;
|
||||
}
|
||||
|
||||
export interface CreateClusterInputResponse {
|
||||
userClusterReg: clusterRegResponse;
|
||||
}
|
||||
|
||||
export interface ClusterVars {
|
||||
project_id: string;
|
||||
export interface ClusterRequest {
|
||||
projectID: string;
|
||||
}
|
||||
|
||||
export interface DeleteClusters {
|
||||
projectID: string;
|
||||
cluster_ids: string;
|
||||
clusterIDs: string;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,32 +1,33 @@
|
|||
export interface WeightMap {
|
||||
experiment_name: string;
|
||||
experimentName: string;
|
||||
weightage: number;
|
||||
}
|
||||
export interface CreateWorkFlowInput {
|
||||
ChaosWorkFlowInput: {
|
||||
workflow_id?: string;
|
||||
workflow_manifest: string;
|
||||
|
||||
export interface CreateWorkFlowRequest {
|
||||
request: {
|
||||
workflowID?: string;
|
||||
workflowManifest: string;
|
||||
cronSyntax: string;
|
||||
workflow_name: string;
|
||||
workflow_description: string;
|
||||
workflowName: string;
|
||||
workflowDescription: string;
|
||||
isCustomWorkflow: boolean;
|
||||
weightages: WeightMap[];
|
||||
project_id: string;
|
||||
cluster_id: string;
|
||||
projectID: string;
|
||||
clusterID: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface UpdateWorkflowResponse {
|
||||
workflow_id: string;
|
||||
workflow_name: string;
|
||||
workflow_description: string;
|
||||
workflowID: string;
|
||||
workflowName: string;
|
||||
workflowDescription: string;
|
||||
isCustomWorkflow: string;
|
||||
cronSyntax: string;
|
||||
}
|
||||
|
||||
export interface CreateWorkflowResponse {
|
||||
cluster_id: string;
|
||||
is_active: boolean;
|
||||
clusterID: string;
|
||||
isActive: boolean;
|
||||
}
|
||||
|
||||
export interface GVRRequest {
|
||||
|
|
@ -36,28 +37,28 @@ export interface GVRRequest {
|
|||
}
|
||||
|
||||
export interface KubeObjRequest {
|
||||
data: {
|
||||
cluster_id: string;
|
||||
object_type: string;
|
||||
kube_obj_request: GVRRequest;
|
||||
request: {
|
||||
clusterID: string;
|
||||
objectType: string;
|
||||
kubeObjRequest: GVRRequest;
|
||||
};
|
||||
}
|
||||
|
||||
export interface KubeObjResponse {
|
||||
getKubeObject: {
|
||||
cluster_id: string;
|
||||
kube_obj: string;
|
||||
clusterID: string;
|
||||
kubeObj: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface KubeObjResource {
|
||||
api_version: string;
|
||||
apiVersion: string;
|
||||
containers: object;
|
||||
creation_timestamp: string;
|
||||
creationTimestamp: string;
|
||||
labels: string;
|
||||
name: string;
|
||||
namespace: string;
|
||||
termination_grace_periods: string;
|
||||
terminationGracePeriods: string;
|
||||
uid: string;
|
||||
volumes: object;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,54 +1,54 @@
|
|||
export interface PanelOption {
|
||||
points: boolean;
|
||||
grids: boolean;
|
||||
left_axis: boolean;
|
||||
grIDs: boolean;
|
||||
leftAxis: boolean;
|
||||
}
|
||||
|
||||
export interface PromQuery {
|
||||
queryid: string;
|
||||
prom_query_name: string;
|
||||
queryID: string;
|
||||
promQueryName: string;
|
||||
legend: string;
|
||||
resolution: string;
|
||||
minstep: string;
|
||||
line: boolean;
|
||||
close_area: boolean;
|
||||
closeArea: boolean;
|
||||
}
|
||||
|
||||
export interface Panel {
|
||||
panel_id?: string;
|
||||
created_at?: string;
|
||||
panel_group_id?: string;
|
||||
prom_queries: PromQuery[];
|
||||
panel_options: PanelOption;
|
||||
panel_name: string;
|
||||
y_axis_left: string;
|
||||
y_axis_right: string;
|
||||
x_axis_down: string;
|
||||
panelID?: string;
|
||||
createdAt?: string;
|
||||
panelGroupID?: string;
|
||||
promQueries: PromQuery[];
|
||||
panelOptions: PanelOption;
|
||||
panelName: string;
|
||||
yAxisLeft: string;
|
||||
yAxisRight: string;
|
||||
xAxisDown: string;
|
||||
unit: string;
|
||||
}
|
||||
|
||||
export interface PanelGroup {
|
||||
panel_group_id?: string;
|
||||
panel_group_name: string;
|
||||
panelGroupID?: string;
|
||||
panelGroupName: string;
|
||||
panels: Panel[];
|
||||
}
|
||||
|
||||
export interface PanelResponse {
|
||||
panel_id: string;
|
||||
created_at: string;
|
||||
prom_queries: PromQuery[];
|
||||
panel_options: PanelOption;
|
||||
panel_name: string;
|
||||
y_axis_left: string;
|
||||
y_axis_right: string;
|
||||
x_axis_down: string;
|
||||
panelID: string;
|
||||
createdAt: string;
|
||||
promQueries: PromQuery[];
|
||||
panelOptions: PanelOption;
|
||||
panelName: string;
|
||||
yAxisLeft: string;
|
||||
yAxisRight: string;
|
||||
xAxisDown: string;
|
||||
unit: string;
|
||||
}
|
||||
|
||||
export interface PanelGroupResponse {
|
||||
panels: PanelResponse[];
|
||||
panel_group_name: string;
|
||||
panel_group_id: string;
|
||||
panelGroupName: string;
|
||||
panelGroupID: string;
|
||||
}
|
||||
|
||||
export interface Resource {
|
||||
|
|
@ -61,73 +61,73 @@ export interface ApplicationMetadata {
|
|||
applications: Resource[];
|
||||
}
|
||||
|
||||
export interface CreateDashboardInput {
|
||||
createDBInput: {
|
||||
ds_id: string;
|
||||
db_name: string;
|
||||
db_type_id: string;
|
||||
db_type_name: string;
|
||||
db_information: string;
|
||||
chaos_event_query_template: string;
|
||||
chaos_verdict_query_template: string;
|
||||
application_metadata_map: ApplicationMetadata[];
|
||||
panel_groups: PanelGroup[];
|
||||
end_time: string;
|
||||
start_time: string;
|
||||
project_id: string;
|
||||
cluster_id: string;
|
||||
refresh_rate: string;
|
||||
export interface CreateDashboardRequest {
|
||||
request: {
|
||||
dsID: string;
|
||||
dbName: string;
|
||||
dbTypeID: string;
|
||||
dbTypeName: string;
|
||||
dbInformation: string;
|
||||
chaosEventQueryTemplate: string;
|
||||
chaosVerdictQueryTemplate: string;
|
||||
applicationMetadataMap: ApplicationMetadata[];
|
||||
panelGroups: PanelGroup[];
|
||||
endTime: string;
|
||||
startTime: string;
|
||||
projectID: string;
|
||||
clusterID: string;
|
||||
refreshRate: string;
|
||||
};
|
||||
createDashBoard?: ListDashboardResponse;
|
||||
createDashBoard?: GetDashboardResponse;
|
||||
}
|
||||
|
||||
export interface updatePanelGroupInput {
|
||||
panel_group_name: string;
|
||||
panel_group_id: string;
|
||||
export interface UpdatePanelGroupRequest {
|
||||
panelGroupID: string;
|
||||
panelGroupName: string;
|
||||
panels: Panel[];
|
||||
}
|
||||
|
||||
export interface UpdateDashboardInput {
|
||||
updateDBInput: {
|
||||
db_id: string;
|
||||
ds_id?: string;
|
||||
db_name?: string;
|
||||
db_type_id?: string;
|
||||
db_type_name?: string;
|
||||
db_information?: string;
|
||||
chaos_event_query_template?: string;
|
||||
chaos_verdict_query_template?: string;
|
||||
application_metadata_map?: ApplicationMetadata[];
|
||||
end_time?: string;
|
||||
start_time?: string;
|
||||
cluster_id?: string;
|
||||
refresh_rate?: string;
|
||||
panel_groups?: updatePanelGroupInput[];
|
||||
export interface UpdateDashboardRequest {
|
||||
request: {
|
||||
dbID: string;
|
||||
dsID?: string;
|
||||
dbName?: string;
|
||||
dbTypeID?: string;
|
||||
dbTypeName?: string;
|
||||
dbInformation?: string;
|
||||
chaosEventQueryTemplate?: string;
|
||||
chaosVerdictQueryTemplate?: string;
|
||||
applicationMetadataMap?: ApplicationMetadata[];
|
||||
endTime?: string;
|
||||
startTime?: string;
|
||||
clusterID?: string;
|
||||
refreshRate?: string;
|
||||
panelGroups?: UpdatePanelGroupRequest[];
|
||||
};
|
||||
chaosQueryUpdate: boolean;
|
||||
}
|
||||
|
||||
export interface DeleteDashboardInput {
|
||||
export interface DeleteDashboardRequest {
|
||||
projectID: string;
|
||||
dbID: string;
|
||||
}
|
||||
|
||||
export interface UpdatePanelInput {
|
||||
panelInput: Panel[];
|
||||
export interface UpdatePanelRequest {
|
||||
request: Panel[];
|
||||
}
|
||||
|
||||
export interface PortalDashboardsVars {
|
||||
export interface PortalDashboardsRequest {
|
||||
projectID: string;
|
||||
hubName: string;
|
||||
}
|
||||
|
||||
export interface PortalDashboardsResponse {
|
||||
name: string;
|
||||
dashboard_data: string;
|
||||
dashboardData: string;
|
||||
}
|
||||
|
||||
export interface PortalDashboardList {
|
||||
PortalDashboardData: PortalDashboardsResponse[];
|
||||
export interface GetPortalDashboard {
|
||||
listPortalDashboardData: PortalDashboardsResponse[];
|
||||
}
|
||||
|
||||
export interface ResourceResponse {
|
||||
|
|
@ -140,39 +140,39 @@ export interface ApplicationMetadataResponse {
|
|||
applications: ResourceResponse[];
|
||||
}
|
||||
|
||||
export interface ListDashboardResponse {
|
||||
db_id: string;
|
||||
ds_id: string;
|
||||
db_name: string;
|
||||
db_type: string;
|
||||
cluster_name: string;
|
||||
ds_name: string;
|
||||
ds_type: string;
|
||||
ds_url: string;
|
||||
ds_health_status: string;
|
||||
db_type_id: string;
|
||||
db_type_name: string;
|
||||
db_information: string;
|
||||
chaos_event_query_template: string;
|
||||
chaos_verdict_query_template: string;
|
||||
application_metadata_map: ApplicationMetadataResponse[];
|
||||
panel_groups: PanelGroupResponse[];
|
||||
end_time: string;
|
||||
start_time: string;
|
||||
refresh_rate: string;
|
||||
project_id: string;
|
||||
cluster_id: string;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
viewed_at: string;
|
||||
export interface GetDashboardResponse {
|
||||
dbID: string;
|
||||
dsID: string;
|
||||
dbName: string;
|
||||
dbType: string;
|
||||
clusterName: string;
|
||||
dsName: string;
|
||||
dsType: string;
|
||||
dsURL: string;
|
||||
dsHealthStatus: string;
|
||||
dbTypeID: string;
|
||||
dbTypeName: string;
|
||||
dbInformation: string;
|
||||
chaosEventQueryTemplate: string;
|
||||
chaosVerdictQueryTemplate: string;
|
||||
applicationMetadataMap: ApplicationMetadataResponse[];
|
||||
panelGroups: PanelGroupResponse[];
|
||||
endTime: string;
|
||||
startTime: string;
|
||||
refreshRate: string;
|
||||
projectID: string;
|
||||
clusterID: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
viewedAt: string;
|
||||
}
|
||||
|
||||
export interface ListDashboardVars {
|
||||
export interface GetDashboardRequest {
|
||||
projectID: string;
|
||||
clusterID?: string;
|
||||
dbID?: string;
|
||||
}
|
||||
|
||||
export interface DashboardList {
|
||||
ListDashboard: ListDashboardResponse[];
|
||||
export interface GetDashboard {
|
||||
listDashboard: GetDashboardResponse[];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,41 +1,41 @@
|
|||
export interface CreateDataSourceInput {
|
||||
DSInput: {
|
||||
ds_id?: string;
|
||||
ds_name: string;
|
||||
ds_type: string;
|
||||
ds_url: string;
|
||||
access_type: string;
|
||||
auth_type: string;
|
||||
basic_auth_username?: string;
|
||||
basic_auth_password?: string;
|
||||
scrape_interval: number;
|
||||
query_timeout: number;
|
||||
http_method: string;
|
||||
project_id?: string;
|
||||
dsID?: string;
|
||||
dsName: string;
|
||||
dsType: string;
|
||||
dsURL: string;
|
||||
accessType: string;
|
||||
authType: string;
|
||||
basicAuthUsername?: string;
|
||||
basicAuthPassword?: string;
|
||||
scrapeInterval: number;
|
||||
queryTimeout: number;
|
||||
httpMethod: string;
|
||||
projectID?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ListDataSourceResponse {
|
||||
ds_id: string;
|
||||
ds_name: string;
|
||||
ds_type: string;
|
||||
ds_url: string;
|
||||
access_type: string;
|
||||
auth_type: string;
|
||||
basic_auth_username: string;
|
||||
basic_auth_password: string;
|
||||
scrape_interval: number;
|
||||
query_timeout: number;
|
||||
http_method: string;
|
||||
project_id: string;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
health_status: string;
|
||||
dsID: string;
|
||||
dsName: string;
|
||||
dsType: string;
|
||||
dsURL: string;
|
||||
accessType: string;
|
||||
authType: string;
|
||||
basicAuthUsername: string;
|
||||
basicAuthPassword: string;
|
||||
scrapeInterval: number;
|
||||
queryTimeout: number;
|
||||
httpMethod: string;
|
||||
projectID: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
healthStatus: string;
|
||||
}
|
||||
|
||||
export interface deleteDSInput {
|
||||
force_delete: boolean;
|
||||
ds_id: string;
|
||||
forceDelete: boolean;
|
||||
dsID: string;
|
||||
}
|
||||
|
||||
export interface DeleteDataSourceInput {
|
||||
|
|
@ -47,5 +47,5 @@ export interface ListDataSourceVars {
|
|||
}
|
||||
|
||||
export interface DataSourceList {
|
||||
ListDataSource: ListDataSourceResponse[];
|
||||
listDataSource: ListDataSourceResponse[];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
export interface GitOpsData {
|
||||
Enabled: boolean;
|
||||
ProjectID: string | null;
|
||||
Branch: string | null;
|
||||
RepoURL: string | null;
|
||||
AuthType: string | null;
|
||||
Token: string | null;
|
||||
UserName: string | null;
|
||||
Password: string | null;
|
||||
SSHPrivateKey: string | null;
|
||||
enabled: boolean;
|
||||
projectID: string | null;
|
||||
branch: string | null;
|
||||
repoURL: string | null;
|
||||
authType: string | null;
|
||||
token: string | null;
|
||||
userName: string | null;
|
||||
password: string | null;
|
||||
sshPrivateKey: string | null;
|
||||
}
|
||||
|
||||
export interface GitOpsDetail {
|
||||
export interface GetGitOpsDetailRequest {
|
||||
getGitOpsDetails: GitOpsData;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
export interface ImageRegistryInfo {
|
||||
isDefault: boolean;
|
||||
imageRegistryName: string;
|
||||
imageRepoName: string;
|
||||
imageRegistryType: string;
|
||||
secretName: string;
|
||||
secretNamespace: string;
|
||||
enableRegistry: boolean;
|
||||
}
|
||||
|
||||
export interface ImageRegistry {
|
||||
isDefualt: boolean;
|
||||
imageRegistryInfo: ImageRegistryInfo;
|
||||
imageRegistryID: string;
|
||||
projectID: string;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
isRemoved: boolean;
|
||||
}
|
||||
|
||||
export interface CreateImageRegistryResponse {
|
||||
createImageRegistry: ImageRegistry;
|
||||
}
|
||||
|
||||
export interface GetImageRegistryResponse {
|
||||
getImageRegistry: ImageRegistry;
|
||||
}
|
||||
|
||||
export interface ListImageRegistryResponse {
|
||||
listImageRegistry: ImageRegistry[];
|
||||
}
|
||||
|
||||
export interface UpdateImageRegistryResponse {
|
||||
updateImageRegistry: ImageRegistry;
|
||||
}
|
||||
|
|
@ -1,31 +1,16 @@
|
|||
export interface MemberInvitation {
|
||||
member: {
|
||||
project_id: string;
|
||||
user_id: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface MemberInviteNew {
|
||||
member: {
|
||||
project_id: string;
|
||||
user_id: string;
|
||||
role: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface UserInvite {
|
||||
_id: string;
|
||||
name: string;
|
||||
username: string;
|
||||
email: string;
|
||||
created_at: string;
|
||||
deactivated_at: string;
|
||||
createdAt: string;
|
||||
deactivatedAt: string;
|
||||
}
|
||||
|
||||
// Invitation status for users
|
||||
export enum InvitationStatus {
|
||||
accepted = 'Accepted',
|
||||
pending = 'Pending',
|
||||
declined = 'Declined',
|
||||
exited = 'Exited',
|
||||
ACCEPTED = 'ACCEPTED',
|
||||
PENDING = 'PENDING',
|
||||
DECLINED = 'DECLINED',
|
||||
EXITED = 'EXITED',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,21 @@
|
|||
export interface PodLogRequest {
|
||||
cluster_id: string;
|
||||
workflow_run_id: string;
|
||||
pod_name: string;
|
||||
pod_namespace: string;
|
||||
pod_type: string;
|
||||
exp_pod?: string;
|
||||
runner_pod?: string;
|
||||
chaos_namespace?: string;
|
||||
}
|
||||
|
||||
export interface PodLogResponse {
|
||||
workflow_run_id: string;
|
||||
pod_name: string;
|
||||
pod_type: string;
|
||||
workflowRunID: string;
|
||||
podName: string;
|
||||
podType: string;
|
||||
log: string;
|
||||
}
|
||||
|
||||
export interface PodLogVars {
|
||||
podDetails: PodLogRequest;
|
||||
export interface PodLogRequest {
|
||||
request: {
|
||||
clusterID: string;
|
||||
workflowRunID: string;
|
||||
podName: string;
|
||||
podNamespace: string;
|
||||
podType: string;
|
||||
expPod?: string;
|
||||
runnerPod?: string;
|
||||
chaosNamespace?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface PodLog {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
export interface promQueryInput {
|
||||
queryid: string;
|
||||
queryID: string;
|
||||
query: string;
|
||||
legend?: string;
|
||||
resolution?: string;
|
||||
|
|
@ -7,7 +7,7 @@ export interface promQueryInput {
|
|||
}
|
||||
|
||||
export interface promInput {
|
||||
ds_details: dsDetails;
|
||||
dsDetails: dsDetails;
|
||||
queries?: promQueryInput[];
|
||||
}
|
||||
|
||||
|
|
@ -46,16 +46,16 @@ export interface promResponse {
|
|||
}
|
||||
|
||||
export interface PrometheusQueryVars {
|
||||
prometheusInput: promInput;
|
||||
request: promInput;
|
||||
}
|
||||
|
||||
export interface PrometheusResponse {
|
||||
GetPromQuery: promResponse;
|
||||
getPrometheusData: promResponse;
|
||||
}
|
||||
|
||||
export interface promSeriesInput {
|
||||
series: string;
|
||||
ds_details: dsDetails;
|
||||
dsDetails: dsDetails;
|
||||
}
|
||||
|
||||
export interface Option {
|
||||
|
|
@ -71,11 +71,11 @@ export interface promSeriesResponse {
|
|||
}
|
||||
|
||||
export interface PrometheusSeriesQueryVars {
|
||||
prometheusInput: promSeriesInput;
|
||||
request: promSeriesInput;
|
||||
}
|
||||
|
||||
export interface PrometheusSeriesResponse {
|
||||
GetPromLabelNamesAndValues: promSeriesResponse;
|
||||
getPromLabelNamesAndValues: promSeriesResponse;
|
||||
}
|
||||
|
||||
export interface dsDetails {
|
||||
|
|
@ -89,19 +89,19 @@ export interface promSeriesListResponse {
|
|||
}
|
||||
|
||||
export interface PrometheusSeriesListQueryVars {
|
||||
prometheusDSInput: dsDetails;
|
||||
request: dsDetails;
|
||||
}
|
||||
|
||||
export interface PrometheusSeriesListResponse {
|
||||
GetPromSeriesList: promSeriesListResponse;
|
||||
getPromSeriesList: promSeriesListResponse;
|
||||
}
|
||||
|
||||
export interface dataVars {
|
||||
url: string;
|
||||
start: string;
|
||||
end: string;
|
||||
relative_time: number;
|
||||
refresh_interval: number;
|
||||
relativeTime: number;
|
||||
refreshInterval: number;
|
||||
}
|
||||
|
||||
export interface queryMapForPanel {
|
||||
|
|
@ -115,10 +115,10 @@ export interface queryMapForPanelGroup {
|
|||
}
|
||||
|
||||
export interface ViewDashboardInput {
|
||||
dbID?: string;
|
||||
prometheusQueries: promQueryInput[];
|
||||
queryMap: queryMapForPanelGroup[];
|
||||
dataVarMap: dataVars;
|
||||
dashboardID?: string;
|
||||
promQueries: promQueryInput[];
|
||||
dashboardQueryMap: queryMapForPanelGroup[];
|
||||
dataVariables: dataVars;
|
||||
}
|
||||
|
||||
export interface metricDataForPanel {
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
export interface Weights {
|
||||
experiment_name: string;
|
||||
experimentName: string;
|
||||
weightage: number;
|
||||
}
|
||||
|
||||
export interface ScheduleWorkflow {
|
||||
cluster_id: string;
|
||||
created_at: string;
|
||||
clusterID: string;
|
||||
createdAt: string;
|
||||
cronSyntax: string;
|
||||
isCustomWorkflow: string;
|
||||
project_id: string;
|
||||
updated_at: string;
|
||||
projectID: string;
|
||||
updatedAt: string;
|
||||
weightages: Weights[];
|
||||
workflow_description: string;
|
||||
workflow_id: string;
|
||||
workflow_manifest: string;
|
||||
workflow_name: string;
|
||||
cluster_name: string;
|
||||
cluster_type: string;
|
||||
workflowDescription: string;
|
||||
workflowID: string;
|
||||
workflowManifest: string;
|
||||
workflowName: string;
|
||||
clusterName: string;
|
||||
clusterType: string;
|
||||
regularity?: string;
|
||||
isRemoved: boolean;
|
||||
last_updated_by: string;
|
||||
lastUpdatedBy: string;
|
||||
}
|
||||
export interface DeleteSchedule {
|
||||
workflow_id: string;
|
||||
workflowID: string;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,38 @@
|
|||
export interface ProjectData {
|
||||
ProjectId: string;
|
||||
Workflows: {
|
||||
Schedules: number;
|
||||
ExpRuns: number;
|
||||
Runs: number;
|
||||
projectID: string;
|
||||
workflows: {
|
||||
schedules: number;
|
||||
expRuns: number;
|
||||
runs: number;
|
||||
};
|
||||
Agents: {
|
||||
Total: number;
|
||||
Ns: number;
|
||||
Cluster: number;
|
||||
agents: {
|
||||
total: number;
|
||||
ns: number;
|
||||
cluster: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface AgentStat {
|
||||
ns: number;
|
||||
cluster: number;
|
||||
total: number;
|
||||
active: number;
|
||||
}
|
||||
|
||||
export interface WorkflowStat {
|
||||
schedules: number;
|
||||
runs: number;
|
||||
expRuns: number;
|
||||
}
|
||||
export interface UsageData {
|
||||
TotalCount: {
|
||||
Projects: number;
|
||||
totalCount: {
|
||||
projects: number;
|
||||
agents: AgentStat;
|
||||
workflows: WorkflowStat;
|
||||
};
|
||||
Projects: ProjectData[];
|
||||
projects: ProjectData[];
|
||||
}
|
||||
|
||||
export interface UsageStats {
|
||||
UsageQuery: UsageData;
|
||||
export interface UsageStatsResponse {
|
||||
getUsageData: UsageData;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export interface Project {
|
|||
}
|
||||
|
||||
export interface Owner {
|
||||
UserId: string;
|
||||
UserID: string;
|
||||
Username: string;
|
||||
}
|
||||
|
||||
|
|
@ -32,37 +32,29 @@ export interface MemberData {
|
|||
|
||||
export interface ProjectStats {
|
||||
Name: string;
|
||||
ProjectId: string;
|
||||
ProjectID: string;
|
||||
Members: MemberData;
|
||||
}
|
||||
|
||||
export interface UserDetails {
|
||||
username: string;
|
||||
projects: Project[];
|
||||
name: string;
|
||||
email: string;
|
||||
id: string;
|
||||
company_name: string;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
removed_at: string;
|
||||
is_email_verified: string;
|
||||
role: string;
|
||||
Username: string;
|
||||
Projects: Project[];
|
||||
Name: string;
|
||||
Email: string;
|
||||
Id: string;
|
||||
CompanyName: string;
|
||||
UpdatedAt: string;
|
||||
CreatedAt: string;
|
||||
RemovedAt: string;
|
||||
IsEmailVerified: string;
|
||||
Role: string;
|
||||
}
|
||||
|
||||
export interface MyHubDetail {
|
||||
id: string;
|
||||
HubName: string;
|
||||
RepoBranch: string;
|
||||
RepoURL: string;
|
||||
}
|
||||
|
||||
export interface CurrentUserDetails {
|
||||
getUser: UserDetails;
|
||||
}
|
||||
|
||||
export interface CurrentUserDedtailsVars {
|
||||
username: string;
|
||||
hubName: string;
|
||||
repoBranch: string;
|
||||
repoURL: string;
|
||||
}
|
||||
|
||||
export interface CreateUserData {
|
||||
|
|
@ -86,83 +78,29 @@ export interface UserData {
|
|||
username: string;
|
||||
email: string;
|
||||
name: string;
|
||||
logged_in: boolean;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
deactivated_at: string;
|
||||
}
|
||||
|
||||
export interface UpdateUserStateInput {
|
||||
uid: string;
|
||||
isDeactivate: boolean;
|
||||
}
|
||||
|
||||
export interface SSHKey {
|
||||
privateKey: string;
|
||||
publicKey: string;
|
||||
}
|
||||
|
||||
export interface SSHKeys {
|
||||
generaterSSHKey: SSHKey;
|
||||
}
|
||||
|
||||
export interface MyHubInput {
|
||||
id?: string;
|
||||
HubName: string;
|
||||
RepoURL: string;
|
||||
RepoBranch: string;
|
||||
IsPrivate: Boolean;
|
||||
AuthType: MyHubType;
|
||||
Token?: string;
|
||||
UserName?: string;
|
||||
Password?: string;
|
||||
SSHPrivateKey?: string;
|
||||
SSHPublicKey?: string;
|
||||
}
|
||||
|
||||
export interface MyHubData {
|
||||
id: string;
|
||||
RepoURL: string;
|
||||
RepoBranch: string;
|
||||
ProjectID: string;
|
||||
HubName: string;
|
||||
CreatedAt: string;
|
||||
UpdatedAt: string;
|
||||
}
|
||||
|
||||
export interface CreateMyHub {
|
||||
MyHubDetails: MyHubInput;
|
||||
projectID: string;
|
||||
}
|
||||
|
||||
export enum MyHubType {
|
||||
basic = 'basic',
|
||||
token = 'token',
|
||||
ssh = 'ssh',
|
||||
none = 'none',
|
||||
loggedIn: boolean;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
deactivatedAt: string;
|
||||
}
|
||||
|
||||
export interface Projects {
|
||||
listProjects: Project[];
|
||||
getProjects: Project[];
|
||||
}
|
||||
|
||||
export interface ProjectDetail {
|
||||
getProject: Project;
|
||||
}
|
||||
|
||||
export interface ProjectDetailVars {
|
||||
projectID: string;
|
||||
}
|
||||
|
||||
export enum Role {
|
||||
viewer = 'Viewer',
|
||||
editor = 'Editor',
|
||||
owner = 'Owner',
|
||||
VIEWER = 'Viewer',
|
||||
EDITOR = 'Editor',
|
||||
OWNER = 'Owner',
|
||||
}
|
||||
|
||||
export enum UserRole {
|
||||
admin = 'admin',
|
||||
user = 'user',
|
||||
ADMIN = 'admin',
|
||||
USER = 'user',
|
||||
}
|
||||
|
||||
export enum InvitationStatus {
|
||||
|
|
@ -171,7 +109,7 @@ export enum InvitationStatus {
|
|||
}
|
||||
|
||||
export enum UserStatus {
|
||||
DELETED = 'deleted',
|
||||
ACTIVE = 'active',
|
||||
INACTIVE = 'inactive',
|
||||
DELETED = 'DELETED',
|
||||
ACTIVE = 'ACTIVE',
|
||||
INACTIVE = 'INACTIVE',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,10 +32,10 @@ export interface Nodes {
|
|||
}
|
||||
|
||||
export interface ExecutionData {
|
||||
resiliency_score?: number;
|
||||
experiments_passed?: number;
|
||||
total_experiments?: number;
|
||||
event_type: string;
|
||||
resiliencyScore?: number;
|
||||
experimentsPassed?: number;
|
||||
totalExperiments?: number;
|
||||
eventType: string;
|
||||
uid: string;
|
||||
namespace: string;
|
||||
name: string;
|
||||
|
|
@ -47,47 +47,47 @@ export interface ExecutionData {
|
|||
}
|
||||
|
||||
export interface WeightageMap {
|
||||
experiment_name: string;
|
||||
experimentName: string;
|
||||
weightage: number;
|
||||
}
|
||||
|
||||
export interface WorkflowRun {
|
||||
workflow_run_id: string;
|
||||
workflow_id: string;
|
||||
cluster_name: string;
|
||||
workflowRunID: string;
|
||||
workflowID: string;
|
||||
clusterName: string;
|
||||
weightages: WeightageMap[];
|
||||
last_updated: string;
|
||||
project_id: string;
|
||||
cluster_id: string;
|
||||
workflow_name: string;
|
||||
cluster_type: String;
|
||||
lastUpdated: string;
|
||||
projectID: string;
|
||||
clusterID: string;
|
||||
workflowName: string;
|
||||
clusterType: String;
|
||||
phase: string;
|
||||
resiliency_score: number;
|
||||
experiments_passed: number;
|
||||
experiments_failed: number;
|
||||
experiments_awaited: number;
|
||||
experiments_stopped: number;
|
||||
experiments_na: number;
|
||||
total_experiments: number;
|
||||
execution_data: string;
|
||||
executed_by: string;
|
||||
resiliencyScore: number;
|
||||
experimentsPassed: number;
|
||||
experimentsFailed: number;
|
||||
experimentsAwaited: number;
|
||||
experimentsStopped: number;
|
||||
experimentsNa: number;
|
||||
totalExperiments: number;
|
||||
executionData: string;
|
||||
executedBy: string;
|
||||
isRemoved: boolean;
|
||||
}
|
||||
|
||||
interface GetWorkflowRunsOutput {
|
||||
total_no_of_workflow_runs: number;
|
||||
workflow_runs: WorkflowRun[];
|
||||
interface GetWorkflowRunsResponse {
|
||||
totalNoOfWorkflowRuns: number;
|
||||
workflowRuns: WorkflowRun[];
|
||||
}
|
||||
|
||||
export interface Workflow {
|
||||
getWorkflowRuns: GetWorkflowRunsOutput;
|
||||
listWorkflowRuns: GetWorkflowRunsResponse;
|
||||
}
|
||||
|
||||
export interface WorkflowSubscription {
|
||||
workflowEventListener: WorkflowRun;
|
||||
getWorkflowEvents: WorkflowRun;
|
||||
}
|
||||
|
||||
export interface WorkflowSubscriptionInput {
|
||||
export interface WorkflowSubscriptionRequest {
|
||||
projectID: string;
|
||||
}
|
||||
|
||||
|
|
@ -98,15 +98,15 @@ export interface Pagination {
|
|||
}
|
||||
|
||||
// Sort
|
||||
export interface SortInput {
|
||||
field: 'Name' | 'Time';
|
||||
export interface SortRequest {
|
||||
field: 'NAME' | 'TIME';
|
||||
descending?: boolean;
|
||||
}
|
||||
|
||||
// Filter
|
||||
interface DateRange {
|
||||
start_date: string;
|
||||
end_date?: string;
|
||||
startDate: string;
|
||||
endDate?: string;
|
||||
}
|
||||
|
||||
export type WorkflowStatus =
|
||||
|
|
@ -117,34 +117,34 @@ export type WorkflowStatus =
|
|||
| 'Terminated'
|
||||
| undefined;
|
||||
|
||||
export interface WorkflowRunFilterInput {
|
||||
workflow_name?: string;
|
||||
cluster_name?: string;
|
||||
workflow_status?: WorkflowStatus;
|
||||
date_range?: DateRange;
|
||||
export interface WorkflowRunFilterRequest {
|
||||
workflowName?: string;
|
||||
clusterName?: string;
|
||||
workflowStatus?: WorkflowStatus;
|
||||
dateRange?: DateRange;
|
||||
isRemoved?: boolean | null;
|
||||
}
|
||||
|
||||
export interface WorkflowDataVars {
|
||||
workflowRunsInput: {
|
||||
project_id: string;
|
||||
workflow_run_ids?: string[];
|
||||
workflow_ids?: string[];
|
||||
export interface WorkflowDataRequest {
|
||||
request: {
|
||||
projectID: string;
|
||||
workflowRunIDs?: string[];
|
||||
workflowIDs?: string[];
|
||||
pagination?: Pagination;
|
||||
sort?: SortInput;
|
||||
filter?: WorkflowRunFilterInput;
|
||||
sort?: SortRequest;
|
||||
filter?: WorkflowRunFilterRequest;
|
||||
};
|
||||
}
|
||||
|
||||
export interface HeatmapDataVars {
|
||||
project_id: string;
|
||||
workflow_id: string;
|
||||
export interface HeatmapDataRequest {
|
||||
projectID: string;
|
||||
workflowID: string;
|
||||
year: number;
|
||||
}
|
||||
|
||||
export interface WorkflowRunDetails {
|
||||
no_of_runs: number;
|
||||
date_stamp: number;
|
||||
noOfRuns: number;
|
||||
dateStamp: number;
|
||||
}
|
||||
export interface HeatMapData {
|
||||
value: number;
|
||||
|
|
@ -152,32 +152,32 @@ export interface HeatMapData {
|
|||
}
|
||||
|
||||
export interface HeatmapDataResponse {
|
||||
getHeatmapData: WeekData[];
|
||||
listHeatmapData: WeekData[];
|
||||
}
|
||||
|
||||
export interface WorkflowRunStatsResponse {
|
||||
getWorkflowRunStats: {
|
||||
total_workflow_runs: number;
|
||||
succeeded_workflow_runs: number;
|
||||
failed_workflow_runs: number;
|
||||
running_workflow_runs: number;
|
||||
workflow_run_succeeded_percentage: number;
|
||||
workflow_run_failed_percentage: number;
|
||||
average_resiliency_score: number;
|
||||
passed_percentage: number;
|
||||
failed_percentage: number;
|
||||
total_experiments: number;
|
||||
experiments_passed: number;
|
||||
experiments_failed: number;
|
||||
experiments_awaited: number;
|
||||
experiments_stopped: number;
|
||||
experiments_na: number;
|
||||
totalWorkflowRuns: number;
|
||||
succeededWorkflowRuns: number;
|
||||
failedWorkflowRuns: number;
|
||||
runningWorkflowRuns: number;
|
||||
workflowRunSucceededPercentage: number;
|
||||
workflowRunFailedPercentage: number;
|
||||
averageResiliencyScore: number;
|
||||
passedPercentage: number;
|
||||
failedPercentage: number;
|
||||
totalExperiments: number;
|
||||
experimentsPassed: number;
|
||||
experimentsFailed: number;
|
||||
experimentsAwaited: number;
|
||||
experimentsStopped: number;
|
||||
experimentsNa: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface WorkflowRunStatsRequest {
|
||||
workflowRunStatsRequest: {
|
||||
project_id: string;
|
||||
workflow_ids?: string[];
|
||||
projectID: string;
|
||||
workflowIDs?: string[];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
export interface WeightageMap {
|
||||
experiment_name: string;
|
||||
experimentName: string;
|
||||
weightage: number;
|
||||
}
|
||||
|
||||
|
|
@ -33,8 +33,8 @@ export interface Nodes {
|
|||
}
|
||||
|
||||
export interface ExecutionData {
|
||||
resiliency_score?: number;
|
||||
event_type: string;
|
||||
resiliencyScore?: number;
|
||||
eventType: string;
|
||||
uid: string;
|
||||
namespace: string;
|
||||
name: string;
|
||||
|
|
@ -46,44 +46,44 @@ export interface ExecutionData {
|
|||
}
|
||||
|
||||
export interface WorkflowRun {
|
||||
execution_data: string;
|
||||
last_updated: string;
|
||||
workflow_run_id: string;
|
||||
executionData: string;
|
||||
lastUpdated: string;
|
||||
workflowRunID: string;
|
||||
}
|
||||
|
||||
export interface ScheduledWorkflow {
|
||||
workflow_id: string;
|
||||
workflow_manifest: string;
|
||||
workflowID: string;
|
||||
workflowManifest: string;
|
||||
cronSyntax: string;
|
||||
cluster_name: string;
|
||||
workflow_name: string;
|
||||
workflow_description: string;
|
||||
clusterName: string;
|
||||
workflowName: string;
|
||||
workflowDescription: string;
|
||||
weightages: WeightageMap[];
|
||||
isCustomWorkflow: string;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
project_id: string;
|
||||
cluster_id: string;
|
||||
cluster_type: string;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
projectID: string;
|
||||
clusterID: string;
|
||||
clusterType: string;
|
||||
isRemoved: Boolean;
|
||||
last_updated_by: string;
|
||||
lastUpdatedBy: string;
|
||||
}
|
||||
|
||||
export interface WorkflowList {
|
||||
ListWorkflow: ScheduledWorkflow[];
|
||||
export interface GetWorkflow {
|
||||
getWorkflow: ScheduledWorkflow[];
|
||||
}
|
||||
|
||||
export interface WorkflowListDataVars {
|
||||
export interface GetWorkflowDataRequest {
|
||||
projectID: string;
|
||||
workflowIDs: string[];
|
||||
}
|
||||
|
||||
export interface ListManifestTemplateArray {
|
||||
template_id: string;
|
||||
export interface GetManifestTemplateArray {
|
||||
templateID: string;
|
||||
manifest: string;
|
||||
project_name: string;
|
||||
template_description: string;
|
||||
template_name: string;
|
||||
projectName: string;
|
||||
templateDescription: string;
|
||||
templateName: string;
|
||||
isCustomWorkflow: boolean;
|
||||
}
|
||||
|
||||
|
|
@ -92,34 +92,35 @@ export interface Pagination {
|
|||
limit: number;
|
||||
}
|
||||
|
||||
export interface ListManifestTemplate {
|
||||
ListManifestTemplate: ListManifestTemplateArray[];
|
||||
export interface GetManifestTemplate {
|
||||
listWorkflowManifests: GetManifestTemplateArray[];
|
||||
}
|
||||
|
||||
export interface SortInput {
|
||||
field: 'Name' | 'Time';
|
||||
export interface SortRequest {
|
||||
field: 'NAME' | 'TIME';
|
||||
descending?: Boolean;
|
||||
}
|
||||
|
||||
export interface WorkflowFilterInput {
|
||||
workflow_name?: string;
|
||||
cluster_name?: string;
|
||||
export interface WorkflowFilterRequest {
|
||||
workflowName?: string;
|
||||
clusterName?: string;
|
||||
}
|
||||
export interface ListWorkflowsInput {
|
||||
workflowInput: {
|
||||
project_id: string;
|
||||
workflow_ids?: string[];
|
||||
|
||||
export interface GetWorkflowsRequest {
|
||||
request: {
|
||||
projectID: string;
|
||||
workflowIDs?: string[];
|
||||
pagination?: Pagination;
|
||||
sort?: SortInput;
|
||||
filter?: WorkflowFilterInput;
|
||||
sort?: SortRequest;
|
||||
filter?: WorkflowFilterRequest;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ListWorkflowsOutput {
|
||||
total_no_of_workflows: number;
|
||||
export interface GetWorkflowsResponse {
|
||||
totalNoOfWorkflows: number;
|
||||
workflows: ScheduledWorkflow[];
|
||||
}
|
||||
|
||||
export interface ScheduledWorkflows {
|
||||
ListWorkflow: ListWorkflowsOutput;
|
||||
listWorkflows: GetWorkflowsResponse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@ export type DateValue = {
|
|||
};
|
||||
|
||||
export enum Filter {
|
||||
Monthly = 'Monthly',
|
||||
Daily = 'Daily',
|
||||
Hourly = 'Hourly',
|
||||
MONTHLY = 'MONTHLY',
|
||||
DAILY = 'DAILY',
|
||||
HOURLY = 'HOURLY',
|
||||
}
|
||||
|
||||
export interface WorkflowStatsResponse {
|
||||
getWorkflowStats: Array<DateValue>;
|
||||
listWorkflowStats: Array<DateValue>;
|
||||
}
|
||||
|
||||
export interface WorkflowStatsVars {
|
||||
filter: Filter;
|
||||
project_id: string;
|
||||
show_workflow_runs: boolean;
|
||||
projectID: string;
|
||||
showWorkflowRuns: boolean;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ interface Panel {
|
|||
panel_name: string;
|
||||
panel_options: {
|
||||
points: boolean;
|
||||
grids: boolean;
|
||||
grIDs: boolean;
|
||||
left_axis: boolean;
|
||||
};
|
||||
y_axis_left: string;
|
||||
|
|
|
|||
|
|
@ -1,73 +1,75 @@
|
|||
import { MyHubType } from '../graphql/user';
|
||||
import { MyHubType } from '../graphql/chaoshub';
|
||||
|
||||
export interface Chart {
|
||||
ApiVersion: string;
|
||||
Kind: string;
|
||||
Metadata: Metadata;
|
||||
Spec: Spec;
|
||||
PackageInfo: PackageInfo;
|
||||
apiVersion: string;
|
||||
kind: string;
|
||||
metadata: Metadata;
|
||||
spec: Spec;
|
||||
packageInfo: PackageInfo;
|
||||
}
|
||||
|
||||
export interface Spec {
|
||||
DisplayName: string;
|
||||
CategoryDescription: string;
|
||||
Keywords: string[];
|
||||
Maturity: string;
|
||||
Maintainers: Maintainer[];
|
||||
MinKubeVersion: string;
|
||||
Provider: string;
|
||||
Links: Link[];
|
||||
Experiments: string[];
|
||||
ChaosExpCRDLink: string;
|
||||
Platforms: string[];
|
||||
ChaosType: string;
|
||||
displayName: string;
|
||||
categoryDescription: string;
|
||||
keywords: string[];
|
||||
maturity: string;
|
||||
maintainers: Maintainer[];
|
||||
minKubeVersion: string;
|
||||
provider: {
|
||||
name: string;
|
||||
};
|
||||
links: Link[];
|
||||
experiments: string[];
|
||||
chaosExpCRDLink: string;
|
||||
platforms: string[];
|
||||
chaosType: string;
|
||||
}
|
||||
|
||||
export interface Maintainer {
|
||||
Name: string;
|
||||
Email: string;
|
||||
name: string;
|
||||
email: string;
|
||||
}
|
||||
|
||||
export interface Link {
|
||||
Name: string;
|
||||
Url: string;
|
||||
name: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface Metadata {
|
||||
Name: string;
|
||||
Version: string;
|
||||
Annotations: Annotation[];
|
||||
name: string;
|
||||
version: string;
|
||||
annotations: Annotation[];
|
||||
}
|
||||
|
||||
export interface Annotation {
|
||||
Categories: string;
|
||||
Vendor: string;
|
||||
CreatedAt: string;
|
||||
Repository: string;
|
||||
Support: string;
|
||||
ChartDescription: string;
|
||||
categories: string;
|
||||
vendor: string;
|
||||
createdAt: string;
|
||||
repository: string;
|
||||
support: string;
|
||||
chartDescription: string;
|
||||
}
|
||||
|
||||
export interface PackageInfo {
|
||||
PackageName: string;
|
||||
Experiments: Experiments[];
|
||||
packageName: string;
|
||||
experiments: Experiments[];
|
||||
}
|
||||
|
||||
export interface Experiments {
|
||||
Name: string;
|
||||
Csv: string;
|
||||
Desc: string;
|
||||
name: string;
|
||||
CSV: string;
|
||||
desc: string;
|
||||
}
|
||||
|
||||
export interface ChartsInput {
|
||||
HubName: string;
|
||||
UserName: string;
|
||||
RepoURL: string;
|
||||
RepoBranch: string;
|
||||
hubName: string;
|
||||
userName: string;
|
||||
repoURL: string;
|
||||
repoBranch: string;
|
||||
}
|
||||
|
||||
export interface Charts {
|
||||
getCharts: Chart[];
|
||||
listCharts: Chart[];
|
||||
}
|
||||
|
||||
export interface ExperimentDetail {
|
||||
|
|
@ -76,23 +78,23 @@ export interface ExperimentDetail {
|
|||
|
||||
export interface HubDetails {
|
||||
id: string;
|
||||
HubName: string;
|
||||
RepoURL: string;
|
||||
RepoBranch: string;
|
||||
TotalExp: string;
|
||||
IsAvailable: boolean;
|
||||
AuthType?: MyHubType;
|
||||
IsPrivate: boolean;
|
||||
Token: string;
|
||||
UserName: string;
|
||||
Password: string;
|
||||
SSHPrivateKey: string;
|
||||
SSHPublicKey: string;
|
||||
LastSyncedAt: string;
|
||||
hubName: string;
|
||||
repoURL: string;
|
||||
repoBranch: string;
|
||||
totalExp: string;
|
||||
isAvailable: boolean;
|
||||
authType?: MyHubType;
|
||||
isPrivate: boolean;
|
||||
token: string;
|
||||
userName: string;
|
||||
password: string;
|
||||
sshPrivateKey: string;
|
||||
sshPublicKey: string;
|
||||
lastSyncedAt: string;
|
||||
}
|
||||
|
||||
export interface HubStatus {
|
||||
getHubStatus: HubDetails[];
|
||||
listHubStatus: HubDetails[];
|
||||
}
|
||||
|
||||
export enum MyHubActions {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Node } from '../graphql/workflowData';
|
||||
|
||||
export interface SelectedNode extends Node {
|
||||
pod_name: string;
|
||||
podName: string;
|
||||
}
|
||||
|
||||
export enum NodeSelectionActions {
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ export interface customWorkflow {
|
|||
export interface WorkflowData {
|
||||
chaosEngineChanged: boolean;
|
||||
namespace: string;
|
||||
workflow_id?: string;
|
||||
clusterid: string;
|
||||
clustername: string;
|
||||
workflowID?: string;
|
||||
clusterID: string;
|
||||
clusterName: string;
|
||||
cronSyntax: string;
|
||||
scheduleType: scheduleType;
|
||||
scheduleInput: scheduleInput;
|
||||
|
|
|
|||
|
|
@ -23,12 +23,12 @@ import {
|
|||
} from '../../../graphql/mutations';
|
||||
import { GET_HUB_STATUS } from '../../../graphql/queries';
|
||||
import {
|
||||
CreateMyHub,
|
||||
MyHubData,
|
||||
MyHubType,
|
||||
SSHKey,
|
||||
MyHubData,
|
||||
CreateMyHub,
|
||||
SSHKeys,
|
||||
} from '../../../models/graphql/user';
|
||||
MyHubType,
|
||||
} from '../../../models/graphql/chaoshub';
|
||||
import { HubStatus } from '../../../models/redux/myhub';
|
||||
import { getProjectID } from '../../../utils/getSearchParams';
|
||||
import {
|
||||
|
|
@ -90,11 +90,11 @@ const MyHubConnectDrawer: React.FC<MyHubConnectDrawerProps> = ({
|
|||
});
|
||||
|
||||
const { data } = useQuery<HubStatus>(GET_HUB_STATUS, {
|
||||
variables: { data: projectID },
|
||||
variables: { projectID },
|
||||
fetchPolicy: 'network-only',
|
||||
});
|
||||
const hubData = data?.getHubStatus.filter(
|
||||
(hubs) => hubs.HubName === hubName
|
||||
const hubData = data?.listHubStatus.filter(
|
||||
(hubs) => hubs.hubName === hubName
|
||||
)[0];
|
||||
|
||||
/**
|
||||
|
|
@ -169,28 +169,28 @@ const MyHubConnectDrawer: React.FC<MyHubConnectDrawerProps> = ({
|
|||
if (hubName?.length) {
|
||||
updateMyHub({
|
||||
variables: {
|
||||
MyHubDetails: {
|
||||
request: {
|
||||
id: hubData?.id,
|
||||
HubName: gitHub.HubName.trim(),
|
||||
RepoURL: gitHub.GitURL,
|
||||
RepoBranch: gitHub.GitBranch,
|
||||
IsPrivate: isToggled.isPublicToggled
|
||||
hubName: gitHub.HubName.trim(),
|
||||
repoURL: gitHub.GitURL,
|
||||
repoBranch: gitHub.GitBranch,
|
||||
isPrivate: isToggled.isPublicToggled
|
||||
? false
|
||||
: !!isToggled.isPrivateToggled,
|
||||
AuthType: isToggled.isPublicToggled
|
||||
? MyHubType.basic
|
||||
authType: isToggled.isPublicToggled
|
||||
? MyHubType.BASIC
|
||||
: privateHub === 'token'
|
||||
? MyHubType.token
|
||||
? MyHubType.TOKEN
|
||||
: privateHub === 'ssh'
|
||||
? MyHubType.ssh
|
||||
: MyHubType.basic,
|
||||
Token: accessToken,
|
||||
UserName: 'user',
|
||||
Password: 'user',
|
||||
SSHPrivateKey: sshKey.privateKey,
|
||||
SSHPublicKey: sshKey.publicKey,
|
||||
? MyHubType.SSH
|
||||
: MyHubType.BASIC,
|
||||
token: accessToken,
|
||||
userName: 'user',
|
||||
password: 'user',
|
||||
sshPrivateKey: sshKey.privateKey,
|
||||
sshPublicKey: sshKey.publicKey,
|
||||
projectID,
|
||||
},
|
||||
projectID,
|
||||
},
|
||||
});
|
||||
} else
|
||||
|
|
@ -199,27 +199,27 @@ const MyHubConnectDrawer: React.FC<MyHubConnectDrawerProps> = ({
|
|||
*/
|
||||
addMyHub({
|
||||
variables: {
|
||||
MyHubDetails: {
|
||||
HubName: gitHub.HubName.trim(),
|
||||
RepoURL: gitHub.GitURL,
|
||||
RepoBranch: gitHub.GitBranch,
|
||||
IsPrivate: isToggled.isPublicToggled
|
||||
request: {
|
||||
hubName: gitHub.HubName.trim(),
|
||||
repoURL: gitHub.GitURL,
|
||||
repoBranch: gitHub.GitBranch,
|
||||
isPrivate: isToggled.isPublicToggled
|
||||
? false
|
||||
: !!isToggled.isPrivateToggled,
|
||||
AuthType: isToggled.isPublicToggled
|
||||
? MyHubType.basic
|
||||
authType: isToggled.isPublicToggled
|
||||
? MyHubType.BASIC
|
||||
: privateHub === 'token'
|
||||
? MyHubType.token
|
||||
? MyHubType.TOKEN
|
||||
: privateHub === 'ssh'
|
||||
? MyHubType.ssh
|
||||
: MyHubType.basic,
|
||||
Token: accessToken,
|
||||
UserName: 'user',
|
||||
Password: 'user',
|
||||
SSHPrivateKey: sshKey.privateKey,
|
||||
SSHPublicKey: sshKey.publicKey,
|
||||
? MyHubType.SSH
|
||||
: MyHubType.BASIC,
|
||||
token: accessToken,
|
||||
userName: 'user',
|
||||
password: 'user',
|
||||
sshPrivateKey: sshKey.privateKey,
|
||||
sshPublicKey: sshKey.publicKey,
|
||||
projectID,
|
||||
},
|
||||
projectID,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
@ -267,11 +267,11 @@ const MyHubConnectDrawer: React.FC<MyHubConnectDrawerProps> = ({
|
|||
if (hubName?.length) {
|
||||
if (hubData !== undefined) {
|
||||
setGitHub({
|
||||
HubName: hubData.HubName,
|
||||
GitURL: hubData.RepoURL,
|
||||
GitBranch: hubData.RepoBranch,
|
||||
HubName: hubData.hubName,
|
||||
GitURL: hubData.repoURL,
|
||||
GitBranch: hubData.repoBranch,
|
||||
});
|
||||
if (hubData.IsPrivate) {
|
||||
if (hubData.isPrivate) {
|
||||
setIsToggled({
|
||||
isPublicToggled: false,
|
||||
isPrivateToggled: true,
|
||||
|
|
@ -282,14 +282,14 @@ const MyHubConnectDrawer: React.FC<MyHubConnectDrawerProps> = ({
|
|||
isPrivateToggled: false,
|
||||
});
|
||||
}
|
||||
if (hubData.AuthType === MyHubType.token) {
|
||||
if (hubData.authType === MyHubType.TOKEN) {
|
||||
setPrivateHub('token');
|
||||
setAccessToken(hubData.Token);
|
||||
} else if (hubData.AuthType === MyHubType.ssh) {
|
||||
setAccessToken(hubData.token);
|
||||
} else if (hubData.authType === MyHubType.SSH) {
|
||||
setPrivateHub('ssh');
|
||||
setSshKey({
|
||||
privateKey: hubData.SSHPrivateKey,
|
||||
publicKey: hubData.SSHPublicKey,
|
||||
privateKey: hubData.sshPrivateKey,
|
||||
publicKey: hubData.sshPublicKey,
|
||||
});
|
||||
} else {
|
||||
setPrivateHub('token');
|
||||
|
|
|
|||
|
|
@ -77,11 +77,11 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
action={
|
||||
<div className={classes.mainCardDiv}>
|
||||
<div
|
||||
className={hub.IsAvailable ? classes.connected : classes.error}
|
||||
className={hub.isAvailable ? classes.connected : classes.error}
|
||||
>
|
||||
<Center>
|
||||
<Typography className={classes.statusText}>
|
||||
{hub.IsAvailable ? 'Connected' : 'Error'}
|
||||
{hub.isAvailable ? 'Connected' : 'Error'}
|
||||
</Typography>
|
||||
</Center>
|
||||
</div>
|
||||
|
|
@ -128,7 +128,7 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
data-cy="myHubEdit"
|
||||
value="View"
|
||||
onClick={() => {
|
||||
handleEditHub(hub.HubName);
|
||||
handleEditHub(hub.hubName);
|
||||
handleClose();
|
||||
}}
|
||||
>
|
||||
|
|
@ -175,7 +175,7 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
<CardContent
|
||||
onClick={() => {
|
||||
history.push({
|
||||
pathname: `/myhub/${hub.HubName}`,
|
||||
pathname: `/myhub/${hub.hubName}`,
|
||||
search: `?projectID=${projectID}&projectRole=${userRole}`,
|
||||
});
|
||||
}}
|
||||
|
|
@ -183,7 +183,7 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
<div className={classes.cardContent}>
|
||||
<img
|
||||
src={`./icons/${
|
||||
hub.HubName === 'Litmus ChaosHub'
|
||||
hub.hubName === 'Litmus ChaosHub'
|
||||
? 'myhub-litmus.svg'
|
||||
: 'my-hub-charts.svg'
|
||||
}`}
|
||||
|
|
@ -195,11 +195,11 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
align="center"
|
||||
className={classes.hubName}
|
||||
>
|
||||
<strong>{hub.HubName}</strong>/{hub.RepoBranch}
|
||||
<strong>{hub.hubName}</strong>/{hub.repoBranch}
|
||||
</Typography>
|
||||
<Typography className={classes.totalExp} gutterBottom>
|
||||
{parseInt(hub.TotalExp, 10) > 0
|
||||
? `${hub.TotalExp} experiments`
|
||||
{parseInt(hub.totalExp, 10) > 0
|
||||
? `${hub.totalExp} experiments`
|
||||
: t('myhub.error')}
|
||||
</Typography>
|
||||
</div>
|
||||
|
|
@ -216,7 +216,7 @@ const CustomMyHubCard: React.FC<customMyHubCardProp> = ({
|
|||
{t('myhub.lastSync')}
|
||||
</Typography>
|
||||
<Typography className={classes.lastSyncText}>
|
||||
{formatDate(hub.LastSyncedAt)}
|
||||
{formatDate(hub.lastSyncedAt)}
|
||||
</Typography>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ const MyHub: React.FC = () => {
|
|||
|
||||
// Get MyHubs with Status
|
||||
const { data, loading, refetch } = useQuery<HubStatus>(GET_HUB_STATUS, {
|
||||
variables: { data: projectID },
|
||||
variables: { projectID },
|
||||
fetchPolicy: 'cache-and-network',
|
||||
});
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ const MyHub: React.FC = () => {
|
|||
refetchQueries: [
|
||||
{
|
||||
query: GET_HUB_STATUS,
|
||||
variables: { data: projectID },
|
||||
variables: { projectID },
|
||||
},
|
||||
],
|
||||
onError: () => {
|
||||
|
|
@ -98,7 +98,7 @@ const MyHub: React.FC = () => {
|
|||
},
|
||||
});
|
||||
|
||||
const totalHubs = data && data.getHubStatus;
|
||||
const totalHubs = data && data.listHubStatus;
|
||||
|
||||
const [deleteHub, setDeleteHub] = useState<DeleteHub>({
|
||||
deleteHubModal: false,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { useSelector } from 'react-redux';
|
|||
import BackButton from '../../components/Button/BackButton';
|
||||
import Loader from '../../components/Loader';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import { LIST_DASHBOARD, LIST_DATASOURCE } from '../../graphql';
|
||||
import { GET_DASHBOARD, GET_DATASOURCE } from '../../graphql';
|
||||
import {
|
||||
DashboardDetails,
|
||||
PanelDetails,
|
||||
|
|
@ -16,13 +16,13 @@ import {
|
|||
import {
|
||||
ApplicationMetadata,
|
||||
ApplicationMetadataResponse,
|
||||
DashboardList,
|
||||
ListDashboardVars,
|
||||
GetDashboard,
|
||||
GetDashboardRequest,
|
||||
PanelGroupResponse,
|
||||
PanelOption,
|
||||
PanelResponse,
|
||||
Resource,
|
||||
updatePanelGroupInput,
|
||||
UpdatePanelGroupRequest,
|
||||
} from '../../models/graphql/dashboardsDetails';
|
||||
import {
|
||||
DataSourceList,
|
||||
|
|
@ -55,7 +55,7 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
data: dataSourceList,
|
||||
loading: loadingDataSources,
|
||||
error: errorFetchingDataSources,
|
||||
} = useQuery<DataSourceList, ListDataSourceVars>(LIST_DATASOURCE, {
|
||||
} = useQuery<DataSourceList, ListDataSourceVars>(GET_DATASOURCE, {
|
||||
variables: { projectID },
|
||||
fetchPolicy: 'cache-and-network',
|
||||
});
|
||||
|
|
@ -65,7 +65,7 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
data: dashboardList,
|
||||
loading: loadingDashboard,
|
||||
error: errorFetchingDashboard,
|
||||
} = useQuery<DashboardList, ListDashboardVars>(LIST_DASHBOARD, {
|
||||
} = useQuery<GetDashboard, GetDashboardRequest>(GET_DASHBOARD, {
|
||||
variables: { projectID, dbID: selectedDashboard.selectedDashboardID },
|
||||
skip: !configure || selectedDashboard.selectedDashboardID === '',
|
||||
fetchPolicy: 'network-only',
|
||||
|
|
@ -96,39 +96,39 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
const panels: PanelDetails[] = [];
|
||||
panelGroup.panels.forEach((panel: PanelResponse) => {
|
||||
const promQueries: PromQueryDetails[] = [];
|
||||
panel.prom_queries.forEach((promQuery) => {
|
||||
panel.promQueries.forEach((promQuery) => {
|
||||
promQueries.push({
|
||||
queryid: promQuery.queryid,
|
||||
prom_query_name: promQuery.prom_query_name,
|
||||
queryID: promQuery.queryID,
|
||||
promQueryName: promQuery.promQueryName,
|
||||
legend: promQuery.legend,
|
||||
resolution: promQuery.resolution,
|
||||
minstep: promQuery.minstep,
|
||||
line: promQuery.line,
|
||||
close_area: promQuery.close_area,
|
||||
closeArea: promQuery.closeArea,
|
||||
});
|
||||
});
|
||||
const panelOption: PanelOption = {
|
||||
points: panel.panel_options.points,
|
||||
grids: panel.panel_options.grids,
|
||||
left_axis: panel.panel_options.left_axis,
|
||||
points: panel.panelOptions.points,
|
||||
grIDs: panel.panelOptions.grIDs,
|
||||
leftAxis: panel.panelOptions.leftAxis,
|
||||
};
|
||||
panels.push({
|
||||
panel_name: panel.panel_name,
|
||||
y_axis_left: panel.y_axis_left,
|
||||
y_axis_right: panel.y_axis_right,
|
||||
x_axis_down: panel.x_axis_down,
|
||||
panelName: panel.panelName,
|
||||
yAxisLeft: panel.yAxisLeft,
|
||||
yAxisRight: panel.yAxisRight,
|
||||
xAxisDown: panel.xAxisDown,
|
||||
unit: panel.unit,
|
||||
panel_options: panelOption,
|
||||
prom_queries: promQueries,
|
||||
panel_id: panel.panel_id,
|
||||
created_at: panel.created_at,
|
||||
panel_group_id: panelGroup.panel_group_id,
|
||||
panel_group_name: panelGroup.panel_group_name,
|
||||
panelOptions: panelOption,
|
||||
promQueries,
|
||||
panelID: panel.panelID,
|
||||
createdAt: panel.createdAt,
|
||||
panelGroupID: panelGroup.panelGroupID,
|
||||
panelGroupName: panelGroup.panelGroupName,
|
||||
});
|
||||
});
|
||||
panelGroups.push({
|
||||
panel_group_id: panelGroup.panel_group_id,
|
||||
panel_group_name: panelGroup.panel_group_name,
|
||||
panelGroupID: panelGroup.panelGroupID,
|
||||
panelGroupName: panelGroup.panelGroupName,
|
||||
panels,
|
||||
});
|
||||
});
|
||||
|
|
@ -139,12 +139,12 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
const getExistingPanelGroupMap = (
|
||||
panelGroupsInput: PanelGroupResponse[]
|
||||
) => {
|
||||
const panelGroupMap: updatePanelGroupInput[] = [];
|
||||
const panelGroupMap: UpdatePanelGroupRequest[] = [];
|
||||
if (panelGroupsInput?.length) {
|
||||
panelGroupsInput.forEach((panelGroup: PanelGroupResponse) => {
|
||||
panelGroupMap.push({
|
||||
panel_group_id: panelGroup.panel_group_id,
|
||||
panel_group_name: panelGroup.panel_group_name,
|
||||
panelGroupID: panelGroup.panelGroupID,
|
||||
panelGroupName: panelGroup.panelGroupName,
|
||||
panels: panelGroup.panels,
|
||||
});
|
||||
});
|
||||
|
|
@ -178,28 +178,27 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
if (
|
||||
configure === true &&
|
||||
dashboardList &&
|
||||
dashboardList.ListDashboard &&
|
||||
dashboardList.ListDashboard.length > 0
|
||||
dashboardList.listDashboard &&
|
||||
dashboardList.listDashboard.length > 0
|
||||
) {
|
||||
const dashboardDetail = dashboardList.ListDashboard[0];
|
||||
const dashboardDetail = dashboardList.listDashboard[0];
|
||||
setDashboardVars({
|
||||
...dashboardVars,
|
||||
id: selectedDashboard.selectedDashboardID,
|
||||
name: dashboardDetail.db_name,
|
||||
dataSourceType: dashboardDetail.ds_type,
|
||||
dashboardTypeID: dashboardDetail.db_type_id,
|
||||
dashboardTypeName: dashboardDetail.db_type_name,
|
||||
dataSourceID: dashboardDetail.ds_id,
|
||||
dataSourceURL: dashboardDetail.ds_url,
|
||||
agentID: dashboardDetail.cluster_id,
|
||||
information: dashboardDetail.db_information,
|
||||
panelGroupMap: getExistingPanelGroupMap(dashboardDetail.panel_groups),
|
||||
panelGroups: getExistingPanelGroups(dashboardDetail.panel_groups),
|
||||
chaosEventQueryTemplate: dashboardDetail.chaos_event_query_template,
|
||||
chaosVerdictQueryTemplate:
|
||||
dashboardDetail.chaos_verdict_query_template,
|
||||
name: dashboardDetail.dbName,
|
||||
dataSourceType: dashboardDetail.dsType,
|
||||
dashboardTypeID: dashboardDetail.dbTypeID,
|
||||
dashboardTypeName: dashboardDetail.dbTypeName,
|
||||
dataSourceID: dashboardDetail.dsID,
|
||||
dataSourceURL: dashboardDetail.dsURL,
|
||||
agentID: dashboardDetail.clusterID,
|
||||
information: dashboardDetail.dbInformation,
|
||||
panelGroupMap: getExistingPanelGroupMap(dashboardDetail.panelGroups),
|
||||
panelGroups: getExistingPanelGroups(dashboardDetail.panelGroups),
|
||||
chaosEventQueryTemplate: dashboardDetail.chaosEventQueryTemplate,
|
||||
chaosVerdictQueryTemplate: dashboardDetail.chaosVerdictQueryTemplate,
|
||||
applicationMetadataMap: getApplicationMetadataMap(
|
||||
dashboardDetail.application_metadata_map
|
||||
dashboardDetail.applicationMetadataMap
|
||||
),
|
||||
});
|
||||
}
|
||||
|
|
@ -244,7 +243,7 @@ const ChooseAndConfigureDashboards: React.FC<ChooseAndConfigureDashboardsProps>
|
|||
configure={configure}
|
||||
activePanelID={selectedDashboard.activePanelID}
|
||||
existingDashboardVars={dashboardVars}
|
||||
dataSourceList={dataSourceList?.ListDataSource ?? []}
|
||||
dataSourceList={dataSourceList?.listDataSource ?? []}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -104,23 +104,20 @@ const DataSourceConfigurePage: React.FC<DataSourceConfigurePageProps> = ({
|
|||
authType = 'basic auth';
|
||||
}
|
||||
const dataSourceInput = {
|
||||
ds_name: dataSourceVars.name,
|
||||
ds_type: dataSourceVars.dataSourceType,
|
||||
ds_url:
|
||||
dsName: dataSourceVars.name,
|
||||
dsType: dataSourceVars.dataSourceType,
|
||||
dsURL:
|
||||
dataSourceVars.url[dataSourceVars.url.length - 1] !== '/'
|
||||
? dataSourceVars.url
|
||||
: dataSourceVars.url.slice(0, -1),
|
||||
access_type: dataSourceVars.access,
|
||||
auth_type: authType,
|
||||
basic_auth_username: dataSourceVars.username,
|
||||
basic_auth_password: dataSourceVars.password,
|
||||
scrape_interval: parseInt(
|
||||
dataSourceVars.scrapeInterval.split('s')[0],
|
||||
10
|
||||
),
|
||||
query_timeout: parseInt(dataSourceVars.queryTimeout.split('s')[0], 10),
|
||||
http_method: dataSourceVars.httpMethod,
|
||||
project_id: projectID,
|
||||
accessType: dataSourceVars.access,
|
||||
authType,
|
||||
basicAuthUsername: dataSourceVars.username,
|
||||
basicAuthPassword: dataSourceVars.password,
|
||||
scrapeInterval: parseInt(dataSourceVars.scrapeInterval.split('s')[0], 10),
|
||||
queryTimeout: parseInt(dataSourceVars.queryTimeout.split('s')[0], 10),
|
||||
httpMethod: dataSourceVars.httpMethod,
|
||||
projectID,
|
||||
};
|
||||
createDataSource({
|
||||
variables: { DSInput: dataSourceInput },
|
||||
|
|
@ -133,24 +130,21 @@ const DataSourceConfigurePage: React.FC<DataSourceConfigurePageProps> = ({
|
|||
authType = 'basic auth';
|
||||
}
|
||||
const dataSourceInput = {
|
||||
ds_id: dataSourceVars.id ?? '',
|
||||
ds_name: dataSourceVars.name,
|
||||
ds_type: dataSourceVars.dataSourceType,
|
||||
ds_url:
|
||||
dsID: dataSourceVars.id ?? '',
|
||||
dsName: dataSourceVars.name,
|
||||
dsType: dataSourceVars.dataSourceType,
|
||||
dsURL:
|
||||
dataSourceVars.url[dataSourceVars.url.length - 1] !== '/'
|
||||
? dataSourceVars.url
|
||||
: dataSourceVars.url.slice(0, -1),
|
||||
access_type: dataSourceVars.access,
|
||||
auth_type: authType,
|
||||
basic_auth_username: dataSourceVars.username,
|
||||
basic_auth_password: dataSourceVars.password,
|
||||
scrape_interval: parseInt(
|
||||
dataSourceVars.scrapeInterval.split('s')[0],
|
||||
10
|
||||
),
|
||||
query_timeout: parseInt(dataSourceVars.queryTimeout.split('s')[0], 10),
|
||||
http_method: dataSourceVars.httpMethod,
|
||||
project_id: projectID,
|
||||
accessType: dataSourceVars.access,
|
||||
authType,
|
||||
basicAuthUsername: dataSourceVars.username,
|
||||
basicAuthPassword: dataSourceVars.password,
|
||||
scrapeInterval: parseInt(dataSourceVars.scrapeInterval.split('s')[0], 10),
|
||||
queryTimeout: parseInt(dataSourceVars.queryTimeout.split('s')[0], 10),
|
||||
httpMethod: dataSourceVars.httpMethod,
|
||||
projectID,
|
||||
};
|
||||
updateDataSource({
|
||||
variables: { DSInput: dataSourceInput },
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ const ScheduleWorkflow = () => {
|
|||
delete newParsedYaml.metadata.generateName;
|
||||
newParsedYaml.metadata.name = fetchWorkflowNameFromManifest(manifest);
|
||||
newParsedYaml.metadata.labels = {
|
||||
workflow_id: workflowData.workflow_id,
|
||||
workflow_id: workflowData.workflowID,
|
||||
};
|
||||
newParsedYaml.spec.workflowSpec = oldParsedYaml.spec;
|
||||
const tz = {
|
||||
|
|
@ -119,7 +119,7 @@ const ScheduleWorkflow = () => {
|
|||
newParsedYaml.metadata.name = fetchWorkflowNameFromManifest(manifest);
|
||||
newParsedYaml.spec = oldParsedYaml.spec.workflowSpec;
|
||||
newParsedYaml.metadata.labels = {
|
||||
workflow_id: workflowData.workflow_id,
|
||||
workflow_id: workflowData.workflowID,
|
||||
};
|
||||
NewYaml = YAML.stringify(newParsedYaml);
|
||||
workflowAction.setWorkflowManifest({
|
||||
|
|
@ -136,7 +136,7 @@ const ScheduleWorkflow = () => {
|
|||
// newParsedYaml.spec.suspend = false;
|
||||
delete newParsedYaml.metadata.generateName;
|
||||
newParsedYaml.metadata.name = fetchWorkflowNameFromManifest(manifest);
|
||||
newParsedYaml.metadata.labels = { workflow_id: workflowData.workflow_id };
|
||||
newParsedYaml.metadata.labels = { workflow_id: workflowData.workflowID };
|
||||
const tz = {
|
||||
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC',
|
||||
};
|
||||
|
|
|
|||
|
|
@ -15,14 +15,14 @@ import Loader from '../../components/Loader';
|
|||
import { parseYamlValidations } from '../../components/YamlEditor/Validations';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import { UPDATE_SCHEDULE } from '../../graphql/mutations';
|
||||
import { WORKFLOW_LIST_DETAILS } from '../../graphql/queries';
|
||||
import { GET_WORKFLOW_DETAILS } from '../../graphql/queries';
|
||||
import {
|
||||
CreateWorkFlowInput,
|
||||
CreateWorkFlowRequest,
|
||||
UpdateWorkflowResponse,
|
||||
WeightMap,
|
||||
} from '../../models/graphql/createWorkflowData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
} from '../../models/graphql/workflowListData';
|
||||
import { experimentMap, WorkflowData } from '../../models/redux/workflow';
|
||||
|
|
@ -83,14 +83,14 @@ const EditSchedule: React.FC = () => {
|
|||
const projectID = getProjectID();
|
||||
const userRole = getProjectRole();
|
||||
|
||||
const { data, loading } = useQuery<ScheduledWorkflows, ListWorkflowsInput>(
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
const { data, loading } = useQuery<ScheduledWorkflows, GetWorkflowsRequest>(
|
||||
GET_WORKFLOW_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowInput: {
|
||||
project_id: projectID,
|
||||
request: {
|
||||
projectID,
|
||||
filter: {
|
||||
workflow_name: paramData.workflowName,
|
||||
workflowName: paramData.workflowName,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -102,14 +102,14 @@ const EditSchedule: React.FC = () => {
|
|||
(state: RootState) => state.workflowManifest.manifest
|
||||
);
|
||||
|
||||
const wfDetails = data && data.ListWorkflow.workflows[0];
|
||||
const wfDetails = data && data.listWorkflows.workflows[0];
|
||||
const doc = new YAML.Document();
|
||||
const w: Weights[] = [];
|
||||
const { cronSyntax, clusterid, clustername } = workflowData;
|
||||
const { cronSyntax, clusterID, clusterName } = workflowData;
|
||||
|
||||
const [createChaosWorkFlow, { error: workflowError }] = useMutation<
|
||||
UpdateWorkflowResponse,
|
||||
CreateWorkFlowInput
|
||||
CreateWorkFlowRequest
|
||||
>(UPDATE_SCHEDULE, {
|
||||
onCompleted: () => {
|
||||
setFinishModalOpen(true);
|
||||
|
|
@ -126,7 +126,7 @@ const EditSchedule: React.FC = () => {
|
|||
|
||||
weights.forEach((data) => {
|
||||
weightData.push({
|
||||
experiment_name: data.experimentName,
|
||||
experimentName: data.experimentName,
|
||||
weightage: data.weight,
|
||||
});
|
||||
});
|
||||
|
|
@ -137,19 +137,19 @@ const EditSchedule: React.FC = () => {
|
|||
const yamlJson = JSON.stringify(yml, null, 2); // Converted to Stringified JSON
|
||||
|
||||
const chaosWorkFlowInputs = {
|
||||
workflow_id: wfDetails?.workflow_id,
|
||||
workflow_manifest: yamlJson,
|
||||
workflow_id: wfDetails?.workflowID,
|
||||
workflowManifest: yamlJson,
|
||||
cronSyntax,
|
||||
workflow_name: fetchWorkflowNameFromManifest(manifest),
|
||||
workflow_description: workflow.description,
|
||||
workflowName: fetchWorkflowNameFromManifest(manifest),
|
||||
workflowDescription: workflow.description,
|
||||
isCustomWorkflow: false,
|
||||
weightages: weightData,
|
||||
project_id: projectID,
|
||||
cluster_id: clusterid,
|
||||
projectID,
|
||||
clusterID,
|
||||
};
|
||||
|
||||
createChaosWorkFlow({
|
||||
variables: { ChaosWorkFlowInput: chaosWorkFlowInputs },
|
||||
variables: { request: chaosWorkFlowInputs },
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -159,22 +159,22 @@ const EditSchedule: React.FC = () => {
|
|||
if (wfDetails !== undefined) {
|
||||
for (let i = 0; i < wfDetails?.weightages.length; i++) {
|
||||
w.push({
|
||||
experimentName: wfDetails?.weightages[i].experiment_name,
|
||||
experimentName: wfDetails?.weightages[i].experimentName,
|
||||
weight: wfDetails?.weightages[i].weightage,
|
||||
});
|
||||
}
|
||||
doc.contents = JSON.parse(wfDetails?.workflow_manifest);
|
||||
doc.contents = JSON.parse(wfDetails?.workflowManifest);
|
||||
workflowAction.setWorkflowManifest({
|
||||
manifest: isCronEdited === null ? doc.toString() : manifest,
|
||||
});
|
||||
setWorkflow({
|
||||
name: wfDetails?.workflow_name,
|
||||
description: wfDetails?.workflow_description,
|
||||
name: wfDetails?.workflowName,
|
||||
description: wfDetails?.workflowDescription,
|
||||
});
|
||||
localforage.setItem('weights', w);
|
||||
workflowAction.setWorkflowDetails({
|
||||
workflow_id: wfDetails?.workflow_id,
|
||||
clusterid: wfDetails?.cluster_id,
|
||||
workflow_id: wfDetails?.workflowID,
|
||||
clusterID: wfDetails?.clusterID,
|
||||
cronSyntax:
|
||||
isCronEdited === null ? wfDetails?.cronSyntax : cronSyntax,
|
||||
scheduleType: {
|
||||
|
|
@ -313,7 +313,7 @@ const EditSchedule: React.FC = () => {
|
|||
</Typography>
|
||||
</div>
|
||||
<Typography className={classes.schCol2}>
|
||||
{clustername}
|
||||
{clusterName}
|
||||
</Typography>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ const GetStarted: React.FC = () => {
|
|||
.then((data) => {
|
||||
if ('error' in data) {
|
||||
console.error(data);
|
||||
// eslint-disable-next-line no-alert
|
||||
window.alert('Token expired, please login again');
|
||||
logout();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
|
|||
import Loader from '../../components/Loader';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import { GET_CLUSTER_LENGTH } from '../../graphql';
|
||||
import { Clusters, ClusterVars } from '../../models/graphql/clusterData';
|
||||
import { ClusterRequest, Clusters } from '../../models/graphql/clusterData';
|
||||
import { getUsername } from '../../utils/auth';
|
||||
import { getProjectID } from '../../utils/getSearchParams';
|
||||
import useStyles from './styles';
|
||||
|
|
@ -19,10 +19,10 @@ const HomePage: React.FC = () => {
|
|||
const classes = useStyles();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { data: agentList, loading } = useQuery<Clusters, ClusterVars>(
|
||||
const { data: agentList, loading } = useQuery<Clusters, ClusterRequest>(
|
||||
GET_CLUSTER_LENGTH,
|
||||
{
|
||||
variables: { project_id: getProjectID() },
|
||||
variables: { projectID: getProjectID() },
|
||||
fetchPolicy: 'network-only',
|
||||
}
|
||||
);
|
||||
|
|
@ -30,7 +30,7 @@ const HomePage: React.FC = () => {
|
|||
let agentCount = 0;
|
||||
|
||||
if (agentList !== undefined) {
|
||||
agentCount = agentList.getCluster.length;
|
||||
agentCount = agentList?.listClusters.length;
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import { useSelector } from 'react-redux';
|
|||
import BackButton from '../../components/Button/BackButton';
|
||||
import Loader from '../../components/Loader';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import { LIST_DASHBOARD, VIEW_DASHBOARD } from '../../graphql';
|
||||
import { GET_DASHBOARD, VIEW_DASHBOARD } from '../../graphql';
|
||||
import {
|
||||
PanelNameAndID,
|
||||
ParsedChaosEventPrometheusData,
|
||||
|
|
@ -23,9 +23,9 @@ import {
|
|||
SelectedDashboardInformation,
|
||||
} from '../../models/dashboardsData';
|
||||
import {
|
||||
DashboardList,
|
||||
ListDashboardResponse,
|
||||
ListDashboardVars,
|
||||
GetDashboard,
|
||||
GetDashboardRequest,
|
||||
GetDashboardResponse,
|
||||
PanelGroupResponse,
|
||||
PanelResponse,
|
||||
} from '../../models/graphql/dashboardsDetails';
|
||||
|
|
@ -144,7 +144,7 @@ const DashboardPage: React.FC = () => {
|
|||
loading: loadingDashboards,
|
||||
error: errorFetchingDashboards,
|
||||
refetch: refetchDashboards,
|
||||
} = useQuery<DashboardList, ListDashboardVars>(LIST_DASHBOARD, {
|
||||
} = useQuery<GetDashboard, GetDashboardRequest>(GET_DASHBOARD, {
|
||||
variables: {
|
||||
projectID,
|
||||
clusterID: selectedDashboard.selectedAgentID,
|
||||
|
|
@ -168,24 +168,24 @@ const DashboardPage: React.FC = () => {
|
|||
error: errorFetchingDashboardQueries,
|
||||
} = useSubscription<ViewDashboard, ViewDashboardInput>(VIEW_DASHBOARD, {
|
||||
variables: {
|
||||
dbID: selectedDashboardInformation.id,
|
||||
prometheusQueries: selectedDashboardInformation.promQueries,
|
||||
queryMap: getDashboardQueryMap(
|
||||
selectedDashboardInformation.metaData?.panel_groups ?? []
|
||||
dashboardID: selectedDashboardInformation.id,
|
||||
promQueries: selectedDashboardInformation.promQueries,
|
||||
dashboardQueryMap: getDashboardQueryMap(
|
||||
selectedDashboardInformation.metaData?.panelGroups ?? []
|
||||
),
|
||||
dataVarMap: {
|
||||
dataVariables: {
|
||||
url: selectedDashboardInformation.dataSourceURL,
|
||||
start: selectedDashboardInformation.range.startDate,
|
||||
end: selectedDashboardInformation.range.endDate,
|
||||
relative_time: selectedDashboardInformation.relativeTime,
|
||||
refresh_interval: selectedDashboardInformation.refreshInterval,
|
||||
relativeTime: selectedDashboardInformation.relativeTime,
|
||||
refreshInterval: selectedDashboardInformation.refreshInterval,
|
||||
},
|
||||
},
|
||||
skip:
|
||||
loadingDashboards ||
|
||||
errorFetchingDashboards !== undefined ||
|
||||
selectedDashboardInformation.promQueries.length === 0 ||
|
||||
selectedDashboardInformation.metaData?.panel_groups.length === 0 ||
|
||||
selectedDashboardInformation.metaData?.panelGroups.length === 0 ||
|
||||
selectedDashboardInformation.dataSourceURL === '' ||
|
||||
(selectedDashboardInformation.range.startDate === INVALID_DATE &&
|
||||
selectedDashboardInformation.range.endDate === INVALID_DATE &&
|
||||
|
|
@ -205,13 +205,13 @@ const DashboardPage: React.FC = () => {
|
|||
onSubscriptionData: (subscriptionUpdate) => {
|
||||
setPromData({
|
||||
chaosEventData: ChaosEventDataParserForPrometheus(
|
||||
subscriptionUpdate.subscriptionData.data?.viewDashboard
|
||||
subscriptionUpdate.subscriptionData?.data?.viewDashboard
|
||||
?.annotationsResponse ?? [],
|
||||
areaGraph,
|
||||
selectedEvents
|
||||
),
|
||||
panelGroupQueryMap: DashboardMetricDataParserForPrometheus(
|
||||
subscriptionUpdate.subscriptionData.data?.viewDashboard
|
||||
subscriptionUpdate.subscriptionData?.data?.viewDashboard
|
||||
?.dashboardMetricsResponse ?? [],
|
||||
lineGraph,
|
||||
areaGraph,
|
||||
|
|
@ -236,65 +236,64 @@ const DashboardPage: React.FC = () => {
|
|||
useEffect(() => {
|
||||
if (
|
||||
dashboards &&
|
||||
dashboards.ListDashboard &&
|
||||
dashboards.ListDashboard.length
|
||||
dashboards.listDashboard &&
|
||||
dashboards.listDashboard.length
|
||||
) {
|
||||
if (
|
||||
selectedDashboardInformation.id !==
|
||||
selectedDashboardInformation.dashboardKey
|
||||
) {
|
||||
const selectedDashboard: ListDashboardResponse =
|
||||
dashboards.ListDashboard.filter((data) => {
|
||||
return data.db_id === selectedDashboardInformation.id;
|
||||
const selectedDashboard: GetDashboardResponse =
|
||||
dashboards.listDashboard.filter((data) => {
|
||||
return data.dbID === selectedDashboardInformation.id;
|
||||
})[0];
|
||||
const selectedPanelNameAndIDList: PanelNameAndID[] = [];
|
||||
if (selectedDashboard) {
|
||||
(selectedDashboard.panel_groups ?? []).forEach(
|
||||
(selectedDashboard.panelGroups ?? []).forEach(
|
||||
(panelGroup: PanelGroupResponse) => {
|
||||
(panelGroup.panels ?? []).forEach((panel: PanelResponse) => {
|
||||
selectedPanelNameAndIDList.push({
|
||||
name: panel.panel_name,
|
||||
id: panel.panel_id,
|
||||
name: panel.panelName,
|
||||
id: panel.panelID,
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
setSelectedDashboardInformation({
|
||||
...selectedDashboardInformation,
|
||||
dashboardListForAgent: dashboards.ListDashboard,
|
||||
dashboardListForAgent: dashboards.listDashboard,
|
||||
metaData: selectedDashboard,
|
||||
closedAreaQueryIDs: (selectedDashboard.panel_groups ?? [])
|
||||
closedAreaQueryIDs: (selectedDashboard.panelGroups ?? [])
|
||||
.flatMap((panelGroup) =>
|
||||
panelGroup ? panelGroup.panels ?? [] : []
|
||||
)
|
||||
.flatMap((panel) => (panel ? panel.prom_queries ?? [] : []))
|
||||
.filter((query) => query.close_area)
|
||||
.map((query) => query.queryid),
|
||||
.flatMap((panel) => (panel ? panel.promQueries ?? [] : []))
|
||||
.filter((query) => query.closeArea)
|
||||
.map((query) => query.queryID),
|
||||
dashboardKey: selectedDashboardInformation.id,
|
||||
panelNameAndIDList: selectedPanelNameAndIDList,
|
||||
name: selectedDashboard.db_name,
|
||||
typeName: selectedDashboard.db_type_name,
|
||||
typeID: selectedDashboard.db_type_id,
|
||||
agentName: selectedDashboard.cluster_name,
|
||||
name: selectedDashboard.dbName,
|
||||
typeName: selectedDashboard.dbTypeName,
|
||||
typeID: selectedDashboard.dbTypeID,
|
||||
agentName: selectedDashboard.clusterName,
|
||||
urlToIcon: `./icons/${
|
||||
selectedDashboard.db_type_id.includes('custom')
|
||||
selectedDashboard.dbTypeID.includes('custom')
|
||||
? 'custom'
|
||||
: selectedDashboard.db_type_id
|
||||
: selectedDashboard.dbTypeID
|
||||
}_dashboard.svg`,
|
||||
information: selectedDashboard.db_information,
|
||||
chaosEventQueryTemplate:
|
||||
selectedDashboard.chaos_event_query_template,
|
||||
information: selectedDashboard.dbInformation,
|
||||
chaosEventQueryTemplate: selectedDashboard.chaosEventQueryTemplate,
|
||||
chaosVerdictQueryTemplate:
|
||||
selectedDashboard.chaos_verdict_query_template,
|
||||
applicationMetadataMap: selectedDashboard.application_metadata_map,
|
||||
dataSourceURL: selectedDashboard.ds_url,
|
||||
dataSourceID: selectedDashboard.ds_id,
|
||||
dataSourceName: selectedDashboard.ds_name,
|
||||
selectedDashboard.chaosVerdictQueryTemplate,
|
||||
applicationMetadataMap: selectedDashboard.applicationMetadataMap,
|
||||
dataSourceURL: selectedDashboard.dsURL,
|
||||
dataSourceID: selectedDashboard.dsID,
|
||||
dataSourceName: selectedDashboard.dsName,
|
||||
promQueries: generatePromQueries(
|
||||
selectedDashboardInformation.range,
|
||||
selectedDashboard.panel_groups ?? [],
|
||||
selectedDashboard.chaos_event_query_template,
|
||||
selectedDashboard.chaos_verdict_query_template
|
||||
selectedDashboard.panelGroups ?? [],
|
||||
selectedDashboard.chaosEventQueryTemplate,
|
||||
selectedDashboard.chaosVerdictQueryTemplate
|
||||
),
|
||||
});
|
||||
setSelectedPanels(
|
||||
|
|
@ -305,8 +304,8 @@ const DashboardPage: React.FC = () => {
|
|||
...promData,
|
||||
panelGroupQueryMap: [],
|
||||
});
|
||||
if (selectedDashboard.ds_health_status !== ACTIVE) {
|
||||
setDataSourceStatus(selectedDashboard.ds_health_status);
|
||||
if (selectedDashboard.dsHealthStatus !== ACTIVE) {
|
||||
setDataSourceStatus(selectedDashboard.dsHealthStatus);
|
||||
}
|
||||
}
|
||||
setReFetch(true);
|
||||
|
|
@ -454,21 +453,21 @@ const DashboardPage: React.FC = () => {
|
|||
classes={{ paper: classes.menuList }}
|
||||
>
|
||||
{selectedDashboardInformation.dashboardListForAgent.map(
|
||||
(data: ListDashboardResponse) => {
|
||||
(data: GetDashboardResponse) => {
|
||||
return (
|
||||
<MenuItem
|
||||
key={`${data.db_id}-monitoringDashboard`}
|
||||
value={data.db_id}
|
||||
key={`${data.dbID}-monitoringDashboard`}
|
||||
value={data.dbID}
|
||||
selected={
|
||||
data.db_id === selectedDashboardInformation.id
|
||||
data.dbID === selectedDashboardInformation.id
|
||||
}
|
||||
onClick={() => {
|
||||
dashboard.selectDashboard({
|
||||
selectedDashboardID: data.db_id,
|
||||
selectedDashboardID: data.dbID,
|
||||
});
|
||||
setSelectedDashboardInformation({
|
||||
...selectedDashboardInformation,
|
||||
id: data.db_id,
|
||||
id: data.dbID,
|
||||
});
|
||||
setAnchorEl(null);
|
||||
}}
|
||||
|
|
@ -480,7 +479,7 @@ const DashboardPage: React.FC = () => {
|
|||
className={classes.btnText}
|
||||
variant="h5"
|
||||
>
|
||||
{data.db_name}
|
||||
{data.dbName}
|
||||
</Typography>
|
||||
</div>
|
||||
</MenuItem>
|
||||
|
|
@ -544,7 +543,7 @@ const DashboardPage: React.FC = () => {
|
|||
refreshInterval,
|
||||
promQueries: generatePromQueries(
|
||||
range,
|
||||
selectedDashboardInformation.metaData?.panel_groups ?? [],
|
||||
selectedDashboardInformation.metaData?.panelGroups ?? [],
|
||||
selectedDashboardInformation.chaosEventQueryTemplate,
|
||||
selectedDashboardInformation.chaosVerdictQueryTemplate
|
||||
),
|
||||
|
|
@ -651,15 +650,15 @@ const DashboardPage: React.FC = () => {
|
|||
promData.panelGroupQueryMap.length > 0 &&
|
||||
!reFetching &&
|
||||
selectedDashboardInformation.metaData &&
|
||||
selectedDashboardInformation.metaData.panel_groups.length > 0 &&
|
||||
selectedDashboardInformation.metaData.panel_groups.map(
|
||||
selectedDashboardInformation.metaData.panelGroups.length > 0 &&
|
||||
selectedDashboardInformation.metaData.panelGroups.map(
|
||||
(panelGroup: PanelGroupResponse, index) => (
|
||||
<div
|
||||
key={`${panelGroup.panel_group_id}-dashboardPage-div`}
|
||||
key={`${panelGroup.panelGroupID}-dashboardPage-div`}
|
||||
data-cy="dashboardPanelGroup"
|
||||
>
|
||||
<DashboardPanelGroup
|
||||
key={`${panelGroup.panel_group_id}-dashboardPage-component`}
|
||||
key={`${panelGroup.panelGroupID}-dashboardPage-component`}
|
||||
centralAllowGraphUpdate={centralAllowGraphUpdate}
|
||||
centralBrushPosition={centralBrushPosition}
|
||||
handleCentralBrushPosition={(
|
||||
|
|
@ -766,7 +765,7 @@ const DashboardPage: React.FC = () => {
|
|||
promQueries: generatePromQueries(
|
||||
range,
|
||||
selectedDashboardInformation.metaData
|
||||
?.panel_groups ?? [],
|
||||
?.panelGroups ?? [],
|
||||
selectedDashboardInformation.chaosEventQueryTemplate,
|
||||
selectedDashboardInformation.chaosVerdictQueryTemplate
|
||||
),
|
||||
|
|
@ -787,7 +786,7 @@ const DashboardPage: React.FC = () => {
|
|||
promQueries: generatePromQueries(
|
||||
timeControlObjectFromHistory.range,
|
||||
selectedDashboardInformation.metaData
|
||||
?.panel_groups ?? [],
|
||||
?.panelGroups ?? [],
|
||||
selectedDashboardInformation.chaosEventQueryTemplate,
|
||||
selectedDashboardInformation.chaosVerdictQueryTemplate
|
||||
),
|
||||
|
|
@ -844,7 +843,7 @@ const DashboardPage: React.FC = () => {
|
|||
endDate: INVALID_DATE,
|
||||
},
|
||||
selectedDashboardInformation.metaData
|
||||
?.panel_groups ?? [],
|
||||
?.panelGroups ?? [],
|
||||
selectedDashboardInformation.chaosEventQueryTemplate,
|
||||
selectedDashboardInformation.chaosVerdictQueryTemplate
|
||||
),
|
||||
|
|
@ -858,8 +857,8 @@ const DashboardPage: React.FC = () => {
|
|||
setShowPromQueryResponseLoader(false);
|
||||
}
|
||||
}}
|
||||
panel_group_id={panelGroup.panel_group_id}
|
||||
panel_group_name={panelGroup.panel_group_name}
|
||||
panelGroupID={panelGroup.panelGroupID}
|
||||
panelGroupName={panelGroup.panelGroupName}
|
||||
panels={panelGroup.panels ?? []}
|
||||
selectedPanels={selectedPanels}
|
||||
metricDataForGroup={
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ const Settings: React.FC = () => {
|
|||
>
|
||||
<StyledTab data-cy="my-account" label="My Account" {...tabProps(0)} />
|
||||
<StyledTab data-cy="teaming" label="Team" {...tabProps(1)} />
|
||||
{role === UserRole.admin && (
|
||||
{role === UserRole.ADMIN && (
|
||||
<StyledTab
|
||||
data-cy="user-management"
|
||||
label="User Management"
|
||||
|
|
@ -73,12 +73,12 @@ const Settings: React.FC = () => {
|
|||
<StyledTab
|
||||
data-cy="gitOps"
|
||||
label="GitOps"
|
||||
{...tabProps(role === UserRole.admin ? 3 : 2)}
|
||||
{...tabProps(role === UserRole.ADMIN ? 3 : 2)}
|
||||
/>
|
||||
<StyledTab
|
||||
data-cy="image-registry"
|
||||
label="Image Registry"
|
||||
{...tabProps(role === UserRole.admin ? 4 : 3)}
|
||||
{...tabProps(role === UserRole.ADMIN ? 4 : 3)}
|
||||
/>
|
||||
</Tabs>
|
||||
</Paper>
|
||||
|
|
@ -94,7 +94,7 @@ const Settings: React.FC = () => {
|
|||
</SuspenseLoader>
|
||||
</TabPanel>
|
||||
</div>
|
||||
{role === UserRole.admin && (
|
||||
{role === UserRole.ADMIN && (
|
||||
<TabPanel value={settingsTabValue} index={2}>
|
||||
<SuspenseLoader style={{ height: '50vh' }}>
|
||||
<UserManagement />
|
||||
|
|
@ -104,7 +104,7 @@ const Settings: React.FC = () => {
|
|||
<div data-cy="GitOpsPanel">
|
||||
<TabPanel
|
||||
value={settingsTabValue}
|
||||
index={role === UserRole.admin ? 3 : 2}
|
||||
index={role === UserRole.ADMIN ? 3 : 2}
|
||||
>
|
||||
<SuspenseLoader style={{ height: '50vh' }}>
|
||||
<GitOpsTab />
|
||||
|
|
@ -114,7 +114,7 @@ const Settings: React.FC = () => {
|
|||
<div data-cy="ImageRegistry">
|
||||
<TabPanel
|
||||
value={settingsTabValue}
|
||||
index={role === UserRole.admin ? 4 : 3}
|
||||
index={role === UserRole.ADMIN ? 4 : 3}
|
||||
>
|
||||
<SuspenseLoader style={{ height: '50vh' }}>
|
||||
<ImageRegistry />
|
||||
|
|
|
|||
|
|
@ -11,20 +11,20 @@ import { SuspenseLoader } from '../../components/SuspenseLoader';
|
|||
import { StyledTab, TabPanel } from '../../components/Tabs';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import {
|
||||
GET_WORKFLOW_DETAILS,
|
||||
WORKFLOW_DETAILS_WITH_EXEC_DATA,
|
||||
WORKFLOW_EVENTS_WITH_EXEC_DATA,
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
} from '../../graphql';
|
||||
import { ScheduleWorkflow } from '../../models/graphql/scheduleData';
|
||||
import {
|
||||
ExecutionData,
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowDataRequest,
|
||||
WorkflowSubscription,
|
||||
WorkflowSubscriptionInput,
|
||||
WorkflowSubscriptionRequest,
|
||||
} from '../../models/graphql/workflowData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
} from '../../models/graphql/workflowListData';
|
||||
import useActions from '../../redux/actions';
|
||||
|
|
@ -46,7 +46,7 @@ const NodeTable = lazy(
|
|||
);
|
||||
|
||||
interface URLParams {
|
||||
workflowRunId: string;
|
||||
workflowRunID: string;
|
||||
}
|
||||
|
||||
const WorkflowDetails: React.FC = () => {
|
||||
|
|
@ -70,34 +70,33 @@ const WorkflowDetails: React.FC = () => {
|
|||
(state: RootState) => state.tabNumber.node
|
||||
);
|
||||
|
||||
const { pod_name } = useSelector((state: RootState) => state.selectedNode);
|
||||
|
||||
const { workflowRunId }: URLParams = useParams();
|
||||
const { podName } = useSelector((state: RootState) => state.selectedNode);
|
||||
|
||||
const { workflowRunID }: URLParams = useParams();
|
||||
// Query to get workflows
|
||||
const { subscribeToMore, data, error } = useQuery<Workflow, WorkflowDataVars>(
|
||||
WORKFLOW_DETAILS_WITH_EXEC_DATA,
|
||||
{
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
workflow_run_ids: [workflowRunId],
|
||||
},
|
||||
const { subscribeToMore, data, error } = useQuery<
|
||||
Workflow,
|
||||
WorkflowDataRequest
|
||||
>(WORKFLOW_DETAILS_WITH_EXEC_DATA, {
|
||||
variables: {
|
||||
request: {
|
||||
projectID,
|
||||
workflowRunIDs: [workflowRunID],
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
}
|
||||
);
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
});
|
||||
|
||||
const workflowRun = data?.getWorkflowRuns.workflow_runs[0];
|
||||
const workflowRun = data?.listWorkflowRuns.workflowRuns[0];
|
||||
|
||||
const { data: workflowData, loading } = useQuery<
|
||||
ScheduledWorkflows,
|
||||
ListWorkflowsInput
|
||||
>(WORKFLOW_LIST_DETAILS, {
|
||||
GetWorkflowsRequest
|
||||
>(GET_WORKFLOW_DETAILS, {
|
||||
variables: {
|
||||
workflowInput: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [workflowRun?.workflow_id ?? ' '],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [workflowRun?.workflowID ?? ' '],
|
||||
},
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
|
|
@ -106,29 +105,27 @@ const WorkflowDetails: React.FC = () => {
|
|||
// Using subscription to get realtime data
|
||||
useEffect(() => {
|
||||
if (workflowRun?.phase && workflowRun.phase === 'Running') {
|
||||
subscribeToMore<WorkflowSubscription, WorkflowSubscriptionInput>({
|
||||
subscribeToMore<WorkflowSubscription, WorkflowSubscriptionRequest>({
|
||||
document: WORKFLOW_EVENTS_WITH_EXEC_DATA,
|
||||
variables: { projectID },
|
||||
updateQuery: (prev, { subscriptionData }) => {
|
||||
if (!subscriptionData.data || !prev || !prev.getWorkflowRuns)
|
||||
if (!subscriptionData.data || !prev || !prev.listWorkflowRuns)
|
||||
return prev;
|
||||
|
||||
const modifiedWorkflows = prev.getWorkflowRuns.workflow_runs.slice();
|
||||
const newWorkflow = subscriptionData.data.workflowEventListener;
|
||||
const modifiedWorkflows = prev.listWorkflowRuns.workflowRuns.slice();
|
||||
const newWorkflow = subscriptionData.data.getWorkflowEvents;
|
||||
|
||||
// Update only the required workflowRun
|
||||
if (
|
||||
modifiedWorkflows[0].workflow_run_id === newWorkflow.workflow_run_id
|
||||
)
|
||||
if (modifiedWorkflows[0].workflowRunID === newWorkflow.workflowRunID)
|
||||
modifiedWorkflows[0] = newWorkflow;
|
||||
|
||||
const totalNoOfWorkflows =
|
||||
prev.getWorkflowRuns.total_no_of_workflow_runs;
|
||||
prev.listWorkflowRuns.totalNoOfWorkflowRuns;
|
||||
|
||||
return {
|
||||
getWorkflowRuns: {
|
||||
total_no_of_workflow_runs: totalNoOfWorkflows,
|
||||
workflow_runs: modifiedWorkflows,
|
||||
listWorkflowRuns: {
|
||||
totalNoOfWorkflowRuns: totalNoOfWorkflows,
|
||||
workflowRuns: modifiedWorkflows,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
@ -141,10 +138,12 @@ const WorkflowDetails: React.FC = () => {
|
|||
};
|
||||
|
||||
useEffect(() => {
|
||||
const scheduledWorkflow = workflowData?.ListWorkflow.workflows;
|
||||
const scheduledWorkflow = workflowData?.listWorkflows.workflows;
|
||||
if (scheduledWorkflow) {
|
||||
setworkflowSchedulesDetails(
|
||||
(scheduledWorkflow[0] ? scheduledWorkflow[0] : null) as ScheduleWorkflow
|
||||
(scheduledWorkflow[0]
|
||||
? scheduledWorkflow[0]
|
||||
: null) as unknown as ScheduleWorkflow
|
||||
);
|
||||
}
|
||||
}, [workflowData]);
|
||||
|
|
@ -156,21 +155,19 @@ const WorkflowDetails: React.FC = () => {
|
|||
|
||||
// Setting NodeId of first Node in redux for selection of first node in Argo graph by default
|
||||
useEffect(() => {
|
||||
if (workflowRun !== undefined && pod_name === '') {
|
||||
if (workflowRun !== undefined && podName === '') {
|
||||
if (
|
||||
JSON.parse(workflowRun.execution_data as string).nodes !== null &&
|
||||
Object.keys(JSON.parse(workflowRun.execution_data as string).nodes)
|
||||
JSON.parse(workflowRun.executionData as string).nodes !== null &&
|
||||
Object.keys(JSON.parse(workflowRun.executionData as string).nodes)
|
||||
.length
|
||||
) {
|
||||
const firstNodeId = JSON.parse(workflowRun.execution_data as string)
|
||||
const firstNodeId = JSON.parse(workflowRun.executionData as string)
|
||||
.nodes[
|
||||
Object.keys(JSON.parse(workflowRun.execution_data as string).nodes)[0]
|
||||
Object.keys(JSON.parse(workflowRun.executionData as string).nodes)[0]
|
||||
].name;
|
||||
nodeSelection.selectNode({
|
||||
...JSON.parse(workflowRun.execution_data as string).nodes[
|
||||
firstNodeId
|
||||
],
|
||||
pod_name: firstNodeId,
|
||||
...JSON.parse(workflowRun.executionData as string).nodes[firstNodeId],
|
||||
podName: firstNodeId,
|
||||
});
|
||||
} else {
|
||||
setWorkflowFailed(true);
|
||||
|
|
@ -185,10 +182,10 @@ const WorkflowDetails: React.FC = () => {
|
|||
<BackButton />
|
||||
</div>
|
||||
{/* If workflowRun data is present then display the workflowRun details */}
|
||||
{workflowRun && pod_name !== '' && !loading ? (
|
||||
{workflowRun && podName !== '' && !loading ? (
|
||||
<div>
|
||||
<Typography data-cy="wfName" className={classes.title}>
|
||||
{t('workflowDetailsView.headerDesc')} {workflowRun.workflow_name}
|
||||
{t('workflowDetailsView.headerDesc')} {workflowRun.workflowName}
|
||||
</Typography>
|
||||
|
||||
{/* AppBar */}
|
||||
|
|
@ -220,7 +217,7 @@ const WorkflowDetails: React.FC = () => {
|
|||
{/* Argo Workflow DAG Graph */}
|
||||
<ArgoWorkflow
|
||||
nodes={
|
||||
(JSON.parse(workflowRun.execution_data) as ExecutionData)
|
||||
(JSON.parse(workflowRun.executionData) as ExecutionData)
|
||||
.nodes
|
||||
}
|
||||
setIsInfoToggled={setIsInfoToggled}
|
||||
|
|
@ -229,23 +226,23 @@ const WorkflowDetails: React.FC = () => {
|
|||
{/* Workflow Details and Experiment Logs */}
|
||||
{isInfoToggled ? (
|
||||
<div>
|
||||
{pod_name !==
|
||||
JSON.parse(workflowRun.execution_data).nodes[
|
||||
{podName !==
|
||||
JSON.parse(workflowRun.executionData).nodes[
|
||||
Object.keys(
|
||||
JSON.parse(workflowRun.execution_data as string).nodes
|
||||
JSON.parse(workflowRun.executionData as string).nodes
|
||||
)[0]
|
||||
].name ? (
|
||||
/* Node details and Logs */
|
||||
<WorkflowNodeInfo
|
||||
manifest={
|
||||
workflowSchedulesDetails?.workflow_manifest as string
|
||||
workflowSchedulesDetails?.workflowManifest as string
|
||||
}
|
||||
setIsInfoToggled={setIsInfoToggled}
|
||||
cluster_id={workflowRun.cluster_id}
|
||||
workflow_run_id={workflowRun.workflow_run_id}
|
||||
clusterID={workflowRun.clusterID}
|
||||
workflowRunID={workflowRun.workflowRunID}
|
||||
data={
|
||||
JSON.parse(
|
||||
workflowRun.execution_data
|
||||
workflowRun.executionData
|
||||
) as ExecutionData
|
||||
}
|
||||
/>
|
||||
|
|
@ -254,14 +251,14 @@ const WorkflowDetails: React.FC = () => {
|
|||
<WorkflowInfo
|
||||
tab={1}
|
||||
setIsInfoToggled={setIsInfoToggled}
|
||||
workflow_phase={workflowRun.phase}
|
||||
cluster_name={workflowRun.cluster_name}
|
||||
workflowPhase={workflowRun.phase}
|
||||
clusterName={workflowRun.clusterName}
|
||||
data={
|
||||
JSON.parse(
|
||||
workflowRun.execution_data
|
||||
workflowRun.executionData
|
||||
) as ExecutionData
|
||||
}
|
||||
resiliency_score={workflowRun.resiliency_score}
|
||||
resiliencyScore={workflowRun.resiliencyScore}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -274,27 +271,27 @@ const WorkflowDetails: React.FC = () => {
|
|||
{/* Workflow Info */}
|
||||
<WorkflowInfo
|
||||
tab={2}
|
||||
workflow_phase={workflowRun.phase}
|
||||
cluster_name={workflowRun.cluster_name}
|
||||
data={JSON.parse(workflowRun.execution_data) as ExecutionData}
|
||||
resiliency_score={workflowRun.resiliency_score}
|
||||
workflowPhase={workflowRun.phase}
|
||||
clusterName={workflowRun.clusterName}
|
||||
data={JSON.parse(workflowRun.executionData) as ExecutionData}
|
||||
resiliencyScore={workflowRun.resiliencyScore}
|
||||
/>
|
||||
{/* Table for all Node details */}
|
||||
<NodeTable
|
||||
manifest={
|
||||
workflowSchedulesDetails?.workflow_manifest as string
|
||||
workflowSchedulesDetails?.workflowManifest as string
|
||||
}
|
||||
data={JSON.parse(workflowRun.execution_data) as ExecutionData}
|
||||
data={JSON.parse(workflowRun.executionData) as ExecutionData}
|
||||
handleClose={() => setLogsModalOpen(true)}
|
||||
/>
|
||||
{/* Modal for viewing logs of a node */}
|
||||
<NodeLogsModal
|
||||
logsOpen={logsModalOpen}
|
||||
handleClose={() => setLogsModalOpen(false)}
|
||||
cluster_id={workflowRun.cluster_id}
|
||||
workflow_run_id={workflowRun.workflow_run_id}
|
||||
data={JSON.parse(workflowRun.execution_data) as ExecutionData}
|
||||
workflow_name={workflowRun.workflow_name}
|
||||
clusterID={workflowRun.clusterID}
|
||||
workflowRunID={workflowRun.workflowRunID}
|
||||
data={JSON.parse(workflowRun.executionData) as ExecutionData}
|
||||
workflowName={workflowRun.workflowName}
|
||||
/>
|
||||
</SuspenseLoader>
|
||||
</TabPanel>
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
>(GET_WORKFLOW_RUNS_STATS, {
|
||||
variables: {
|
||||
workflowRunStatsRequest: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [workflowID],
|
||||
projectID,
|
||||
workflowIDs: [workflowID],
|
||||
},
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
|
|
@ -68,22 +68,22 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
const graphData: RadialChartMetric[] = [
|
||||
{
|
||||
value: isSingleRun
|
||||
? data?.getWorkflowRunStats.experiments_passed ?? 0
|
||||
: data?.getWorkflowRunStats.succeeded_workflow_runs ?? 0,
|
||||
? data?.getWorkflowRunStats.experimentsPassed ?? 0
|
||||
: data?.getWorkflowRunStats.succeededWorkflowRuns ?? 0,
|
||||
label: isSingleRun ? 'Passed' : 'Succeeded',
|
||||
baseColor: theme.palette.status.experiment.completed,
|
||||
},
|
||||
{
|
||||
value: isSingleRun
|
||||
? data?.getWorkflowRunStats.experiments_failed ?? 0
|
||||
: data?.getWorkflowRunStats.failed_workflow_runs ?? 0,
|
||||
? data?.getWorkflowRunStats.experimentsFailed ?? 0
|
||||
: data?.getWorkflowRunStats.failedWorkflowRuns ?? 0,
|
||||
label: 'Failed',
|
||||
baseColor: theme.palette.status.experiment.failed,
|
||||
},
|
||||
{
|
||||
value: isSingleRun
|
||||
? data?.getWorkflowRunStats.experiments_awaited ?? 0
|
||||
: data?.getWorkflowRunStats.running_workflow_runs ?? 0,
|
||||
? data?.getWorkflowRunStats.experimentsAwaited ?? 0
|
||||
: data?.getWorkflowRunStats.runningWorkflowRuns ?? 0,
|
||||
label: isSingleRun ? 'Awaited' : 'Running',
|
||||
baseColor: theme.palette.status.workflow.running,
|
||||
},
|
||||
|
|
@ -92,12 +92,12 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
if (isSingleRun) {
|
||||
graphData.push(
|
||||
{
|
||||
value: data?.getWorkflowRunStats.experiments_stopped ?? 0,
|
||||
value: data?.getWorkflowRunStats.experimentsStopped ?? 0,
|
||||
label: 'Stopped',
|
||||
baseColor: theme.palette.status.experiment.error,
|
||||
},
|
||||
{
|
||||
value: data?.getWorkflowRunStats.experiments_na ?? 0,
|
||||
value: data?.getWorkflowRunStats.experimentsNa ?? 0,
|
||||
label: 'NA',
|
||||
baseColor: theme.palette.status.experiment.omitted,
|
||||
}
|
||||
|
|
@ -109,10 +109,10 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
};
|
||||
|
||||
const progressGraphData = {
|
||||
value: data?.getWorkflowRunStats.average_resiliency_score ?? 0,
|
||||
value: data?.getWorkflowRunStats.averageResiliencyScore ?? 0,
|
||||
label: 'Avg Resiliency Score',
|
||||
baseColor: getValueColor(
|
||||
data?.getWorkflowRunStats.average_resiliency_score ?? 0,
|
||||
data?.getWorkflowRunStats.averageResiliencyScore ?? 0,
|
||||
resilienceScoreColourMap
|
||||
),
|
||||
};
|
||||
|
|
@ -136,7 +136,7 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
heading={
|
||||
isSingleRun
|
||||
? 'Experiments'
|
||||
: data?.getWorkflowRunStats.total_workflow_runs !== 1
|
||||
: data?.getWorkflowRunStats.totalWorkflowRuns !== 1
|
||||
? 'Runs'
|
||||
: 'Run'
|
||||
}
|
||||
|
|
@ -194,14 +194,13 @@ const WorkflowStats: React.FC<WorkflowStatsProps> = ({
|
|||
passPercentage={
|
||||
showWorkflowStats
|
||||
? data?.getWorkflowRunStats
|
||||
.workflow_run_succeeded_percentage ?? 0
|
||||
: data?.getWorkflowRunStats.passed_percentage ?? 0
|
||||
.workflowRunSucceededPercentage ?? 0
|
||||
: data?.getWorkflowRunStats.passedPercentage ?? 0
|
||||
}
|
||||
failPercentage={
|
||||
showWorkflowStats
|
||||
? data?.getWorkflowRunStats
|
||||
.workflow_run_failed_percentage ?? 0
|
||||
: data?.getWorkflowRunStats.failed_percentage ?? 0
|
||||
? data?.getWorkflowRunStats.workflowRunFailedPercentage ?? 0
|
||||
: data?.getWorkflowRunStats.failedPercentage ?? 0
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -39,13 +39,13 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
<Typography>
|
||||
Name :{' '}
|
||||
<span className={classes.infoHint} data-cy="infoWorkflowName">
|
||||
{data.ListWorkflow.workflows[0].workflow_name}
|
||||
{data.listWorkflows.workflows[0].workflowName}
|
||||
</span>
|
||||
</Typography>
|
||||
<Typography>
|
||||
Id :{' '}
|
||||
<span className={classes.infoHint} data-cy="infoWorkflowId">
|
||||
{data.ListWorkflow.workflows[0].workflow_id}
|
||||
{data.listWorkflows.workflows[0].workflowID}
|
||||
</span>
|
||||
</Typography>
|
||||
{data && (
|
||||
|
|
@ -57,7 +57,7 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
>
|
||||
{
|
||||
YAML.parse(
|
||||
data?.ListWorkflow.workflows[0].workflow_manifest
|
||||
data?.listWorkflows.workflows[0].workflowManifest
|
||||
).metadata.labels.subject
|
||||
}
|
||||
</span>
|
||||
|
|
@ -72,7 +72,7 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
>
|
||||
{
|
||||
YAML.parse(
|
||||
data?.ListWorkflow.workflows[0].workflow_manifest
|
||||
data?.listWorkflows.workflows[0].workflowManifest
|
||||
).metadata.namespace
|
||||
}
|
||||
</span>
|
||||
|
|
@ -86,13 +86,13 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
<Typography>
|
||||
Name :{' '}
|
||||
<span className={classes.infoHint} data-cy="infoAgentName">
|
||||
{data.ListWorkflow.workflows[0].cluster_name}
|
||||
{data.listWorkflows.workflows[0].clusterName}
|
||||
</span>
|
||||
</Typography>
|
||||
<Typography>
|
||||
Id :{' '}
|
||||
<span className={classes.infoHint} data-cy="infoClusterId">
|
||||
{data.ListWorkflow.workflows[0].cluster_id}
|
||||
{data.listWorkflows.workflows[0].clusterID}
|
||||
</span>
|
||||
</Typography>
|
||||
</div>
|
||||
|
|
@ -105,16 +105,16 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
Last Run :{' '}
|
||||
<span className={classes.infoHint}>
|
||||
{timeDifferenceForDate(
|
||||
data.ListWorkflow.workflows[0].updated_at
|
||||
data.listWorkflows.workflows[0].updatedAt
|
||||
)}
|
||||
</span>
|
||||
</Typography>
|
||||
<Typography data-cy="infoWorkflowNextRun">
|
||||
Next Run :{' '}
|
||||
{data.ListWorkflow.workflows[0].cronSyntax ? (
|
||||
{data.listWorkflows.workflows[0].cronSyntax ? (
|
||||
<span className={classes.infoHint}>
|
||||
{parser
|
||||
.parseExpression(data.ListWorkflow.workflows[0].cronSyntax)
|
||||
.parseExpression(data.listWorkflows.workflows[0].cronSyntax)
|
||||
.next()
|
||||
.toString()}
|
||||
</span>
|
||||
|
|
@ -126,13 +126,13 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
{/* Column 4 */}
|
||||
<div className={classes.regularity} data-cy="infoWorkflowRegularity">
|
||||
<Typography className={classes.infoHeader}>Regularity :</Typography>
|
||||
{data.ListWorkflow.workflows[0].cronSyntax === '' ? (
|
||||
{data.listWorkflows.workflows[0].cronSyntax === '' ? (
|
||||
<Typography>Non cron workflow</Typography>
|
||||
) : (
|
||||
data.ListWorkflow.workflows[0].cronSyntax !== undefined && (
|
||||
data.listWorkflows.workflows[0].cronSyntax !== undefined && (
|
||||
<Typography>
|
||||
{cronstrue.toString(
|
||||
data.ListWorkflow.workflows[0].cronSyntax
|
||||
data.listWorkflows.workflows[0].cronSyntax
|
||||
)}
|
||||
</Typography>
|
||||
)
|
||||
|
|
@ -141,8 +141,8 @@ const InfoSection: React.FC<InfoSectionProps> = ({
|
|||
</div>
|
||||
{showMore && (
|
||||
<WorkflowStats
|
||||
workflowID={data.ListWorkflow.workflows[0].workflow_id}
|
||||
isCron={data.ListWorkflow.workflows[0].cronSyntax !== ''}
|
||||
workflowID={data.listWorkflows.workflows[0].workflowID}
|
||||
isCron={data.listWorkflows.workflows[0].cronSyntax !== ''}
|
||||
noOfWorkflowRuns={workflowRunLength ?? 0}
|
||||
/>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import Center from '../../../containers/layouts/Center';
|
|||
import { WORKFLOW_DETAILS } from '../../../graphql';
|
||||
import {
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowDataRequest,
|
||||
} from '../../../models/graphql/workflowData';
|
||||
import { getProjectID } from '../../../utils/getSearchParams';
|
||||
import WorkflowRunTable from '../WorkflowRunTable';
|
||||
|
|
@ -60,20 +60,20 @@ const StackedBarGraph: React.FC<StackedBarGraphProps> = ({
|
|||
return '';
|
||||
};
|
||||
|
||||
const { data, loading } = useQuery<Workflow, WorkflowDataVars>(
|
||||
const { data, loading } = useQuery<Workflow, WorkflowDataRequest>(
|
||||
WORKFLOW_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [workflowID],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [workflowID],
|
||||
sort: {
|
||||
field: 'Time',
|
||||
field: 'TIME',
|
||||
},
|
||||
filter: {
|
||||
date_range: {
|
||||
start_date: moment.unix(date).startOf('day').unix().toString(),
|
||||
end_date: moment.unix(date).endOf('day').unix().toString(),
|
||||
dateRange: {
|
||||
startDate: moment.unix(date).startOf('day').unix().toString(),
|
||||
endDate: moment.unix(date).endOf('day').unix().toString(),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -82,30 +82,30 @@ const StackedBarGraph: React.FC<StackedBarGraphProps> = ({
|
|||
}
|
||||
);
|
||||
|
||||
if (data?.getWorkflowRuns.workflow_runs) {
|
||||
data.getWorkflowRuns.workflow_runs.forEach((wfrun) => {
|
||||
if (data?.listWorkflowRuns.workflowRuns) {
|
||||
data.listWorkflowRuns.workflowRuns.forEach((wfrun) => {
|
||||
if (wfrun.phase !== 'Running') {
|
||||
stackBarData.push({
|
||||
id: wfrun.workflow_run_id,
|
||||
date: Number(wfrun.last_updated) * 1000,
|
||||
id: wfrun.workflowRunID,
|
||||
date: Number(wfrun.lastUpdated) * 1000,
|
||||
passPercentage:
|
||||
wfrun.total_experiments &&
|
||||
wfrun.experiments_passed &&
|
||||
wfrun.total_experiments > 0
|
||||
? (wfrun.experiments_passed * 100) / wfrun.total_experiments
|
||||
wfrun.totalExperiments &&
|
||||
wfrun.experimentsPassed &&
|
||||
wfrun.totalExperiments > 0
|
||||
? (wfrun.experimentsPassed * 100) / wfrun.totalExperiments
|
||||
: 0,
|
||||
failPercentage:
|
||||
wfrun.total_experiments &&
|
||||
!wfrun.experiments_failed &&
|
||||
wfrun.total_experiments > 0
|
||||
? (wfrun.experiments_failed * 100) / wfrun.total_experiments
|
||||
wfrun.totalExperiments &&
|
||||
!wfrun.experimentsFailed &&
|
||||
wfrun.totalExperiments > 0
|
||||
? (wfrun.experimentsFailed * 100) / wfrun.totalExperiments
|
||||
: 0,
|
||||
passCount: wfrun.experiments_passed ?? 0,
|
||||
failCount: wfrun.experiments_failed ?? 0,
|
||||
passCount: wfrun.experimentsPassed ?? 0,
|
||||
failCount: wfrun.experimentsFailed ?? 0,
|
||||
});
|
||||
openSeries.data.push({
|
||||
date: Number(wfrun.last_updated) * 1000,
|
||||
value: wfrun.resiliency_score ?? 0,
|
||||
date: Number(wfrun.lastUpdated) * 1000,
|
||||
value: wfrun.resiliencyScore ?? 0,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -220,8 +220,8 @@ const StackedBarGraph: React.FC<StackedBarGraphProps> = ({
|
|||
</div>
|
||||
{showTable && (
|
||||
<WorkflowRunTable
|
||||
workflowId={workflowID}
|
||||
workflowRunId={workflowRunID}
|
||||
workflowID={workflowID}
|
||||
workflowRunID={workflowRunID}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -14,16 +14,16 @@ import React, { useState } from 'react';
|
|||
import { useTranslation } from 'react-i18next';
|
||||
import Loader from '../../../components/Loader';
|
||||
import Center from '../../../containers/layouts/Center';
|
||||
import { WORKFLOW_LIST_DETAILS, WORKFLOW_RUN_DETAILS } from '../../../graphql';
|
||||
import { GET_WORKFLOW_DETAILS, WORKFLOW_RUN_DETAILS } from '../../../graphql';
|
||||
import {
|
||||
ExecutionData,
|
||||
Pagination,
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowRunFilterInput,
|
||||
WorkflowDataRequest,
|
||||
WorkflowRunFilterRequest,
|
||||
} from '../../../models/graphql/workflowData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
WeightageMap,
|
||||
} from '../../../models/graphql/workflowListData';
|
||||
|
|
@ -60,13 +60,13 @@ interface WorkFlowTests {
|
|||
}
|
||||
|
||||
interface WorkflowRunTableProps {
|
||||
workflowId: string;
|
||||
workflowRunId: string;
|
||||
workflowID: string;
|
||||
workflowRunID: string;
|
||||
}
|
||||
|
||||
const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
||||
workflowId,
|
||||
workflowRunId,
|
||||
workflowID,
|
||||
workflowRunID,
|
||||
}) => {
|
||||
// get ProjectID
|
||||
const projectID = getProjectID();
|
||||
|
|
@ -75,12 +75,12 @@ const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
|||
|
||||
const [wfRunData, setWfRunData] = React.useState<WorkFlowTests[]>([]);
|
||||
|
||||
const [dateRange, setDateRange] = React.useState<WorkflowRunFilterInput>({
|
||||
workflow_name: '',
|
||||
cluster_name: 'All',
|
||||
workflow_status: 'All',
|
||||
date_range: {
|
||||
start_date: new Date(0).valueOf().toString(),
|
||||
const [dateRange, setDateRange] = React.useState<WorkflowRunFilterRequest>({
|
||||
workflowName: '',
|
||||
clusterName: 'All',
|
||||
workflowStatus: 'All',
|
||||
dateRange: {
|
||||
startDate: new Date(0).valueOf().toString(),
|
||||
},
|
||||
});
|
||||
|
||||
|
|
@ -142,21 +142,21 @@ const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
|||
data: weightageDetail,
|
||||
loading: loadWeightage,
|
||||
error: errorWeightage,
|
||||
} = useQuery<ScheduledWorkflows, ListWorkflowsInput>(WORKFLOW_LIST_DETAILS, {
|
||||
} = useQuery<ScheduledWorkflows, GetWorkflowsRequest>(GET_WORKFLOW_DETAILS, {
|
||||
variables: {
|
||||
workflowInput: { project_id: projectID, workflow_ids: [workflowId] },
|
||||
request: { projectID, workflowIDs: [workflowID] },
|
||||
},
|
||||
});
|
||||
|
||||
const { loading: loadWfRun, error: errorWfRun } = useQuery<
|
||||
Workflow,
|
||||
WorkflowDataVars
|
||||
WorkflowDataRequest
|
||||
>(WORKFLOW_RUN_DETAILS, {
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [workflowId],
|
||||
workflow_run_ids: [workflowRunId],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [workflowID],
|
||||
workflowRunIDs: [workflowRunID],
|
||||
pagination: {
|
||||
page: paginationData.page,
|
||||
limit: paginationData.limit,
|
||||
|
|
@ -166,9 +166,9 @@ const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
|||
},
|
||||
onCompleted: (data) => {
|
||||
const workflowTestsArray: WorkFlowTests[] = [];
|
||||
if (data.getWorkflowRuns.workflow_runs.length > 0) {
|
||||
if (data.listWorkflowRuns.workflowRuns) {
|
||||
const executionData: ExecutionData = JSON.parse(
|
||||
data?.getWorkflowRuns?.workflow_runs[0]?.execution_data
|
||||
data.listWorkflowRuns.workflowRuns[0].executionData
|
||||
);
|
||||
const { nodes } = executionData;
|
||||
let index: number = 1;
|
||||
|
|
@ -178,11 +178,11 @@ const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
|||
if (node.chaosData) {
|
||||
const { chaosData } = node;
|
||||
const weightageMap: WeightageMap[] = weightageDetail
|
||||
? weightageDetail?.ListWorkflow.workflows[0]?.weightages
|
||||
? weightageDetail?.listWorkflows.workflows[0]?.weightages
|
||||
: [];
|
||||
/* eslint-disable no-loop-func */
|
||||
weightageMap.forEach((weightage) => {
|
||||
if (weightage.experiment_name === node.name) {
|
||||
if (weightage.experimentName === node.name) {
|
||||
workflowTestsArray.push({
|
||||
test_id: index,
|
||||
test_name: node.name,
|
||||
|
|
@ -274,12 +274,12 @@ const WorkflowRunTable: React.FC<WorkflowRunTableProps> = ({
|
|||
// Change filter value for date range
|
||||
setDateRange({
|
||||
...dateRange,
|
||||
date_range: {
|
||||
start_date: new Date(selectStartDate)
|
||||
dateRange: {
|
||||
startDate: new Date(selectStartDate)
|
||||
.setHours(0, 0, 0)
|
||||
.valueOf()
|
||||
.toString(),
|
||||
end_date: new Date(selectEndDate)
|
||||
endDate: new Date(selectEndDate)
|
||||
.setHours(23, 59, 59)
|
||||
.valueOf()
|
||||
.toString(),
|
||||
|
|
|
|||
|
|
@ -22,15 +22,18 @@ import BackButton from '../../components/Button/BackButton';
|
|||
import Loader from '../../components/Loader';
|
||||
import Center from '../../containers/layouts/Center';
|
||||
import Wrapper from '../../containers/layouts/Wrapper';
|
||||
import { WORKFLOW_LIST_DETAILS } from '../../graphql/queries';
|
||||
import {
|
||||
GET_WORKFLOW_DETAILS,
|
||||
WORKFLOW_RUN_DETAILS,
|
||||
} from '../../graphql/queries';
|
||||
import {
|
||||
HeatmapDataRequest,
|
||||
HeatmapDataResponse,
|
||||
HeatmapDataVars,
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowDataRequest,
|
||||
} from '../../models/graphql/workflowData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
} from '../../models/graphql/workflowListData';
|
||||
import { history } from '../../redux/configureStore';
|
||||
|
|
@ -55,9 +58,9 @@ const TestCalendarHeatmapTooltip = ({
|
|||
{tooltipData?.data?.bin?.bin.value ?? 0}% Average Resiliency
|
||||
</div>
|
||||
<div>
|
||||
{tooltipData?.data?.bin?.bin.workflowRunDetail.no_of_runs ?? 0}{' '}
|
||||
completed runs on{' '}
|
||||
{formatDate(tooltipData?.data?.bin?.bin.workflowRunDetail.date_stamp) ??
|
||||
{tooltipData?.data?.bin?.bin.workflowRunDetail.noOfRuns ?? 0} completed
|
||||
runs on{' '}
|
||||
{formatDate(tooltipData?.data?.bin?.bin.workflowRunDetail.dateStamp) ??
|
||||
''}
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -65,7 +68,7 @@ const TestCalendarHeatmapTooltip = ({
|
|||
};
|
||||
|
||||
interface URLParams {
|
||||
workflowId: string;
|
||||
workflowID: string;
|
||||
}
|
||||
|
||||
const valueThreshold = [13, 26, 39, 49, 59, 69, 79, 89, 100];
|
||||
|
|
@ -76,44 +79,36 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
const { t } = useTranslation();
|
||||
const theme = useTheme();
|
||||
|
||||
const { workflowId }: URLParams = useParams();
|
||||
const { workflowID }: URLParams = useParams();
|
||||
|
||||
// Keep track of whether workflow has run or not
|
||||
const [hasWorkflowRun, setHasWorkflowRun] = useState<boolean>(true);
|
||||
|
||||
// Apollo query to get the scheduled workflow data
|
||||
const { data } = useQuery<ScheduledWorkflows, ListWorkflowsInput>(
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
const { data } = useQuery<ScheduledWorkflows, GetWorkflowsRequest>(
|
||||
GET_WORKFLOW_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowInput: { project_id: projectID, workflow_ids: [workflowId] },
|
||||
request: { projectID, workflowIDs: [workflowID] },
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
}
|
||||
);
|
||||
|
||||
const { data: workflowRunData } = useQuery<Workflow, WorkflowDataVars>(
|
||||
gql`
|
||||
query workflowDetails($workflowRunsInput: GetWorkflowRunsInput!) {
|
||||
getWorkflowRuns(workflowRunsInput: $workflowRunsInput) {
|
||||
total_no_of_workflow_runs
|
||||
workflow_runs {
|
||||
workflow_run_id
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
// TODO: shift out
|
||||
const { data: workflowRunData } = useQuery<Workflow, WorkflowDataRequest>(
|
||||
WORKFLOW_RUN_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [workflowId],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [workflowID],
|
||||
},
|
||||
},
|
||||
onCompleted: () => {
|
||||
setHasWorkflowRun(
|
||||
workflowRunData !== undefined &&
|
||||
workflowRunData.getWorkflowRuns.total_no_of_workflow_runs > 0
|
||||
workflowRunData.listWorkflowRuns.totalNoOfWorkflowRuns > 0
|
||||
);
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
|
|
@ -121,7 +116,7 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
);
|
||||
|
||||
const workflowRunID =
|
||||
workflowRunData?.getWorkflowRuns?.workflow_runs[0]?.workflow_run_id ?? '';
|
||||
workflowRunData?.listWorkflowRuns?.workflowRuns[0]?.workflowRunID ?? '';
|
||||
|
||||
const presentYear = new Date().getFullYear();
|
||||
const [showTable, setShowTable] = useState<boolean>(false);
|
||||
|
|
@ -136,27 +131,28 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
setShowTable(false);
|
||||
};
|
||||
|
||||
// TODO: shift out
|
||||
// Apollo query to get the heatmap data
|
||||
const { data: heatmapData, loading } = useQuery<
|
||||
HeatmapDataResponse,
|
||||
HeatmapDataVars
|
||||
HeatmapDataRequest
|
||||
>(
|
||||
gql`
|
||||
query getHeatmapData(
|
||||
$project_id: String!
|
||||
$workflow_id: String!
|
||||
query listHeatmapData(
|
||||
$projectID: String!
|
||||
$workflowID: String!
|
||||
$year: Int!
|
||||
) {
|
||||
getHeatmapData(
|
||||
project_id: $project_id
|
||||
workflow_id: $workflow_id
|
||||
listHeatmapData(
|
||||
projectID: $projectID
|
||||
workflowID: $workflowID
|
||||
year: $year
|
||||
) {
|
||||
bins {
|
||||
value
|
||||
workflowRunDetail {
|
||||
no_of_runs
|
||||
date_stamp
|
||||
noOfRuns
|
||||
dateStamp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -164,8 +160,8 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
`,
|
||||
{
|
||||
variables: {
|
||||
project_id: projectID,
|
||||
workflow_id: workflowId,
|
||||
projectID,
|
||||
workflowID,
|
||||
year,
|
||||
},
|
||||
fetchPolicy: 'cache-and-network',
|
||||
|
|
@ -215,7 +211,7 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
<div className={classes.headingSection}>
|
||||
<div className={classes.pageHeading}>
|
||||
<Typography className={classes.heading} data-cy="statsWorkflowName">
|
||||
{data?.ListWorkflow.workflows[0].workflow_name}
|
||||
{data?.listWorkflows.workflows[0].workflowName}
|
||||
</Typography>
|
||||
<Typography className={classes.subHeading}>
|
||||
Here’s the statistics of the selected workflow
|
||||
|
|
@ -232,16 +228,16 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
<InfoSection
|
||||
data={data}
|
||||
workflowRunLength={
|
||||
workflowRunData.getWorkflowRuns.total_no_of_workflow_runs
|
||||
workflowRunData.listWorkflowRuns.totalNoOfWorkflowRuns
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Visulization Area */}
|
||||
{/* Check for cron workflow OR single workflow which has been re-run */}
|
||||
{data?.ListWorkflow.workflows[0].cronSyntax !== '' ||
|
||||
(workflowRunData?.getWorkflowRuns.total_no_of_workflow_runs &&
|
||||
workflowRunData?.getWorkflowRuns.total_no_of_workflow_runs > 1) ? (
|
||||
{data?.listWorkflows.workflows[0].cronSyntax !== '' ||
|
||||
(workflowRunData?.listWorkflowRuns.totalNoOfWorkflowRuns &&
|
||||
workflowRunData?.listWorkflowRuns.totalNoOfWorkflowRuns > 1) ? (
|
||||
<div className={classes.heatmapArea}>
|
||||
<div className={classes.heatmapAreaHeading}>
|
||||
<Typography className={classes.sectionHeading}>
|
||||
|
|
@ -253,7 +249,7 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
<div className={classes.formControlParent}>
|
||||
<Typography>
|
||||
Total runs till date:{' '}
|
||||
{workflowRunData?.getWorkflowRuns.total_no_of_workflow_runs}
|
||||
{workflowRunData?.listWorkflowRuns.totalNoOfWorkflowRuns}
|
||||
</Typography>
|
||||
<FormControl
|
||||
className={classes.formControl}
|
||||
|
|
@ -285,12 +281,12 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
) : (
|
||||
<div className={classes.heatmapParent} data-cy="statsHeatMap">
|
||||
<CalendarHeatmap
|
||||
calendarHeatmapMetric={heatmapData?.getHeatmapData ?? []}
|
||||
calendarHeatmapMetric={heatmapData?.listHeatmapData ?? []}
|
||||
valueThreshold={valueThreshold}
|
||||
CalendarHeatmapTooltip={TestCalendarHeatmapTooltip}
|
||||
handleBinClick={(bin: any) => {
|
||||
if (bin) {
|
||||
if (bin?.bin?.workflowRunDetail.no_of_runs === 0) {
|
||||
if (bin?.bin?.workflowRunDetail.noOfRuns === 0) {
|
||||
setDataCheck(true);
|
||||
setShowStackBar(false);
|
||||
handleTableClose();
|
||||
|
|
@ -299,7 +295,7 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
handleTableClose();
|
||||
setBinResiliencyScore(bin.bin.value);
|
||||
setWorkflowRunDate(
|
||||
bin.bin.workflowRunDetail.date_stamp
|
||||
bin.bin.workflowRunDetail.dateStamp
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -329,7 +325,7 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
<StackedBarGraph
|
||||
date={workflowRunDate}
|
||||
averageResiliency={binResiliencyScore}
|
||||
workflowID={workflowId}
|
||||
workflowID={workflowID}
|
||||
handleTableOpen={handleTableOpen}
|
||||
handleTableClose={handleTableClose}
|
||||
showTable={showTable}
|
||||
|
|
@ -345,8 +341,8 @@ const WorkflowInfoStats: React.FC = () => {
|
|||
</div>
|
||||
) : (
|
||||
<WorkflowRunTable
|
||||
workflowId={workflowId}
|
||||
workflowRunId={workflowRunID}
|
||||
workflowID={workflowID}
|
||||
workflowRunID={workflowRunID}
|
||||
/>
|
||||
)}
|
||||
</Wrapper>
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
import {
|
||||
HubDetails,
|
||||
MyHubAction,
|
||||
MyHubActions,
|
||||
HubDetails,
|
||||
} from '../../models/redux/myhub';
|
||||
import createReducer from './createReducer';
|
||||
|
||||
const initialState: HubDetails = {
|
||||
id: '',
|
||||
HubName: '',
|
||||
RepoURL: '',
|
||||
RepoBranch: '',
|
||||
TotalExp: '',
|
||||
IsAvailable: true,
|
||||
IsPrivate: false,
|
||||
Token: '',
|
||||
UserName: '',
|
||||
Password: '',
|
||||
SSHPrivateKey: '',
|
||||
SSHPublicKey: '',
|
||||
LastSyncedAt: '',
|
||||
hubName: '',
|
||||
repoURL: '',
|
||||
repoBranch: '',
|
||||
totalExp: '',
|
||||
isAvailable: true,
|
||||
isPrivate: false,
|
||||
token: '',
|
||||
userName: '',
|
||||
password: '',
|
||||
sshPrivateKey: '',
|
||||
sshPublicKey: '',
|
||||
lastSyncedAt: '',
|
||||
};
|
||||
|
||||
export const hubDetails = createReducer<HubDetails>(initialState, {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ const initialState: SelectedNode = {
|
|||
finishedAt: '',
|
||||
message: '',
|
||||
name: '',
|
||||
pod_name: '',
|
||||
podName: '',
|
||||
phase: '',
|
||||
startedAt: '',
|
||||
type: '',
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import createReducer from './createReducer';
|
|||
const initialState: WorkflowData = {
|
||||
chaosEngineChanged: false,
|
||||
namespace: '',
|
||||
clusterid: '',
|
||||
clusterID: '',
|
||||
cronSyntax: '',
|
||||
scheduleType: {
|
||||
scheduleOnce: 'now',
|
||||
|
|
@ -22,7 +22,7 @@ const initialState: WorkflowData = {
|
|||
time: new Date(),
|
||||
date: new Date(),
|
||||
},
|
||||
clustername: '',
|
||||
clusterName: '',
|
||||
};
|
||||
|
||||
const init: WorkflowManifest = {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
/* eslint-disable no-unused-expressions */
|
||||
import {
|
||||
ParsedChaosEventPrometheusData,
|
||||
ParsedMetricPrometheusData,
|
||||
|
|
@ -46,12 +47,12 @@ export const getDashboardQueryMap = (panelGroups: PanelGroupResponse[]) => {
|
|||
const queryMapPanel: queryMapForPanel[] = [];
|
||||
panelGroup.panels.forEach((panel) => {
|
||||
queryMapPanel.push({
|
||||
panelID: panel.panel_id,
|
||||
queryIDs: panel.prom_queries.map((query) => query.queryid),
|
||||
panelID: panel.panelID,
|
||||
queryIDs: panel.promQueries.map((query) => query.queryID),
|
||||
});
|
||||
});
|
||||
queryMapPanelGroup.push({
|
||||
panelGroupID: panelGroup.panel_group_id,
|
||||
panelGroupID: panelGroup.panelGroupID,
|
||||
panelQueryMap: queryMapPanel,
|
||||
});
|
||||
});
|
||||
|
|
@ -91,8 +92,8 @@ export const getPromQueryInput = (
|
|||
const promQueries: promQueryInput[] = [];
|
||||
prom_queries.forEach((query: PromQueryDetails) => {
|
||||
promQueries.push({
|
||||
queryid: query.queryid,
|
||||
query: query.prom_query_name,
|
||||
queryID: query.queryID,
|
||||
query: query.promQueryName,
|
||||
legend: query.legend,
|
||||
resolution: query.resolution,
|
||||
minstep:
|
||||
|
|
@ -104,7 +105,7 @@ export const getPromQueryInput = (
|
|||
});
|
||||
if (withEvents && eventQueryTemplate && verdictQueryTemplate) {
|
||||
promQueries.push({
|
||||
queryid: DEFAULT_CHAOS_EVENT_QUERY_ID,
|
||||
queryID: DEFAULT_CHAOS_EVENT_QUERY_ID,
|
||||
query: eventQueryTemplate,
|
||||
legend: DEFAULT_CHAOS_EVENT_AND_VERDICT_PROMETHEUS_QUERY_LEGEND,
|
||||
resolution: DEFAULT_CHAOS_EVENT_AND_VERDICT_PROMETHEUS_QUERY_RESOLUTION,
|
||||
|
|
@ -118,7 +119,7 @@ export const getPromQueryInput = (
|
|||
),
|
||||
});
|
||||
promQueries.push({
|
||||
queryid: DEFAULT_CHAOS_VERDICT_QUERY_ID,
|
||||
queryID: DEFAULT_CHAOS_VERDICT_QUERY_ID,
|
||||
query: verdictQueryTemplate,
|
||||
legend: DEFAULT_CHAOS_EVENT_AND_VERDICT_PROMETHEUS_QUERY_LEGEND,
|
||||
resolution: DEFAULT_CHAOS_EVENT_AND_VERDICT_PROMETHEUS_QUERY_RESOLUTION,
|
||||
|
|
@ -148,7 +149,7 @@ export const generatePromQueries = (
|
|||
const promQueries: promQueryInput[] = getPromQueryInput(
|
||||
dashboardMetaPanelGroups
|
||||
.flatMap((panelGroup) => (panelGroup ? panelGroup.panels ?? [] : []))
|
||||
.flatMap((panel) => (panel ? panel.prom_queries ?? [] : [])),
|
||||
.flatMap((panel) => (panel ? panel.promQueries ?? [] : [])),
|
||||
timeRangeDiff,
|
||||
true,
|
||||
chaosEventQueryTemplate,
|
||||
|
|
@ -168,7 +169,7 @@ export const MetricDataParserForPrometheus = (
|
|||
seriesData: [],
|
||||
closedAreaData: [],
|
||||
};
|
||||
metricData.forEach((queryResponse, mainIndex) => {
|
||||
metricData?.forEach((queryResponse, mainIndex) => {
|
||||
if (queryResponse && queryResponse.legends && queryResponse.tsvs) {
|
||||
let { legends } = queryResponse;
|
||||
let { tsvs } = queryResponse;
|
||||
|
|
@ -300,7 +301,7 @@ export const DashboardMetricDataParserForPrometheus = (
|
|||
selectedApplications?: string[]
|
||||
) => {
|
||||
const mappedData: QueryMapForPanelGroup[] = [];
|
||||
metricData.forEach((panelGroupData, panelGroupIndex) => {
|
||||
metricData?.forEach((panelGroupData, panelGroupIndex) => {
|
||||
mappedData.push({
|
||||
panelGroupID: panelGroupData.panelGroupID,
|
||||
metricDataForGroup: [],
|
||||
|
|
|
|||
|
|
@ -47,11 +47,11 @@ const SaveTemplateModal: React.FC<SaveTemplateModalProps> = ({
|
|||
ADD_WORKFLOW_TEMPLATE,
|
||||
{
|
||||
variables: {
|
||||
data: {
|
||||
request: {
|
||||
manifest: editManifest,
|
||||
template_name: templateName,
|
||||
template_description: templateDesc,
|
||||
project_id: getProjectID(),
|
||||
templateName,
|
||||
templateDescription: templateDesc,
|
||||
projectID: getProjectID(),
|
||||
isCustomWorkflow,
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
|
||||
const editSchedule = () => {
|
||||
history.push({
|
||||
pathname: `/workflows/schedule/${data.project_id}/${data.workflow_name}`,
|
||||
pathname: `/workflows/schedule/${data.projectID}/${data.workflowName}`,
|
||||
search: `?projectID=${projectID}&projectRole=${projectRole}`,
|
||||
});
|
||||
};
|
||||
|
|
@ -153,7 +153,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
reRunChaosWorkFlow({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
data: data.workflow_id,
|
||||
workflowID: data.workflowID,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
@ -201,12 +201,12 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<Typography>
|
||||
<span
|
||||
className={`${classes.boldText} ${
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true
|
||||
? classes.dark
|
||||
: ''
|
||||
}`}
|
||||
>
|
||||
{data.workflow_name}
|
||||
{data.workflowName}
|
||||
</span>
|
||||
</Typography>
|
||||
</TableCell>
|
||||
|
|
@ -214,18 +214,18 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<Typography className={classes.clusterData}>
|
||||
<span
|
||||
className={
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true
|
||||
? classes.dark
|
||||
: ''
|
||||
}
|
||||
>
|
||||
{data.cluster_name}
|
||||
{data.clusterName}
|
||||
</span>
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<Typography className={classes.clusterData}>
|
||||
<span>{data.last_updated_by || '-'}</span>
|
||||
<span>{data.lastUpdatedBy || '-'}</span>
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
|
|
@ -235,7 +235,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
>
|
||||
<span
|
||||
className={
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true
|
||||
? classes.dark
|
||||
: ''
|
||||
}
|
||||
|
|
@ -265,9 +265,9 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<div className={classes.weightDiv}>
|
||||
{data.weightages.map((expData) => {
|
||||
return (
|
||||
<div key={expData.experiment_name} style={{ marginBottom: 8 }}>
|
||||
<div key={expData.experimentName} style={{ marginBottom: 8 }}>
|
||||
<ExperimentPoints
|
||||
expName={expData.experiment_name}
|
||||
expName={expData.experimentName}
|
||||
weight={expData.weightage}
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -283,7 +283,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
>
|
||||
<span
|
||||
className={
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true
|
||||
? classes.dark
|
||||
: ''
|
||||
}
|
||||
|
|
@ -320,7 +320,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
{t('chaosWorkflows.browseSchedules.startingDate')} :
|
||||
</span>
|
||||
<span className={classes.scheduleDetailsValue}>
|
||||
{formatDate(data.created_at)}
|
||||
{formatDate(data.createdAt)}
|
||||
</span>
|
||||
</Typography>
|
||||
<Typography className={classes.scheduleDetailsFlex}>
|
||||
|
|
@ -328,7 +328,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
{t('chaosWorkflows.browseSchedules.lastUpdated')} :
|
||||
</span>
|
||||
<span className={classes.scheduleDetailsValue}>
|
||||
{timeDifferenceForDate(data.updated_at)}
|
||||
{timeDifferenceForDate(data.updatedAt)}
|
||||
</span>
|
||||
</Typography>
|
||||
<Typography className={classes.scheduleDetailsFlex}>
|
||||
|
|
@ -347,12 +347,12 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<TableCell>
|
||||
<span
|
||||
className={
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true
|
||||
? classes.dark
|
||||
: ''
|
||||
}
|
||||
>
|
||||
{YAML.parse(data.workflow_manifest).spec.suspend === true ? (
|
||||
{YAML.parse(data.workflowManifest).spec.suspend === true ? (
|
||||
<Typography>
|
||||
{t('chaosWorkflows.browseSchedules.scheduleIsDisabled')}
|
||||
</Typography>
|
||||
|
|
@ -374,7 +374,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<IconButton
|
||||
onClick={() => {
|
||||
tabs.changeWorkflowsTabs(0);
|
||||
setWorkflowName(data.workflow_name);
|
||||
setWorkflowName(data.workflowName);
|
||||
}}
|
||||
data-cy="showSchedules"
|
||||
>
|
||||
|
|
@ -450,7 +450,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
</Snackbar>
|
||||
{projectRole !== 'Viewer' &&
|
||||
data.cronSyntax !== '' &&
|
||||
YAML.parse(data.workflow_manifest).spec.suspend !== true && (
|
||||
YAML.parse(data.workflowManifest).spec.suspend !== true && (
|
||||
<MenuItem
|
||||
value="Disable"
|
||||
onClick={() => {
|
||||
|
|
@ -474,7 +474,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
)}
|
||||
|
||||
{projectRole !== 'Viewer' &&
|
||||
YAML.parse(data.workflow_manifest).spec.suspend === true && (
|
||||
YAML.parse(data.workflowManifest).spec.suspend === true && (
|
||||
<MenuItem
|
||||
value="Enable"
|
||||
onClick={() => {
|
||||
|
|
@ -499,7 +499,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<MenuItem
|
||||
value="Download"
|
||||
onClick={() =>
|
||||
downloadYAML(data.workflow_manifest, data.workflow_name)
|
||||
downloadYAML(data.workflowManifest, data.workflowName)
|
||||
}
|
||||
>
|
||||
<div className={classes.expDiv}>
|
||||
|
|
@ -515,7 +515,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
<MenuItem
|
||||
value="SaveTemplate"
|
||||
data-cy="saveTemplate"
|
||||
onClick={() => handleSaveWorkflowTemplate(data.workflow_manifest)}
|
||||
onClick={() => handleSaveWorkflowTemplate(data.workflowManifest)}
|
||||
>
|
||||
<div className={classes.expDiv}>
|
||||
<InsertDriveFileOutlined className={classes.downloadBtn} />
|
||||
|
|
@ -570,7 +570,7 @@ const TableData: React.FC<TableDataProps> = ({
|
|||
variant="error"
|
||||
className={classes.w7}
|
||||
onClick={() => {
|
||||
deleteRow(data.workflow_id);
|
||||
deleteRow(data.workflowID);
|
||||
setIsModalOpen(false);
|
||||
}}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -27,19 +27,19 @@ import Loader from '../../../components/Loader';
|
|||
import {
|
||||
DELETE_WORKFLOW,
|
||||
GET_CLUSTER_NAMES,
|
||||
GET_WORKFLOW_DETAILS,
|
||||
UPDATE_SCHEDULE,
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
} from '../../../graphql';
|
||||
import { Clusters, ClusterVars } from '../../../models/graphql/clusterData';
|
||||
import { ClusterRequest, Clusters } from '../../../models/graphql/clusterData';
|
||||
import { WeightMap } from '../../../models/graphql/createWorkflowData';
|
||||
import { DeleteSchedule } from '../../../models/graphql/scheduleData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
Pagination,
|
||||
ScheduledWorkflow,
|
||||
ScheduledWorkflows,
|
||||
SortInput,
|
||||
WorkflowFilterInput,
|
||||
SortRequest,
|
||||
WorkflowFilterRequest,
|
||||
} from '../../../models/graphql/workflowListData';
|
||||
import { getProjectID } from '../../../utils/getSearchParams';
|
||||
import useStyles from './styles';
|
||||
|
|
@ -49,9 +49,9 @@ interface BrowseScheduleProps {
|
|||
setWorkflowName: React.Dispatch<React.SetStateAction<string>>;
|
||||
}
|
||||
|
||||
interface FilterOption extends WorkflowFilterInput {
|
||||
interface FilterOption extends WorkflowFilterRequest {
|
||||
suspended?: string;
|
||||
workflow_type?: string;
|
||||
workflowType?: string;
|
||||
}
|
||||
|
||||
const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
||||
|
|
@ -67,34 +67,34 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
|
||||
// States for filters
|
||||
const [filters, setFilters] = useState<FilterOption>({
|
||||
workflow_name: '',
|
||||
cluster_name: 'All',
|
||||
workflowName: '',
|
||||
clusterName: 'All',
|
||||
suspended: 'All',
|
||||
workflow_type: 'All',
|
||||
workflowType: 'All',
|
||||
});
|
||||
|
||||
// State for sorting
|
||||
const [sortData, setSortData] = useState<SortInput>({
|
||||
field: 'Time',
|
||||
const [sortData, setSortData] = useState<SortRequest>({
|
||||
field: 'TIME',
|
||||
descending: true,
|
||||
});
|
||||
|
||||
// Apollo query to get the scheduled data
|
||||
const { data, refetch, loading, error } = useQuery<
|
||||
ScheduledWorkflows,
|
||||
ListWorkflowsInput
|
||||
>(WORKFLOW_LIST_DETAILS, {
|
||||
GetWorkflowsRequest
|
||||
>(GET_WORKFLOW_DETAILS, {
|
||||
variables: {
|
||||
workflowInput: {
|
||||
project_id: projectID,
|
||||
request: {
|
||||
projectID,
|
||||
pagination: {
|
||||
page: paginationData.page,
|
||||
limit: paginationData.limit,
|
||||
},
|
||||
sort: sortData,
|
||||
filter: {
|
||||
workflow_name: filters.workflow_name,
|
||||
cluster_name: filters.cluster_name,
|
||||
workflowName: filters.workflowName,
|
||||
clusterName: filters.clusterName,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -114,7 +114,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
|
||||
// Disable and re-enable a schedule
|
||||
const handleToggleSchedule = (schedule: ScheduledWorkflow) => {
|
||||
const yaml = YAML.parse(schedule.workflow_manifest);
|
||||
const yaml = YAML.parse(schedule.workflowManifest);
|
||||
if (yaml.spec.suspend === undefined || yaml.spec.suspend === false) {
|
||||
yaml.spec.suspend = true;
|
||||
} else {
|
||||
|
|
@ -125,7 +125,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
|
||||
schedule.weightages.forEach((weightEntry) => {
|
||||
weightData.push({
|
||||
experiment_name: weightEntry.experiment_name,
|
||||
experimentName: weightEntry.experimentName,
|
||||
weightage: weightEntry.weightage,
|
||||
});
|
||||
});
|
||||
|
|
@ -133,14 +133,14 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
updateSchedule({
|
||||
variables: {
|
||||
ChaosWorkFlowInput: {
|
||||
workflow_id: schedule.workflow_id,
|
||||
workflow_name: schedule.workflow_name,
|
||||
workflow_description: schedule.workflow_description,
|
||||
workflowID: schedule.workflowID,
|
||||
workflowName: schedule.workflowName,
|
||||
workflowDescription: schedule.workflowDescription,
|
||||
isCustomWorkflow: schedule.isCustomWorkflow,
|
||||
cronSyntax: schedule.cronSyntax,
|
||||
workflow_manifest: JSON.stringify(yaml, null, 2),
|
||||
project_id: schedule.project_id,
|
||||
cluster_id: schedule.cluster_id,
|
||||
workflowManifest: JSON.stringify(yaml, null, 2),
|
||||
projectID: schedule.projectID,
|
||||
clusterID: schedule.clusterID,
|
||||
weightages: weightData,
|
||||
},
|
||||
},
|
||||
|
|
@ -148,31 +148,31 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
};
|
||||
|
||||
// Query to get list of Clusters
|
||||
const { data: clusterList } = useQuery<Partial<Clusters>, ClusterVars>(
|
||||
const { data: clusterList } = useQuery<Partial<Clusters>, ClusterRequest>(
|
||||
GET_CLUSTER_NAMES,
|
||||
{
|
||||
variables: {
|
||||
project_id: projectID,
|
||||
projectID,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const filteredWorkflows = data?.ListWorkflow.workflows
|
||||
const filteredWorkflows = data?.listWorkflows.workflows
|
||||
.filter((dataRow) =>
|
||||
filters.suspended === 'All'
|
||||
? true
|
||||
: filters.suspended === 'true'
|
||||
? YAML.parse(dataRow.workflow_manifest).spec.suspend === true
|
||||
? YAML.parse(dataRow.workflowManifest).spec.suspend === true
|
||||
: filters.suspended === 'false'
|
||||
? YAML.parse(dataRow.workflow_manifest).spec.suspend === undefined
|
||||
? YAML.parse(dataRow.workflowManifest).spec.suspend === undefined
|
||||
: false
|
||||
)
|
||||
.filter((dataRow) =>
|
||||
filters.workflow_type === 'All'
|
||||
filters.workflowType === 'All'
|
||||
? true
|
||||
: filters.workflow_type === 'workflow'
|
||||
: filters.workflowType === 'workflow'
|
||||
? dataRow.cronSyntax.length === 0 || dataRow.cronSyntax === ''
|
||||
: filters.workflow_type === 'cronworkflow'
|
||||
: filters.workflowType === 'cronworkflow'
|
||||
? dataRow.cronSyntax.length > 0
|
||||
: false
|
||||
);
|
||||
|
|
@ -182,7 +182,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
variables: {
|
||||
projectID: getProjectID(),
|
||||
workflowID: wfid,
|
||||
workflow_run_id: '',
|
||||
workflowRunID: '',
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
@ -195,11 +195,11 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
id="input-with-icon-adornment"
|
||||
placeholder="Search"
|
||||
className={classes.search}
|
||||
value={filters.workflow_name}
|
||||
value={filters.workflowName}
|
||||
onChange={(event) =>
|
||||
setFilters({
|
||||
...filters,
|
||||
workflow_name: event.target.value as string,
|
||||
workflowName: event.target.value as string,
|
||||
})
|
||||
}
|
||||
startAdornment={
|
||||
|
|
@ -214,11 +214,11 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
Schedule Type
|
||||
</InputLabel>
|
||||
<Select
|
||||
value={filters.workflow_type}
|
||||
value={filters.workflowType}
|
||||
onChange={(event) =>
|
||||
setFilters({
|
||||
...filters,
|
||||
workflow_type: event.target.value as string,
|
||||
workflowType: event.target.value as string,
|
||||
})
|
||||
}
|
||||
label="Schedule Type"
|
||||
|
|
@ -267,23 +267,20 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
<FormControl variant="outlined" className={classes.formControl}>
|
||||
<InputLabel className={classes.selectText}>Target Agent</InputLabel>
|
||||
<Select
|
||||
value={filters.cluster_name}
|
||||
value={filters.clusterName}
|
||||
onChange={(event) =>
|
||||
setFilters({
|
||||
...filters,
|
||||
cluster_name: event.target.value as string,
|
||||
clusterName: event.target.value as string,
|
||||
})
|
||||
}
|
||||
label="Target Cluster"
|
||||
className={classes.selectText}
|
||||
>
|
||||
<MenuItem value="All">All</MenuItem>
|
||||
{clusterList?.getCluster?.map((cluster) => (
|
||||
<MenuItem
|
||||
key={cluster.cluster_name}
|
||||
value={cluster.cluster_name}
|
||||
>
|
||||
{cluster.cluster_name}
|
||||
{clusterList?.listClusters?.map((cluster) => (
|
||||
<MenuItem key={cluster.clusterName} value={cluster.clusterName}>
|
||||
{cluster.clusterName}
|
||||
</MenuItem>
|
||||
))}
|
||||
</Select>
|
||||
|
|
@ -311,7 +308,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Name',
|
||||
field: 'NAME',
|
||||
descending: false,
|
||||
})
|
||||
}
|
||||
|
|
@ -323,7 +320,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Name',
|
||||
field: 'NAME',
|
||||
descending: true,
|
||||
})
|
||||
}
|
||||
|
|
@ -394,7 +391,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
filteredWorkflows.map((data) => (
|
||||
<TableRow
|
||||
data-cy="workflowSchedulesTableRow"
|
||||
key={data.workflow_id}
|
||||
key={data.workflowID}
|
||||
>
|
||||
<TableData
|
||||
data={data}
|
||||
|
|
@ -419,7 +416,7 @@ const BrowseSchedule: React.FC<BrowseScheduleProps> = ({ setWorkflowName }) => {
|
|||
<TablePagination
|
||||
rowsPerPageOptions={[5, 10, 25]}
|
||||
component="div"
|
||||
count={data?.ListWorkflow.total_no_of_workflows ?? 0}
|
||||
count={data?.listWorkflows.totalNoOfWorkflows ?? 0}
|
||||
rowsPerPage={paginationData.limit}
|
||||
page={paginationData.page}
|
||||
onChangePage={(_, page) =>
|
||||
|
|
|
|||
|
|
@ -127,9 +127,9 @@ const HeaderSection: React.FC<HeaderSectionProps> = ({
|
|||
className={classes.selectText}
|
||||
>
|
||||
<MenuItem value="All">All</MenuItem>
|
||||
{clusterList?.getCluster?.map((cluster) => (
|
||||
<MenuItem key={cluster.cluster_name} value={cluster.cluster_name}>
|
||||
{cluster.cluster_name}
|
||||
{clusterList?.listClusters?.map((cluster) => (
|
||||
<MenuItem key={cluster.clusterName} value={cluster.clusterName}>
|
||||
{cluster.clusterName}
|
||||
</MenuItem>
|
||||
))}
|
||||
</Select>
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
import { useQuery } from '@apollo/client';
|
||||
import { Typography } from '@material-ui/core';
|
||||
import React from 'react';
|
||||
import YAML from 'yaml';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import YAML from 'yaml';
|
||||
import Loader from '../../../components/Loader';
|
||||
import YamlEditor from '../../../components/YamlEditor/Editor';
|
||||
import { WORKFLOW_LIST_DETAILS } from '../../../graphql';
|
||||
import { GET_WORKFLOW_DETAILS } from '../../../graphql';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
} from '../../../models/graphql/workflowListData';
|
||||
import useStyles from './styles';
|
||||
|
||||
interface ManifestModalProps {
|
||||
project_id: string;
|
||||
workflow_id: string | undefined;
|
||||
projectID: string;
|
||||
workflowID: string | undefined;
|
||||
}
|
||||
|
||||
const ManifestModal: React.FC<ManifestModalProps> = ({
|
||||
project_id,
|
||||
workflow_id,
|
||||
projectID,
|
||||
workflowID,
|
||||
}) => {
|
||||
const classes = useStyles();
|
||||
const { t } = useTranslation();
|
||||
const { data, loading } = useQuery<ScheduledWorkflows, ListWorkflowsInput>(
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
const { data, loading } = useQuery<ScheduledWorkflows, GetWorkflowsRequest>(
|
||||
GET_WORKFLOW_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowInput: {
|
||||
project_id,
|
||||
workflow_ids: [workflow_id ?? ''],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [workflowID ?? ''],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
@ -47,7 +47,7 @@ const ManifestModal: React.FC<ManifestModalProps> = ({
|
|||
<YamlEditor
|
||||
content={YAML.stringify(
|
||||
YAML.parse(
|
||||
data?.ListWorkflow.workflows[0].workflow_manifest as string
|
||||
data?.listWorkflows.workflows[0].workflowManifest as string
|
||||
)
|
||||
)}
|
||||
filename="Workflow Template"
|
||||
|
|
|
|||
|
|
@ -25,13 +25,13 @@ import { useTranslation } from 'react-i18next';
|
|||
import TimePopOver from '../../../components/TimePopOver';
|
||||
import {
|
||||
DELETE_WORKFLOW,
|
||||
GET_WORKFLOW_DETAILS,
|
||||
SYNC_WORKFLOW,
|
||||
TERMINATE_WORKFLOW,
|
||||
WORKFLOW_LIST_DETAILS,
|
||||
} from '../../../graphql';
|
||||
import { WorkflowRun } from '../../../models/graphql/workflowData';
|
||||
import {
|
||||
ListWorkflowsInput,
|
||||
GetWorkflowsRequest,
|
||||
ScheduledWorkflows,
|
||||
} from '../../../models/graphql/workflowListData';
|
||||
import useActions from '../../../redux/actions';
|
||||
|
|
@ -74,12 +74,12 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
|
||||
const { data: scheduledWorkflowData } = useQuery<
|
||||
ScheduledWorkflows,
|
||||
ListWorkflowsInput
|
||||
>(WORKFLOW_LIST_DETAILS, {
|
||||
GetWorkflowsRequest
|
||||
>(GET_WORKFLOW_DETAILS, {
|
||||
variables: {
|
||||
workflowInput: {
|
||||
project_id: projectID,
|
||||
workflow_ids: [data.workflow_id ?? ''],
|
||||
request: {
|
||||
projectID,
|
||||
workflowIDs: [data.workflowID ?? ''],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
@ -184,7 +184,7 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
<>
|
||||
{/* Table cell for warning (if the workflow is in running state from 20 mins) */}
|
||||
<TableCell className={classes.warningTableCell}>
|
||||
{timeDiff(new Date().getTime(), data.last_updated ?? '') >= 20 &&
|
||||
{timeDiff(new Date().getTime(), data.lastUpdated ?? '') >= 20 &&
|
||||
data.phase?.toLowerCase() === 'running' ? (
|
||||
<IconButton onClick={handleWarningPopOverClick}>
|
||||
<img src="./icons/warning.svg" alt="warning" width="20" />
|
||||
|
|
@ -220,7 +220,7 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
<Typography className={classes.runningText}>
|
||||
{t('chaosWorkflows.browseWorkflows.runningFrom')}{' '}
|
||||
{Math.round(
|
||||
timeDiff(new Date().getTime(), data.last_updated ?? '')
|
||||
timeDiff(new Date().getTime(), data.lastUpdated ?? '')
|
||||
)}{' '}
|
||||
{t('chaosWorkflows.browseWorkflows.min')}
|
||||
</Typography>
|
||||
|
|
@ -233,8 +233,8 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
syncWorkflow({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
workflowID: data.workflow_id,
|
||||
workflow_run_id: data.workflow_run_id,
|
||||
workflowID: data.workflowID,
|
||||
workflowRunID: data.workflowRunID,
|
||||
},
|
||||
});
|
||||
}}
|
||||
|
|
@ -249,8 +249,8 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
deleteWorkflow({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
workflowID: data.workflow_id,
|
||||
workflow_run_id: data.workflow_run_id,
|
||||
workflowID: data.workflowID,
|
||||
workflowRunID: data.workflowRunID,
|
||||
},
|
||||
});
|
||||
}}
|
||||
|
|
@ -278,43 +278,43 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
style={{ cursor: 'pointer' }}
|
||||
onClick={() => {
|
||||
nodeSelection.selectNode({
|
||||
pod_name: '',
|
||||
podName: '',
|
||||
});
|
||||
history.push({
|
||||
pathname: `/workflows/${data.workflow_run_id}`,
|
||||
pathname: `/workflows/${data.workflowRunID}`,
|
||||
search: `?projectID=${projectID}&projectRole=${projectRole}`,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<Typography className={classes.boldText} data-cy="workflowName">
|
||||
{data.workflow_name}
|
||||
{data.workflowName}
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<Typography className={classes.clusterName}>
|
||||
{nameCapitalized(data.cluster_name ?? '')}
|
||||
{nameCapitalized(data.clusterName ?? '')}
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell className={classes.reliabiltyData}>
|
||||
{scheduledWorkflowData?.ListWorkflow.workflows[0]?.weightages[0]
|
||||
?.experiment_name !== '' ? (
|
||||
{scheduledWorkflowData?.listWorkflows.workflows[0]?.weightages[0]
|
||||
?.experimentName !== '' ? (
|
||||
<>
|
||||
<Typography data-cy="ResScore">
|
||||
<span>
|
||||
{t('chaosWorkflows.browseWorkflows.tableData.overallRR')}
|
||||
</span>
|
||||
{data.resiliency_score === undefined ||
|
||||
data.resiliency_score === null ? (
|
||||
{data.resiliencyScore === undefined ||
|
||||
data.resiliencyScore === null ? (
|
||||
<span className={classes.less}>
|
||||
{t('chaosWorkflows.browseWorkflows.tableData.na')}
|
||||
</span>
|
||||
) : (
|
||||
<span
|
||||
className={`${classes.boldText} ${getResiliencyScoreColor(
|
||||
data.resiliency_score
|
||||
data.resiliencyScore
|
||||
)}`}
|
||||
>
|
||||
{data.resiliency_score}%
|
||||
{data.resiliencyScore}%
|
||||
</span>
|
||||
)}
|
||||
</Typography>
|
||||
|
|
@ -324,23 +324,23 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
'chaosWorkflows.browseWorkflows.tableData.experimentsPassed'
|
||||
)}
|
||||
</span>
|
||||
{data.experiments_passed === undefined ||
|
||||
data.experiments_passed === null ||
|
||||
data.total_experiments === undefined ||
|
||||
data.total_experiments === null ||
|
||||
data.total_experiments === 0 ||
|
||||
data.resiliency_score === undefined ||
|
||||
data.resiliency_score === null ? (
|
||||
{data.experimentsPassed === undefined ||
|
||||
data.experimentsPassed === null ||
|
||||
data.totalExperiments === undefined ||
|
||||
data.totalExperiments === null ||
|
||||
data.totalExperiments === 0 ||
|
||||
data.resiliencyScore === undefined ||
|
||||
data.resiliencyScore === null ? (
|
||||
<span className={classes.less}>
|
||||
{t('chaosWorkflows.browseWorkflows.tableData.na')}
|
||||
</span>
|
||||
) : (
|
||||
<span
|
||||
className={`${classes.boldText} ${getResiliencyScoreColor(
|
||||
data.resiliency_score
|
||||
data.resiliencyScore
|
||||
)}`}
|
||||
>
|
||||
{data.experiments_passed}/{data.total_experiments}
|
||||
{data.experimentsPassed}/{data.totalExperiments}
|
||||
</span>
|
||||
)}
|
||||
</Typography>
|
||||
|
|
@ -353,8 +353,8 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
</TableCell>
|
||||
<TableCell>
|
||||
<div>
|
||||
{scheduledWorkflowData?.ListWorkflow.workflows[0]?.weightages[0]
|
||||
?.experiment_name !== '' ? (
|
||||
{scheduledWorkflowData?.listWorkflows.workflows[0]?.weightages[0]
|
||||
?.experimentName !== '' ? (
|
||||
<>
|
||||
<Button
|
||||
onClick={handlePopOverClick}
|
||||
|
|
@ -365,7 +365,7 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
'chaosWorkflows.browseWorkflows.tableData.showExperiments'
|
||||
)}
|
||||
(
|
||||
{scheduledWorkflowData?.ListWorkflow.workflows[0]?.weightages
|
||||
{scheduledWorkflowData?.listWorkflows.workflows[0]?.weightages
|
||||
.length ?? 0}
|
||||
)
|
||||
</Typography>
|
||||
|
|
@ -392,14 +392,14 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
}}
|
||||
>
|
||||
<div className={classes.popover}>
|
||||
{scheduledWorkflowData?.ListWorkflow.workflows[0]?.weightages.map(
|
||||
{scheduledWorkflowData?.listWorkflows.workflows[0]?.weightages.map(
|
||||
(weightEntry) => (
|
||||
<div
|
||||
key={weightEntry.experiment_name}
|
||||
key={weightEntry.experimentName}
|
||||
style={{ marginBottom: 8 }}
|
||||
>
|
||||
<ExperimentPoints
|
||||
expName={weightEntry.experiment_name}
|
||||
expName={weightEntry.experimentName}
|
||||
weight={weightEntry.weightage}
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -416,11 +416,11 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<TimePopOver unixTime={data.last_updated ?? ''} />
|
||||
<TimePopOver unixTime={data.lastUpdated ?? ''} />
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<Typography className={classes.executedBy}>
|
||||
{data.executed_by || '-'}
|
||||
{data.executedBy || '-'}
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
|
|
@ -445,10 +445,10 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
value="Workflow"
|
||||
onClick={() => {
|
||||
nodeSelection.selectNode({
|
||||
pod_name: '',
|
||||
podName: '',
|
||||
});
|
||||
history.push({
|
||||
pathname: `/workflows/${data.workflow_run_id}`,
|
||||
pathname: `/workflows/${data.workflowRunID}`,
|
||||
search: `?projectID=${projectID}&projectRole=${projectRole}`,
|
||||
});
|
||||
}}
|
||||
|
|
@ -468,7 +468,7 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
value="Analysis"
|
||||
onClick={() => {
|
||||
history.push({
|
||||
pathname: `/analytics/workflowStatistics/${data.workflow_id}`,
|
||||
pathname: `/analytics/workflowStatistics/${data.workflowID}`,
|
||||
search: `?projectID=${projectID}&projectRole=${projectRole}`,
|
||||
});
|
||||
}}
|
||||
|
|
@ -510,10 +510,7 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
</ButtonOutlined>
|
||||
}
|
||||
>
|
||||
<ManifestModal
|
||||
project_id={projectID}
|
||||
workflow_id={data.workflow_id}
|
||||
/>
|
||||
<ManifestModal projectID={projectID} workflowID={data.workflowID} />
|
||||
</Modal>
|
||||
{data.phase?.toLowerCase() === 'running' && (
|
||||
<MenuItem
|
||||
|
|
@ -522,8 +519,8 @@ const TableData: React.FC<TableDataProps> = ({ data, refetchQuery }) => {
|
|||
terminateWorkflow({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
workflowID: data.workflow_id,
|
||||
workflow_run_id: data.workflow_run_id,
|
||||
workflowID: data.workflowID,
|
||||
workflowRunID: data.workflowRunID,
|
||||
},
|
||||
});
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -21,17 +21,17 @@ import {
|
|||
WORKFLOW_DETAILS,
|
||||
WORKFLOW_EVENTS,
|
||||
} from '../../../graphql';
|
||||
import { Clusters, ClusterVars } from '../../../models/graphql/clusterData';
|
||||
import { ClusterRequest, Clusters } from '../../../models/graphql/clusterData';
|
||||
import {
|
||||
Pagination,
|
||||
SortInput,
|
||||
SortRequest,
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowDataRequest,
|
||||
WorkflowRun,
|
||||
WorkflowRunFilterInput,
|
||||
WorkflowRunFilterRequest,
|
||||
WorkflowStatus,
|
||||
WorkflowSubscription,
|
||||
WorkflowSubscriptionInput,
|
||||
WorkflowSubscriptionRequest,
|
||||
} from '../../../models/graphql/workflowData';
|
||||
import { getProjectID } from '../../../utils/getSearchParams';
|
||||
import HeaderSection from './HeaderSection';
|
||||
|
|
@ -58,12 +58,12 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
});
|
||||
|
||||
// States for filters
|
||||
const [filters, setFilters] = useState<WorkflowRunFilterInput>({
|
||||
workflow_name: workflowName,
|
||||
cluster_name: 'All',
|
||||
workflow_status: 'All',
|
||||
date_range: {
|
||||
start_date: new Date(0).valueOf().toString(),
|
||||
const [filters, setFilters] = useState<WorkflowRunFilterRequest>({
|
||||
workflowName,
|
||||
clusterName: 'All',
|
||||
workflowStatus: 'All',
|
||||
dateRange: {
|
||||
startDate: new Date(0).valueOf().toString(),
|
||||
},
|
||||
});
|
||||
|
||||
|
|
@ -73,32 +73,32 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
);
|
||||
|
||||
// State for sorting
|
||||
const [sortData, setSortData] = useState<SortInput>({
|
||||
field: 'Time',
|
||||
const [sortData, setSortData] = useState<SortRequest>({
|
||||
field: 'TIME',
|
||||
descending: true,
|
||||
});
|
||||
|
||||
// Checks if the workflow event from subscription exists in the table
|
||||
function isFiltered(newWorkflow: WorkflowRun) {
|
||||
const nameExists =
|
||||
filters.workflow_name &&
|
||||
newWorkflow.workflow_name
|
||||
filters.workflowName &&
|
||||
newWorkflow.workflowName
|
||||
.toLowerCase()
|
||||
.includes(filters.workflow_name.toLowerCase());
|
||||
.includes(filters.workflowName.toLowerCase());
|
||||
|
||||
const clusterExists =
|
||||
filters.cluster_name === 'All' ||
|
||||
filters.cluster_name === newWorkflow.cluster_name;
|
||||
filters.clusterName === 'All' ||
|
||||
filters.clusterName === newWorkflow.clusterName;
|
||||
|
||||
const phaseExists =
|
||||
filters.workflow_status === 'All' ||
|
||||
filters.workflow_status === newWorkflow.phase;
|
||||
filters.workflowStatus === 'All' ||
|
||||
filters.workflowStatus === newWorkflow.phase;
|
||||
|
||||
const dateExists =
|
||||
filters.date_range &&
|
||||
newWorkflow.last_updated >= filters.date_range.start_date &&
|
||||
(filters.date_range.end_date
|
||||
? newWorkflow.last_updated < filters.date_range.end_date
|
||||
filters.dateRange &&
|
||||
newWorkflow.lastUpdated >= filters.dateRange.startDate &&
|
||||
(filters.dateRange.endDate
|
||||
? newWorkflow.lastUpdated < filters.dateRange.endDate
|
||||
: true);
|
||||
|
||||
const shouldAddNewWorkflow =
|
||||
|
|
@ -108,11 +108,11 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
}
|
||||
|
||||
// Query to get list of Clusters
|
||||
const { data: clusterList } = useQuery<Partial<Clusters>, ClusterVars>(
|
||||
const { data: clusterList } = useQuery<Partial<Clusters>, ClusterRequest>(
|
||||
GET_CLUSTER_NAMES,
|
||||
{
|
||||
variables: {
|
||||
project_id: projectID,
|
||||
projectID,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
|
@ -120,11 +120,11 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
// Query to get workflows
|
||||
const { subscribeToMore, data, error, refetch } = useQuery<
|
||||
Workflow,
|
||||
WorkflowDataVars
|
||||
WorkflowDataRequest
|
||||
>(WORKFLOW_DETAILS, {
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
request: {
|
||||
projectID,
|
||||
pagination: {
|
||||
page: paginationData.page,
|
||||
limit: paginationData.limit,
|
||||
|
|
@ -138,23 +138,22 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
|
||||
// Using subscription to get realtime data
|
||||
useEffect(() => {
|
||||
subscribeToMore<WorkflowSubscription, WorkflowSubscriptionInput>({
|
||||
subscribeToMore<WorkflowSubscription, WorkflowSubscriptionRequest>({
|
||||
document: WORKFLOW_EVENTS,
|
||||
variables: { projectID },
|
||||
updateQuery: (prev, { subscriptionData }) => {
|
||||
if (!subscriptionData.data || !prev || !prev.getWorkflowRuns)
|
||||
if (!subscriptionData.data || !prev || !prev.listWorkflowRuns)
|
||||
return prev;
|
||||
|
||||
const modifiedWorkflows = prev.getWorkflowRuns.workflow_runs.slice();
|
||||
const newWorkflow = subscriptionData.data.workflowEventListener;
|
||||
|
||||
const modifiedWorkflows = prev.listWorkflowRuns.workflowRuns.slice();
|
||||
const newWorkflow = subscriptionData.data.getWorkflowEvents;
|
||||
// Updating the query data
|
||||
let i = 0;
|
||||
let totalNoOfWorkflows = prev.getWorkflowRuns.total_no_of_workflow_runs;
|
||||
let totalNoOfWorkflows = prev.listWorkflowRuns.totalNoOfWorkflowRuns;
|
||||
|
||||
for (; i < modifiedWorkflows.length; i++) {
|
||||
if (
|
||||
modifiedWorkflows[i].workflow_run_id === newWorkflow.workflow_run_id
|
||||
modifiedWorkflows[i].workflowRunID === newWorkflow.workflowRunID
|
||||
) {
|
||||
modifiedWorkflows[i] = newWorkflow;
|
||||
break;
|
||||
|
|
@ -166,9 +165,9 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
}
|
||||
|
||||
return {
|
||||
getWorkflowRuns: {
|
||||
total_no_of_workflow_runs: totalNoOfWorkflows,
|
||||
workflow_runs: modifiedWorkflows,
|
||||
listWorkflowRuns: {
|
||||
totalNoOfWorkflowRuns: totalNoOfWorkflows,
|
||||
workflowRuns: modifiedWorkflows,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
@ -191,13 +190,12 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
setOpen(true);
|
||||
};
|
||||
|
||||
const workflowRuns = data?.getWorkflowRuns.workflow_runs;
|
||||
|
||||
const workflowRuns = data?.listWorkflowRuns.workflowRuns;
|
||||
// Functions passed as props in the headerSection
|
||||
const changeSearch = (
|
||||
event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>
|
||||
) => {
|
||||
setFilters({ ...filters, workflow_name: event.target.value as string });
|
||||
setFilters({ ...filters, workflowName: event.target.value as string });
|
||||
setWorkflowName(event.target.value as string);
|
||||
setPaginationData({ ...paginationData, page: 0 });
|
||||
};
|
||||
|
|
@ -210,7 +208,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
) => {
|
||||
setFilters({
|
||||
...filters,
|
||||
workflow_status: event.target.value as WorkflowStatus,
|
||||
workflowStatus: event.target.value as WorkflowStatus,
|
||||
});
|
||||
setPaginationData({ ...paginationData, page: 0 });
|
||||
};
|
||||
|
|
@ -221,7 +219,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
value: unknown;
|
||||
}>
|
||||
) => {
|
||||
setFilters({ ...filters, cluster_name: event.target.value as string });
|
||||
setFilters({ ...filters, clusterName: event.target.value as string });
|
||||
setPaginationData({ ...paginationData, page: 0 });
|
||||
};
|
||||
|
||||
|
|
@ -230,12 +228,12 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
// Change filter value for date range
|
||||
setFilters({
|
||||
...filters,
|
||||
date_range: {
|
||||
start_date: new Date(selectStartDate)
|
||||
dateRange: {
|
||||
startDate: new Date(selectStartDate)
|
||||
.setHours(0, 0, 0)
|
||||
.valueOf()
|
||||
.toString(),
|
||||
end_date: new Date(selectEndDate)
|
||||
endDate: new Date(selectEndDate)
|
||||
.setHours(23, 59, 59)
|
||||
.valueOf()
|
||||
.toString(),
|
||||
|
|
@ -257,11 +255,11 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
<section className="Heading section">
|
||||
{/* Header Section */}
|
||||
<HeaderSection
|
||||
searchValue={filters.workflow_name}
|
||||
searchValue={filters.workflowName}
|
||||
changeSearch={changeSearch}
|
||||
statusValue={filters.workflow_status}
|
||||
statusValue={filters.workflowStatus}
|
||||
changeStatus={changeStatus}
|
||||
clusterValue={filters.cluster_name}
|
||||
clusterValue={filters.clusterName}
|
||||
changeCluster={changeCluster}
|
||||
popOverClick={handlePopOverClick}
|
||||
popOverClose={handlePopOverClose}
|
||||
|
|
@ -299,7 +297,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Name',
|
||||
field: 'NAME',
|
||||
})
|
||||
}
|
||||
>
|
||||
|
|
@ -310,7 +308,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Name',
|
||||
field: 'NAME',
|
||||
descending: true,
|
||||
})
|
||||
}
|
||||
|
|
@ -354,7 +352,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Time',
|
||||
field: 'TIME',
|
||||
descending: true,
|
||||
})
|
||||
}
|
||||
|
|
@ -366,7 +364,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
size="small"
|
||||
onClick={() =>
|
||||
setSortData({
|
||||
field: 'Time',
|
||||
field: 'TIME',
|
||||
})
|
||||
}
|
||||
>
|
||||
|
|
@ -401,8 +399,8 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
) : workflowRuns && workflowRuns.length ? (
|
||||
workflowRuns.map((dataRow) => (
|
||||
<TableRow
|
||||
data-cy={dataRow.workflow_name}
|
||||
key={dataRow.workflow_run_id}
|
||||
data-cy={dataRow.workflowName}
|
||||
key={dataRow.workflowRunID}
|
||||
>
|
||||
<TableData data={dataRow} refetchQuery={refetch} />
|
||||
</TableRow>
|
||||
|
|
@ -424,7 +422,7 @@ const BrowseWorkflow: React.FC<BrowseWorkflowProps> = ({
|
|||
<TablePagination
|
||||
rowsPerPageOptions={[10, 25, 50]}
|
||||
component="div"
|
||||
count={data?.getWorkflowRuns.total_no_of_workflow_runs ?? 0}
|
||||
count={data?.listWorkflowRuns.totalNoOfWorkflowRuns ?? 0}
|
||||
rowsPerPage={paginationData.limit}
|
||||
page={paginationData.page}
|
||||
onChangePage={(_, page) =>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { useLazyQuery, useQuery } from '@apollo/client';
|
||||
import { RadioGroup, Typography, useTheme } from '@material-ui/core';
|
||||
import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
|
||||
import {
|
||||
ButtonOutlined,
|
||||
LitmusCard,
|
||||
|
|
@ -8,22 +9,21 @@ import {
|
|||
Search,
|
||||
} from 'litmus-ui';
|
||||
import React, {
|
||||
lazy,
|
||||
forwardRef,
|
||||
lazy,
|
||||
useEffect,
|
||||
useImperativeHandle,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useSelector } from 'react-redux';
|
||||
import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
|
||||
import Loader from '../../../components/Loader';
|
||||
import { constants } from '../../../constants';
|
||||
import {
|
||||
GET_CLUSTER,
|
||||
GET_IMAGE_REGISTRY,
|
||||
LIST_IMAGE_REGISTRY,
|
||||
LIST_IMAGE_REGISTRY_BY_PROJECT_ID,
|
||||
} from '../../../graphql';
|
||||
import { ImageRegistryInfo } from '../../../models/redux/image_registry';
|
||||
import useActions from '../../../redux/actions';
|
||||
import * as AlertActions from '../../../redux/actions/alert';
|
||||
import * as ImageRegistryActions from '../../../redux/actions/image_registry';
|
||||
|
|
@ -31,17 +31,16 @@ import * as WorkflowActions from '../../../redux/actions/workflow';
|
|||
import { RootState } from '../../../redux/reducers';
|
||||
import { getProjectID, getProjectRole } from '../../../utils/getSearchParams';
|
||||
import useStyles from './styles';
|
||||
import Loader from '../../../components/Loader';
|
||||
|
||||
const AgentDeployModal = lazy(
|
||||
() => import('../../../components/AgentDeployModal')
|
||||
);
|
||||
|
||||
interface Cluster {
|
||||
cluster_name: string;
|
||||
is_active: boolean;
|
||||
cluster_id: string;
|
||||
agent_namespace: string;
|
||||
clusterName: string;
|
||||
isActive: boolean;
|
||||
clusterID: string;
|
||||
agentNamespace: string;
|
||||
}
|
||||
|
||||
const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
||||
|
|
@ -52,8 +51,8 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
const workflow = useActions(WorkflowActions);
|
||||
const alert = useActions(AlertActions);
|
||||
const imageRegistry = useActions(ImageRegistryActions);
|
||||
const clusterid: string = useSelector(
|
||||
(state: RootState) => state.workflowData.clusterid
|
||||
const clusterID: string = useSelector(
|
||||
(state: RootState) => state.workflowData.clusterID
|
||||
);
|
||||
const selectedProjectID = getProjectID();
|
||||
|
||||
|
|
@ -72,36 +71,35 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
fetchPolicy: 'network-only',
|
||||
onCompleted: (data) => {
|
||||
if (data !== undefined) {
|
||||
const regData = data.GetImageRegistry
|
||||
.image_registry_info as ImageRegistryInfo;
|
||||
const regData = data.getImageRegistry.imageRegistryInfo;
|
||||
imageRegistry.selectImageRegistry({
|
||||
image_registry_name: regData.image_registry_name,
|
||||
image_repo_name: regData.image_repo_name,
|
||||
image_registry_type: regData.image_registry_type,
|
||||
secret_name: regData.secret_name,
|
||||
secret_namespace: regData.secret_namespace,
|
||||
enable_registry: regData.enable_registry,
|
||||
is_default: regData.is_default,
|
||||
image_registry_name: regData.imageRegistryName,
|
||||
image_repo_name: regData.imageRepoName,
|
||||
image_registry_type: regData.imageRegistryType,
|
||||
secret_name: regData.secretName,
|
||||
secret_namespace: regData.secretNamespace,
|
||||
enable_registry: regData.enableRegistry,
|
||||
is_default: regData.isDefault,
|
||||
update_registry: true,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
useQuery(LIST_IMAGE_REGISTRY, {
|
||||
useQuery(LIST_IMAGE_REGISTRY_BY_PROJECT_ID, {
|
||||
variables: {
|
||||
data: selectedProjectID,
|
||||
},
|
||||
fetchPolicy: 'network-only',
|
||||
onCompleted: (data) => {
|
||||
if (
|
||||
data.ListImageRegistry !== null &&
|
||||
data.ListImageRegistry.length > 0
|
||||
data.listImageRegistry !== null &&
|
||||
data.listImageRegistry.length > 0
|
||||
) {
|
||||
getRegistryData({
|
||||
variables: {
|
||||
registryid: data.ListImageRegistry[0].image_registry_id,
|
||||
projectid: selectedProjectID,
|
||||
imageRegistryID: data.listImageRegistry[0].imageRegistryID,
|
||||
projectID: selectedProjectID,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
|
|
@ -122,19 +120,19 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
const [getCluster, { loading }] = useLazyQuery(GET_CLUSTER, {
|
||||
onCompleted: (data) => {
|
||||
const clusters: Cluster[] = [];
|
||||
if (data && data.getCluster.length !== 0) {
|
||||
data.getCluster.forEach((e: Cluster) => {
|
||||
if (e.is_active === true) {
|
||||
if (data && data.listClusters.length !== 0) {
|
||||
data.listClusters.forEach((e: Cluster) => {
|
||||
if (e.isActive === true) {
|
||||
// Populating all the cluster data in the clusters[] array
|
||||
clusters.push({
|
||||
cluster_name: e.cluster_name,
|
||||
is_active: e.is_active,
|
||||
cluster_id: e.cluster_id,
|
||||
agent_namespace: e.agent_namespace,
|
||||
clusterName: e.clusterName,
|
||||
isActive: e.isActive,
|
||||
clusterID: e.clusterID,
|
||||
agentNamespace: e.agentNamespace,
|
||||
});
|
||||
// Setting the initial workflow yaml to be of type Workflow
|
||||
workflow.setWorkflowDetails({
|
||||
clusterid: '',
|
||||
clusterID: '',
|
||||
cronSyntax: '',
|
||||
scheduleType: {
|
||||
scheduleOnce: 'now',
|
||||
|
|
@ -162,7 +160,7 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
alert.changeAlertState(true);
|
||||
return false;
|
||||
}
|
||||
if (clusterid === '' || clusterData.length === 0) {
|
||||
if (clusterID === '' || clusterData.length === 0) {
|
||||
alert.changeAlertState(true); // No Cluster has been selected and user clicked on Next
|
||||
return false;
|
||||
}
|
||||
|
|
@ -171,7 +169,7 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
|
||||
// Rendering once to get the cluster data
|
||||
useEffect(() => {
|
||||
getCluster({ variables: { project_id: selectedProjectID } });
|
||||
getCluster({ variables: { projectID: selectedProjectID } });
|
||||
}, []);
|
||||
|
||||
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||
|
|
@ -181,7 +179,7 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
// Filter the clusters based on search results
|
||||
const filteredCluster = clusterData.filter((cluster: Cluster) => {
|
||||
if (search === null) return cluster;
|
||||
if (cluster.cluster_name.toLowerCase().includes(search.toLowerCase()))
|
||||
if (cluster.clusterName.toLowerCase().includes(search.toLowerCase()))
|
||||
return cluster;
|
||||
return null;
|
||||
});
|
||||
|
|
@ -190,12 +188,12 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
useEffect(() => {
|
||||
if (currentlySelectedAgent !== '') {
|
||||
clusterData.forEach((cluster) => {
|
||||
if (currentlySelectedAgent === cluster.cluster_id) {
|
||||
if (currentlySelectedAgent === cluster.clusterID) {
|
||||
workflow.setWorkflowDetails({
|
||||
clusterid: cluster.cluster_id,
|
||||
project_id: selectedProjectID,
|
||||
clustername: cluster.cluster_name,
|
||||
namespace: cluster.agent_namespace,
|
||||
clusterID: cluster.clusterID,
|
||||
projectID: selectedProjectID,
|
||||
clustername: cluster.clusterName,
|
||||
namespace: cluster.agentNamespace,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -284,25 +282,25 @@ const ChooseWorkflowAgent = forwardRef((_, ref) => {
|
|||
{filteredCluster?.length > 0 ? (
|
||||
filteredCluster.map((cluster) => (
|
||||
<LitmusCard
|
||||
key={cluster.cluster_id}
|
||||
glow={currentlySelectedAgent === cluster.cluster_id}
|
||||
key={cluster.clusterID}
|
||||
glow={currentlySelectedAgent === cluster.clusterID}
|
||||
width="40%"
|
||||
height="4rem"
|
||||
className={classes.litmusCard}
|
||||
borderColor={
|
||||
currentlySelectedAgent === cluster.cluster_id
|
||||
currentlySelectedAgent === cluster.clusterID
|
||||
? palette.primary.main
|
||||
: palette.border.main
|
||||
}
|
||||
>
|
||||
<RadioButton
|
||||
value={cluster.cluster_id}
|
||||
value={cluster.clusterID}
|
||||
className={classes.agentRadioButton}
|
||||
data-cy={cluster.cluster_name}
|
||||
data-cy={cluster.clusterName}
|
||||
>
|
||||
<div>
|
||||
<Typography>{cluster.cluster_name}</Typography>
|
||||
<Typography>{cluster.cluster_id}</Typography>
|
||||
<Typography>{cluster.clusterName}</Typography>
|
||||
<Typography>{cluster.clusterID}</Typography>
|
||||
</div>
|
||||
</RadioButton>
|
||||
</LitmusCard>
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ import React, { useState } from 'react';
|
|||
import { useTranslation } from 'react-i18next';
|
||||
import {
|
||||
DELETE_WORKFLOW_TEMPLATE,
|
||||
LIST_MANIFEST_TEMPLATE,
|
||||
GET_MANIFEST_TEMPLATE,
|
||||
} from '../../../graphql';
|
||||
import {
|
||||
ListManifestTemplate,
|
||||
ListManifestTemplateArray,
|
||||
GetManifestTemplate,
|
||||
GetManifestTemplateArray,
|
||||
} from '../../../models/graphql/workflowListData';
|
||||
import useActions from '../../../redux/actions';
|
||||
import * as WorkflowActions from '../../../redux/actions/workflow';
|
||||
|
|
@ -42,11 +42,11 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
const [search, setSearch] = useState<string | null>(null);
|
||||
const [selected, setSelected] = useState<string>('');
|
||||
const workflowAction = useActions(WorkflowActions);
|
||||
const { data: templateData } = useQuery<ListManifestTemplate>(
|
||||
LIST_MANIFEST_TEMPLATE,
|
||||
const { data: templateData } = useQuery<GetManifestTemplate>(
|
||||
GET_MANIFEST_TEMPLATE,
|
||||
{
|
||||
variables: {
|
||||
data: getProjectID(),
|
||||
projectID: getProjectID(),
|
||||
},
|
||||
fetchPolicy: 'network-only',
|
||||
}
|
||||
|
|
@ -55,17 +55,17 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
const [deleteTemplate] = useMutation(DELETE_WORKFLOW_TEMPLATE, {
|
||||
refetchQueries: [
|
||||
{
|
||||
query: LIST_MANIFEST_TEMPLATE,
|
||||
variables: { data: getProjectID() },
|
||||
query: GET_MANIFEST_TEMPLATE,
|
||||
variables: { projectID: getProjectID() },
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const filteredExistingWorkflows: ListManifestTemplateArray[] = templateData
|
||||
? templateData.ListManifestTemplate.filter(
|
||||
(w: ListManifestTemplateArray) => {
|
||||
const filteredExistingWorkflows = templateData
|
||||
? templateData.listWorkflowManifests.filter(
|
||||
(w: GetManifestTemplateArray) => {
|
||||
if (search === null) return w;
|
||||
if (w.template_name.toLowerCase().includes(search.toLowerCase()))
|
||||
if (w.templateName.toLowerCase().includes(search.toLowerCase()))
|
||||
return w;
|
||||
return null;
|
||||
}
|
||||
|
|
@ -81,7 +81,7 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
};
|
||||
selectedExp(selection.id);
|
||||
const templateData = filteredExistingWorkflows.filter((workflow) => {
|
||||
return workflow.template_id === event.target.value;
|
||||
return workflow.templateID === event.target.value;
|
||||
})[0];
|
||||
workflowAction.setWorkflowManifest({
|
||||
isCustomWorkflow: templateData.isCustomWorkflow,
|
||||
|
|
@ -114,22 +114,22 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
>
|
||||
{filteredExistingWorkflows && filteredExistingWorkflows.length ? (
|
||||
filteredExistingWorkflows.map(
|
||||
(templateData: ListManifestTemplateArray) => (
|
||||
(templateData: GetManifestTemplateArray) => (
|
||||
<LitmusCard
|
||||
width="100%"
|
||||
height="5rem"
|
||||
key={templateData.template_id}
|
||||
key={templateData.templateID}
|
||||
borderColor={palette.border.main}
|
||||
className={classes.existingWorkflowCard}
|
||||
>
|
||||
<RadioButton value={templateData.template_id.toString()}>
|
||||
<RadioButton value={templateData.templateID.toString()}>
|
||||
<div id="body">
|
||||
<div id="left-div">
|
||||
<Typography>{templateData.template_name}</Typography>
|
||||
<Typography>{templateData.templateName}</Typography>
|
||||
</div>
|
||||
<div id="right-div">
|
||||
<Typography>
|
||||
{templateData.template_description}
|
||||
{templateData.templateDescription}
|
||||
</Typography>
|
||||
</div>
|
||||
<div id="last-div">
|
||||
|
|
@ -138,7 +138,7 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
src="./icons/litmus-icon.svg"
|
||||
alt="Experiment Icon"
|
||||
/>
|
||||
<Typography>{templateData.project_name}</Typography>
|
||||
<Typography>{templateData.projectName}</Typography>
|
||||
</div>
|
||||
|
||||
<img
|
||||
|
|
@ -152,7 +152,7 @@ const ChooseWorkflowFromExisting: React.FC<ChooseWorkflowFromExistingProps> = ({
|
|||
deleteTemplate({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
data: templateData.template_id,
|
||||
data: templateData.templateID,
|
||||
},
|
||||
});
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ const SelectMyHub = () => {
|
|||
|
||||
// Get all MyHubs with status
|
||||
const { data } = useQuery<HubStatus>(GET_HUB_STATUS, {
|
||||
variables: { data: selectedProjectID },
|
||||
variables: { projectID: selectedProjectID },
|
||||
fetchPolicy: 'cache-and-network',
|
||||
});
|
||||
|
||||
|
|
@ -38,25 +38,25 @@ const SelectMyHub = () => {
|
|||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (data?.getHubStatus !== undefined) {
|
||||
if (data.getHubStatus.length) {
|
||||
if (data?.listHubStatus !== undefined) {
|
||||
if (data.listHubStatus.length) {
|
||||
const hubDetails: MyHubDetail[] = [];
|
||||
data.getHubStatus.forEach((hub) => {
|
||||
data.listHubStatus.forEach((hub) => {
|
||||
/**
|
||||
* Push only available hubs
|
||||
*/
|
||||
if (hub.IsAvailable) {
|
||||
if (hub.isAvailable) {
|
||||
hubDetails.push({
|
||||
id: hub.id,
|
||||
HubName: hub.HubName,
|
||||
RepoBranch: hub.RepoBranch,
|
||||
RepoURL: hub.RepoURL,
|
||||
hubName: hub.hubName,
|
||||
repoBranch: hub.repoBranch,
|
||||
repoURL: hub.repoURL,
|
||||
});
|
||||
}
|
||||
});
|
||||
setAvailableHubs(hubDetails);
|
||||
data.getHubStatus.forEach((hubData) => {
|
||||
if (hubData.HubName.toLowerCase() === 'litmus chaoshub') {
|
||||
data.listHubStatus.forEach((hubData) => {
|
||||
if (hubData.hubName.toLowerCase() === 'litmus chaoshub') {
|
||||
setSelectedHub('Litmus ChaosHub');
|
||||
localforage.setItem('selectedHub', 'Litmus ChaosHub');
|
||||
localforage.setItem('hasSetWorkflowData', false);
|
||||
|
|
@ -85,11 +85,11 @@ const SelectMyHub = () => {
|
|||
>
|
||||
{availableHubs.map((hubs) => (
|
||||
<MenuItem
|
||||
key={hubs.HubName}
|
||||
key={hubs.hubName}
|
||||
data-cy="hubOption"
|
||||
value={hubs.HubName}
|
||||
value={hubs.hubName}
|
||||
>
|
||||
{hubs.HubName}
|
||||
{hubs.hubName}
|
||||
</MenuItem>
|
||||
))}
|
||||
</Select>
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ const ChoosePreDefinedExperiments: React.FC<ChoosePreDefinedExperimentsProps> =
|
|||
|
||||
// Get all MyHubs with status
|
||||
const { data } = useQuery<HubStatus>(GET_HUB_STATUS, {
|
||||
variables: { data: selectedProjectID },
|
||||
variables: { projectID: selectedProjectID },
|
||||
fetchPolicy: 'cache-and-network',
|
||||
});
|
||||
|
||||
|
|
@ -57,8 +57,8 @@ const ChoosePreDefinedExperiments: React.FC<ChoosePreDefinedExperimentsProps> =
|
|||
const [getPredefinedWorkflow] = useLazyQuery(GET_PREDEFINED_WORKFLOW_LIST, {
|
||||
fetchPolicy: 'network-only',
|
||||
onCompleted: (data) => {
|
||||
if (data.GetPredefinedWorkflowList !== undefined) {
|
||||
setWorkflowlist(data.GetPredefinedWorkflowList);
|
||||
if (data.listPredefinedWorkflows !== undefined) {
|
||||
setWorkflowlist(data.listPredefinedWorkflows);
|
||||
}
|
||||
},
|
||||
onError: () => {
|
||||
|
|
@ -98,8 +98,8 @@ const ChoosePreDefinedExperiments: React.FC<ChoosePreDefinedExperimentsProps> =
|
|||
setSelectedHub(event.target.value as string);
|
||||
getPredefinedWorkflow({
|
||||
variables: {
|
||||
hubname: event.target.value as string,
|
||||
projectid: selectedProjectID,
|
||||
hubName: event.target.value as string,
|
||||
projectID: selectedProjectID,
|
||||
},
|
||||
});
|
||||
localforage.setItem('selectedHub', event.target.value as string);
|
||||
|
|
@ -110,32 +110,32 @@ const ChoosePreDefinedExperiments: React.FC<ChoosePreDefinedExperimentsProps> =
|
|||
* fetch the pre-defined workflows
|
||||
*/
|
||||
useEffect(() => {
|
||||
if (data?.getHubStatus !== undefined) {
|
||||
if (data.getHubStatus.length) {
|
||||
if (data?.listHubStatus !== undefined) {
|
||||
if (data.listHubStatus.length) {
|
||||
const hubDetails: MyHubDetail[] = [];
|
||||
data.getHubStatus.forEach((hub) => {
|
||||
data.listHubStatus.forEach((hub) => {
|
||||
/**
|
||||
* Push only available hub
|
||||
*/
|
||||
if (hub.IsAvailable) {
|
||||
if (hub.isAvailable) {
|
||||
hubDetails.push({
|
||||
id: hub.id,
|
||||
HubName: hub.HubName,
|
||||
RepoBranch: hub.RepoBranch,
|
||||
RepoURL: hub.RepoURL,
|
||||
hubName: hub.hubName,
|
||||
repoBranch: hub.repoBranch,
|
||||
repoURL: hub.repoURL,
|
||||
});
|
||||
}
|
||||
});
|
||||
setAvailableHubs(hubDetails);
|
||||
}
|
||||
data.getHubStatus.forEach((hubData) => {
|
||||
if (hubData.HubName.toLowerCase() === 'litmus chaoshub') {
|
||||
data.listHubStatus.forEach((hubData) => {
|
||||
if (hubData.hubName.toLowerCase() === 'litmus chaoshub') {
|
||||
setSelectedHub('Litmus ChaosHub');
|
||||
localforage.setItem('selectedHub', 'Litmus ChaosHub');
|
||||
getPredefinedWorkflow({
|
||||
variables: {
|
||||
hubname: 'Litmus ChaosHub',
|
||||
projectid: selectedProjectID,
|
||||
hubName: 'Litmus ChaosHub',
|
||||
projectID: selectedProjectID,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
@ -163,9 +163,9 @@ const ChoosePreDefinedExperiments: React.FC<ChoosePreDefinedExperimentsProps> =
|
|||
MenuProps={MenuProps}
|
||||
>
|
||||
{availableHubs.map((hubs) => (
|
||||
<MenuItem key={hubs.HubName} value={hubs.HubName}>
|
||||
<MenuItem key={hubs.hubName} value={hubs.hubName}>
|
||||
<Typography data-cy="PreDefinedHubOption">
|
||||
{hubs.HubName}
|
||||
{hubs.hubName}
|
||||
</Typography>
|
||||
</MenuItem>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ const ScheduleWorkflow = forwardRef((_, ref) => {
|
|||
newParsedYaml.metadata.name = fetchWorkflowNameFromManifest(manifest);
|
||||
newParsedYaml.metadata.namespace = namespace;
|
||||
newParsedYaml.metadata.labels = {
|
||||
workflow_id: workflowData.workflow_id,
|
||||
workflow_id: workflowData.workflowID,
|
||||
};
|
||||
newParsedYaml.spec.workflowSpec = oldParsedYaml.spec;
|
||||
const tz = {
|
||||
|
|
@ -207,7 +207,7 @@ const ScheduleWorkflow = forwardRef((_, ref) => {
|
|||
newParsedYaml.metadata.namespace = namespace;
|
||||
newParsedYaml.spec = oldParsedYaml.spec.workflowSpec;
|
||||
newParsedYaml.metadata.labels = {
|
||||
workflow_id: workflowData.workflow_id,
|
||||
workflow_id: workflowData.workflowID,
|
||||
};
|
||||
NewYaml = YAML.stringify(newParsedYaml);
|
||||
workflow.setWorkflowManifest({
|
||||
|
|
@ -225,7 +225,7 @@ const ScheduleWorkflow = forwardRef((_, ref) => {
|
|||
delete newParsedYaml.metadata.generateName;
|
||||
newParsedYaml.metadata.name = fetchWorkflowNameFromManifest(manifest);
|
||||
newParsedYaml.metadata.namespace = namespace;
|
||||
newParsedYaml.metadata.labels = { workflow_id: workflowData.workflow_id };
|
||||
newParsedYaml.metadata.labels = { workflow_id: workflowData.workflowID };
|
||||
const tz = {
|
||||
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC',
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { useSubscription } from '@apollo/client';
|
||||
import {
|
||||
Button,
|
||||
Checkbox,
|
||||
|
|
@ -9,23 +10,16 @@ import {
|
|||
Typography,
|
||||
useTheme,
|
||||
} from '@material-ui/core';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { InputField } from 'litmus-ui';
|
||||
import { Autocomplete } from '@material-ui/lab';
|
||||
import ToggleButton from '@material-ui/lab/ToggleButton';
|
||||
import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';
|
||||
import YAML from 'yaml';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useSubscription } from '@apollo/client';
|
||||
import { Autocomplete } from '@material-ui/lab';
|
||||
import { InputField } from 'litmus-ui';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import useStyles from './styles';
|
||||
import * as WorkflowActions from '../../../../redux/actions/workflow';
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowManifest,
|
||||
} from '../../../../models/redux/workflow';
|
||||
import { RootState } from '../../../../redux/reducers';
|
||||
import useActions from '../../../../redux/actions';
|
||||
import { useSelector } from 'react-redux';
|
||||
import YAML from 'yaml';
|
||||
import { constants } from '../../../../constants';
|
||||
import { KUBE_OBJ } from '../../../../graphql';
|
||||
import {
|
||||
GVRRequest,
|
||||
KubeObjData,
|
||||
|
|
@ -33,9 +27,15 @@ import {
|
|||
KubeObjResource,
|
||||
KubeObjResponse,
|
||||
} from '../../../../models/graphql/createWorkflowData';
|
||||
import { KUBE_OBJ } from '../../../../graphql';
|
||||
import { constants } from '../../../../constants';
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowManifest,
|
||||
} from '../../../../models/redux/workflow';
|
||||
import useActions from '../../../../redux/actions';
|
||||
import * as WorkflowActions from '../../../../redux/actions/workflow';
|
||||
import { RootState } from '../../../../redux/reducers';
|
||||
import { gvrData } from './data';
|
||||
import useStyles from './styles';
|
||||
|
||||
interface AppInfoData {
|
||||
namespace: string;
|
||||
|
|
@ -71,7 +71,7 @@ const TargetApplication: React.FC<TargetApplicationProp> = ({ gotoStep }) => {
|
|||
const workflowData: WorkflowData = useSelector(
|
||||
(state: RootState) => state.workflowData
|
||||
);
|
||||
const { clusterid } = workflowData;
|
||||
const { clusterID } = workflowData;
|
||||
const engineManifest = YAML.parse(manifest.engineYAML);
|
||||
|
||||
/**
|
||||
|
|
@ -161,10 +161,10 @@ const TargetApplication: React.FC<TargetApplicationProp> = ({ gotoStep }) => {
|
|||
*/
|
||||
const { data } = useSubscription<KubeObjResponse, KubeObjRequest>(KUBE_OBJ, {
|
||||
variables: {
|
||||
data: {
|
||||
cluster_id: clusterid,
|
||||
object_type: 'kubeobject',
|
||||
kube_obj_request: {
|
||||
request: {
|
||||
clusterID,
|
||||
objectType: 'kubeobject',
|
||||
kubeObjRequest: {
|
||||
group: GVRObj.group,
|
||||
version: GVRObj.version,
|
||||
resource: GVRObj.resource,
|
||||
|
|
@ -184,7 +184,7 @@ const TargetApplication: React.FC<TargetApplicationProp> = ({ gotoStep }) => {
|
|||
/**
|
||||
* Parse the kubeObject data
|
||||
*/
|
||||
const kubeData: KubeObjData[] = JSON.parse(data.getKubeObject.kube_obj);
|
||||
const kubeData: KubeObjData[] = JSON.parse(data.getKubeObject.kubeObj);
|
||||
kubeData.forEach((obj: KubeObjData) => {
|
||||
const applabels: string[] = [];
|
||||
if (obj.data != null) {
|
||||
|
|
|
|||
|
|
@ -145,10 +145,10 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
const [getCharts] = useLazyQuery<Charts>(GET_CHARTS_DATA, {
|
||||
onCompleted: (data) => {
|
||||
const allExp: ChartName[] = [];
|
||||
data.getCharts.forEach((data) => {
|
||||
return data.Spec.Experiments?.forEach((experiment) => {
|
||||
data.listCharts.forEach((data) => {
|
||||
return data.spec.experiments?.forEach((experiment) => {
|
||||
allExp.push({
|
||||
ChaosName: data.Metadata.Name,
|
||||
ChaosName: data.metadata.name,
|
||||
ExperimentName: experiment,
|
||||
});
|
||||
});
|
||||
|
|
@ -166,7 +166,7 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
{
|
||||
onCompleted: (data) => {
|
||||
const wfmanifest = updateEngineName(
|
||||
YAML.parse(data.GetPredefinedExperimentYAML)
|
||||
YAML.parse(data.getPredefinedExperimentYAML)
|
||||
);
|
||||
const updatedManifestImage = updateManifestImage(
|
||||
YAML.parse(wfmanifest),
|
||||
|
|
@ -189,7 +189,7 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
*/
|
||||
const [getTemplate] = useLazyQuery(GET_TEMPLATE_BY_ID, {
|
||||
onCompleted: (data) => {
|
||||
const parsedYAML = YAML.parse(data.GetTemplateManifestByID.manifest);
|
||||
const parsedYAML = YAML.parse(data.getWorkflowManifestByID.manifest);
|
||||
|
||||
const updatedManifestImage = updateManifestImage(
|
||||
parsedYAML,
|
||||
|
|
@ -308,12 +308,12 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
localforage.getItem('selectedHub').then((hub) => {
|
||||
getPredefinedExperimentYaml({
|
||||
variables: {
|
||||
experimentInput: {
|
||||
ProjectID: selectedProjectID,
|
||||
ChartName: 'predefined',
|
||||
ExperimentName: (value as WorkflowDetailsProps).CRDLink,
|
||||
HubName: hub as string,
|
||||
FileType: 'WORKFLOW',
|
||||
request: {
|
||||
projectID: selectedProjectID,
|
||||
chartName: 'predefined',
|
||||
experimentName: (value as WorkflowDetailsProps).CRDLink,
|
||||
hubName: hub as string,
|
||||
fileType: 'WORKFLOW',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
@ -330,7 +330,7 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
getTemplate({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
data: (value as ChooseWorkflowRadio).id,
|
||||
templateID: (value as ChooseWorkflowRadio).id,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
@ -340,7 +340,7 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
localforage.getItem('selectedHub').then((hub) => {
|
||||
setHubName(hub as string);
|
||||
getCharts({
|
||||
variables: { projectID: selectedProjectID, HubName: hub as string },
|
||||
variables: { projectID: selectedProjectID, hubName: hub as string },
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -377,23 +377,23 @@ const TuneWorkflow = forwardRef((_, ref) => {
|
|||
const handleDone = () => {
|
||||
getExperimentYaml({
|
||||
variables: {
|
||||
experimentInput: {
|
||||
ProjectID: selectedProjectID,
|
||||
HubName: hubName,
|
||||
ChartName: selectedExp.split('/')[0],
|
||||
ExperimentName: selectedExp.split('/')[1],
|
||||
FileType: 'EXPERIMENT',
|
||||
request: {
|
||||
projectID: selectedProjectID,
|
||||
hubName,
|
||||
chartName: selectedExp.split('/')[0],
|
||||
experimentName: selectedExp.split('/')[1],
|
||||
fileType: 'EXPERIMENT',
|
||||
},
|
||||
},
|
||||
});
|
||||
getEngineYaml({
|
||||
variables: {
|
||||
experimentInput: {
|
||||
ProjectID: selectedProjectID,
|
||||
HubName: hubName,
|
||||
ChartName: selectedExp.split('/')[0],
|
||||
ExperimentName: selectedExp.split('/')[1],
|
||||
FileType: 'ENGINE',
|
||||
request: {
|
||||
projectID: selectedProjectID,
|
||||
hubName,
|
||||
chartName: selectedExp.split('/')[0],
|
||||
experimentName: selectedExp.split('/')[1],
|
||||
fileType: 'ENGINE',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import YamlEditor from '../../../components/YamlEditor/Editor';
|
|||
import { parseYamlValidations } from '../../../components/YamlEditor/Validations';
|
||||
import { CREATE_WORKFLOW } from '../../../graphql';
|
||||
import {
|
||||
CreateWorkFlowInput,
|
||||
CreateWorkFlowRequest,
|
||||
CreateWorkflowResponse,
|
||||
WeightMap,
|
||||
} from '../../../models/graphql/createWorkflowData';
|
||||
|
|
@ -90,7 +90,7 @@ const VerifyCommit = forwardRef(
|
|||
(state: RootState) => state.workflowData
|
||||
);
|
||||
|
||||
const { clusterid, cronSyntax, clustername } = workflowData;
|
||||
const { clusterID, cronSyntax, clusterName } = workflowData;
|
||||
|
||||
const { manifest, isCustomWorkflow, isUploaded } = useSelector(
|
||||
(state: RootState) => state.workflowManifest
|
||||
|
|
@ -226,7 +226,7 @@ const VerifyCommit = forwardRef(
|
|||
|
||||
// Create Workflow Mutation
|
||||
const [createChaosWorkFlow, { loading, error: workflowError }] =
|
||||
useMutation<CreateWorkflowResponse, CreateWorkFlowInput>(
|
||||
useMutation<CreateWorkflowResponse, CreateWorkFlowRequest>(
|
||||
CREATE_WORKFLOW,
|
||||
{
|
||||
onError: () => {
|
||||
|
|
@ -246,7 +246,7 @@ const VerifyCommit = forwardRef(
|
|||
|
||||
weights.forEach((data) => {
|
||||
weightData.push({
|
||||
experiment_name: data.experimentName,
|
||||
experimentName: data.experimentName,
|
||||
weightage: data.weight,
|
||||
});
|
||||
});
|
||||
|
|
@ -261,17 +261,17 @@ const VerifyCommit = forwardRef(
|
|||
const yamlJson = JSON.stringify(updatedYaml, null, 2); // Converted to Stringified JSON
|
||||
|
||||
const chaosWorkFlowInputs = {
|
||||
workflow_manifest: yamlJson,
|
||||
workflowManifest: yamlJson,
|
||||
cronSyntax,
|
||||
workflow_name: fetchWorkflowNameFromManifest(manifest),
|
||||
workflow_description: workflow.description,
|
||||
workflowName: fetchWorkflowNameFromManifest(manifest),
|
||||
workflowDescription: workflow.description,
|
||||
isCustomWorkflow,
|
||||
weightages: weightData,
|
||||
project_id: getProjectID(),
|
||||
cluster_id: clusterid,
|
||||
projectID: getProjectID(),
|
||||
clusterID,
|
||||
};
|
||||
createChaosWorkFlow({
|
||||
variables: { ChaosWorkFlowInput: chaosWorkFlowInputs },
|
||||
variables: { request: chaosWorkFlowInputs },
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -415,7 +415,7 @@ const VerifyCommit = forwardRef(
|
|||
</Typography>
|
||||
|
||||
<Typography className={classes.right}>
|
||||
{clustername}
|
||||
{clusterName}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className={classes.itemWrapper}>
|
||||
|
|
|
|||
|
|
@ -66,12 +66,12 @@ const WorkflowSettings = forwardRef((_, ref) => {
|
|||
fetchPolicy: 'cache-and-network',
|
||||
onCompleted: (data) => {
|
||||
if (data.getHubExperiment !== undefined) {
|
||||
setName(data.getHubExperiment.Metadata.Name.toLowerCase());
|
||||
setDescription(data.getHubExperiment.Spec.CategoryDescription);
|
||||
setName(data.getHubExperiment.metadata.name.toLowerCase());
|
||||
setDescription(data.getHubExperiment.spec.categoryDescription);
|
||||
setIcon(
|
||||
`${config.grahqlEndpoint}/icon/${projectID}/${hubName}/predefined/${data.getHubExperiment.Metadata.Name}.png`
|
||||
`${config.grahqlEndpoint}/icon/${projectID}/${hubName}/predefined/${data.getHubExperiment.metadata.name}.png`
|
||||
);
|
||||
setCRDLink(data.getHubExperiment.Metadata.Name);
|
||||
setCRDLink(data.getHubExperiment.metadata.name);
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -80,12 +80,12 @@ const WorkflowSettings = forwardRef((_, ref) => {
|
|||
const [getSavedTemplateDetails] = useLazyQuery(GET_TEMPLATE_BY_ID, {
|
||||
fetchPolicy: 'network-only',
|
||||
onCompleted: (data) => {
|
||||
if (data.GetTemplateManifestByID !== undefined) {
|
||||
setName(data.GetTemplateManifestByID.template_name);
|
||||
setDescription(data.GetTemplateManifestByID.template_description);
|
||||
if (data.getWorkflowManifestByID !== undefined) {
|
||||
setName(data.getWorkflowManifestByID.templateName);
|
||||
setDescription(data.getWorkflowManifestByID.templateDescription);
|
||||
setIcon('./avatars/litmus.svg');
|
||||
setCRDLink(data.GetTemplateManifestByID.template_id);
|
||||
const savedTemplate = data.GetTemplateManifestByID.manifest;
|
||||
setCRDLink(data.getWorkflowManifestByID.template_id);
|
||||
const savedTemplate = data.getWorkflowManifestByID.manifest;
|
||||
if (parsed(savedTemplate).length === 0) {
|
||||
workflowAction.setWorkflowManifest({
|
||||
manifest: savedTemplate,
|
||||
|
|
@ -144,12 +144,12 @@ const WorkflowSettings = forwardRef((_, ref) => {
|
|||
setHubName(hub as string);
|
||||
getWorkflowDetails({
|
||||
variables: {
|
||||
data: {
|
||||
HubName: hub as string,
|
||||
ProjectID: projectID,
|
||||
ChartName: 'predefined',
|
||||
ExperimentName: (value as ChooseWorkflowRadio).id,
|
||||
FileType: 'CSV',
|
||||
request: {
|
||||
hubName: hub as string,
|
||||
projectID,
|
||||
chartName: 'predefined',
|
||||
experimentName: (value as ChooseWorkflowRadio).id,
|
||||
fileType: 'CSV',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
@ -161,7 +161,7 @@ const WorkflowSettings = forwardRef((_, ref) => {
|
|||
getSavedTemplateDetails({
|
||||
variables: {
|
||||
projectID: getProjectID(),
|
||||
data: (value as ChooseWorkflowRadio).id,
|
||||
templateID: (value as ChooseWorkflowRadio).id,
|
||||
},
|
||||
});
|
||||
setDisplayRegChange(true);
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ const WorkflowRunCard: React.FC<WorkflowRunCardProps> = ({ data }) => {
|
|||
});
|
||||
|
||||
history.push({
|
||||
pathname: `/workflows/${data.workflow_run_id}`,
|
||||
pathname: `/workflows/${data.workflowRunID}`,
|
||||
search: `?projectID=${projectID}&projectRole=${projectRole}`,
|
||||
});
|
||||
}}
|
||||
|
|
@ -93,10 +93,10 @@ const WorkflowRunCard: React.FC<WorkflowRunCardProps> = ({ data }) => {
|
|||
<Typography
|
||||
className={`${classes.testName} ${classes.noWrapProvider}`}
|
||||
>
|
||||
{data.workflow_name}
|
||||
{data.workflowName}
|
||||
</Typography>
|
||||
<Typography className={classes.hint}>
|
||||
{data.cluster_name}
|
||||
{data.clusterName}
|
||||
</Typography>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -109,12 +109,12 @@ const WorkflowRunCard: React.FC<WorkflowRunCardProps> = ({ data }) => {
|
|||
)}
|
||||
</Typography>
|
||||
<Typography
|
||||
className={getResiliencyScoreVariant(data.resiliency_score ?? 0)}
|
||||
className={getResiliencyScoreVariant(data.resiliencyScore ?? 0)}
|
||||
>
|
||||
{data.resiliency_score === undefined ||
|
||||
data.resiliency_score === null
|
||||
{data.resiliencyScore === undefined ||
|
||||
data.resiliencyScore === null
|
||||
? 'NA'
|
||||
: `${data.resiliency_score}%`}
|
||||
: `${data.resiliencyScore}%`}
|
||||
</Typography>
|
||||
</div>
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ const WorkflowRunCard: React.FC<WorkflowRunCardProps> = ({ data }) => {
|
|||
<Typography
|
||||
className={`${classes.noWrapProvider} ${classes.lastRunTime}`}
|
||||
>
|
||||
{timeDifferenceForDate(data.last_updated)}
|
||||
{timeDifferenceForDate(data.lastUpdated)}
|
||||
</Typography>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import { WORKFLOW_DETAILS } from '../../../graphql';
|
|||
import { Role } from '../../../models/graphql/user';
|
||||
import {
|
||||
Workflow,
|
||||
WorkflowDataVars,
|
||||
WorkflowDataRequest,
|
||||
} from '../../../models/graphql/workflowData';
|
||||
import useActions from '../../../redux/actions';
|
||||
import * as TabActions from '../../../redux/actions/tabs';
|
||||
|
|
@ -50,12 +50,12 @@ const AgentConfiguredHome: React.FC<AgentConfiguredHomeProps> = ({
|
|||
setModalOpen(true);
|
||||
};
|
||||
|
||||
const { data, loading, error } = useQuery<Workflow, WorkflowDataVars>(
|
||||
const { data, loading, error } = useQuery<Workflow, WorkflowDataRequest>(
|
||||
WORKFLOW_DETAILS,
|
||||
{
|
||||
variables: {
|
||||
workflowRunsInput: {
|
||||
project_id: projectID,
|
||||
request: {
|
||||
projectID,
|
||||
pagination: {
|
||||
page: 0,
|
||||
limit: 3,
|
||||
|
|
@ -66,7 +66,7 @@ const AgentConfiguredHome: React.FC<AgentConfiguredHomeProps> = ({
|
|||
}
|
||||
);
|
||||
|
||||
const workflowRunCount = data?.getWorkflowRuns.total_no_of_workflow_runs ?? 0;
|
||||
const workflowRunCount = data?.listWorkflowRuns.totalNoOfWorkflowRuns ?? 0;
|
||||
|
||||
if (error) {
|
||||
console.error('Error fetching Workflow Data');
|
||||
|
|
@ -112,9 +112,9 @@ const AgentConfiguredHome: React.FC<AgentConfiguredHomeProps> = ({
|
|||
'homeViews.agentConfiguredHome.recentWorkflowRuns.schedule'
|
||||
)}
|
||||
>
|
||||
{data?.getWorkflowRuns.workflow_runs.map((workflow) => {
|
||||
{data?.listWorkflowRuns.workflowRuns.map((workflow) => {
|
||||
return (
|
||||
<WorkflowRunCard key={workflow.workflow_run_id} data={workflow} />
|
||||
<WorkflowRunCard key={workflow.workflowRunID} data={workflow} />
|
||||
);
|
||||
})}
|
||||
</RecentOverviewContainer>
|
||||
|
|
@ -195,7 +195,7 @@ const AgentConfiguredHome: React.FC<AgentConfiguredHomeProps> = ({
|
|||
/>
|
||||
|
||||
{/* Project Level info container */}
|
||||
{projectRole === Role.owner && <ProjectInfoContainer />}
|
||||
{projectRole === Role.OWNER && <ProjectInfoContainer />}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ const LandingHome: React.FC = () => {
|
|||
{/* Agent Deployment Container */}
|
||||
<UnconfiguredAgent />
|
||||
{/* Project Level info container */}
|
||||
{projectRole === Role.owner && <ProjectInfoContainer />}
|
||||
{projectRole === Role.OWNER && <ProjectInfoContainer />}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue