diff --git a/backend/plugins/github_graphql/tasks/job_collector.go b/backend/plugins/github_graphql/tasks/job_collector.go index af25d589790..c73ecfa5d69 100644 --- a/backend/plugins/github_graphql/tasks/job_collector.go +++ b/backend/plugins/github_graphql/tasks/job_collector.go @@ -55,38 +55,40 @@ type GraphqlQueryCheckSuite struct { EndCursor string `graphql:"endCursor"` HasNextPage bool `graphql:"hasNextPage"` } - Nodes []struct { - Id string - Name string - DetailsUrl string - DatabaseId int - Status string - StartedAt *time.Time - Conclusion string - CompletedAt *time.Time - //ExternalId string - //Url string - //Title interface{} - //Text interface{} - //Summary interface{} - - Steps struct { - TotalCount int - Nodes []struct { - CompletedAt *time.Time `json:"completed_at"` - Conclusion string `json:"conclusion"` - Name string `json:"name"` - Number int `json:"number"` - SecondsToCompletion int `json:"seconds_to_completion"` - StartedAt *time.Time `json:"started_at"` - Status string `json:"status"` - } - } `graphql:"steps(first: 50)"` - } + Nodes []GraphqlQueryCheckRun } `graphql:"checkRuns(first: $pageSize, after: $skipCursor)"` } `graphql:"... on CheckSuite"` } +type GraphqlQueryCheckRun struct { + Id string + Name string + DetailsUrl string + DatabaseId int + Status string + StartedAt *time.Time + Conclusion string + CompletedAt *time.Time + //ExternalId string + //Url string + //Title interface{} + //Text interface{} + //Summary interface{} + + Steps struct { + TotalCount int + Nodes []struct { + CompletedAt *time.Time `json:"completed_at"` + Conclusion string `json:"conclusion"` + Name string `json:"name"` + Number int `json:"number"` + SecondsToCompletion int `json:"seconds_to_completion"` + StartedAt *time.Time `json:"started_at"` + Status string `json:"status"` + } + } `graphql:"steps(first: 50)"` +} + type SimpleWorkflowRun struct { CheckSuiteNodeID string } diff --git a/backend/plugins/github_graphql/tasks/job_extractor.go b/backend/plugins/github_graphql/tasks/job_extractor.go index 1bd035a7eee..5d732eccd60 100644 --- a/backend/plugins/github_graphql/tasks/job_extractor.go +++ b/backend/plugins/github_graphql/tasks/job_extractor.go @@ -51,50 +51,42 @@ func ExtractJobs(taskCtx plugin.SubTaskContext) errors.Error { Table: RAW_GRAPHQL_JOBS_TABLE, }, Extract: func(row *api.RawData) ([]interface{}, errors.Error) { - checkSuite := &GraphqlQueryCheckSuite{} - err := errors.Convert(json.Unmarshal(row.Data, checkSuite)) + checkRun := &GraphqlQueryCheckRun{} + err := errors.Convert(json.Unmarshal(row.Data, checkRun)) if err != nil { return nil, err } results := make([]interface{}, 0, 1) - for _, checkRun := range checkSuite.CheckSuite.CheckRuns.Nodes { - paramsBytes, err := json.Marshal(checkRun.Steps.Nodes) - if err != nil { - taskCtx.GetLogger().Error(err, `Marshal checkRun.Steps.Nodes fail and ignore`) - } - githubJob := &models.GithubJob{ - ConnectionId: data.Options.ConnectionId, - RunID: checkSuite.CheckSuite.WorkflowRun.DatabaseId, - RepoId: data.Options.GithubId, - ID: checkRun.DatabaseId, - NodeID: checkRun.Id, - HTMLURL: checkRun.DetailsUrl, - Status: strings.ToUpper(checkRun.Status), - Conclusion: strings.ToUpper(checkRun.Conclusion), - StartedAt: checkRun.StartedAt, - CompletedAt: checkRun.CompletedAt, - Name: checkRun.Name, - Steps: paramsBytes, - Type: data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, checkRun.Name), - Environment: data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION, checkRun.Name), - // these columns can not fill by graphql - //HeadSha: ``, // use _tool_github_runs - //RunURL: ``, - //CheckRunURL: ``, - //Labels: ``, // not in use - //RunnerID: ``, // not in use - //RunnerName: ``, // not in use - //RunnerGroupID: ``, // not in use - } - results = append(results, githubJob) + + paramsBytes, marshalError := json.Marshal(checkRun.Steps.Nodes) + err = errors.Convert(marshalError) + if err != nil { + taskCtx.GetLogger().Error(err, `Marshal checkRun.Steps.Nodes failed`) } - return results, nil + githubJob := &models.GithubJob{ + ConnectionId: data.Options.ConnectionId, + RunID: checkRun.DatabaseId, + RepoId: data.Options.GithubId, + ID: checkRun.DatabaseId, + NodeID: checkRun.Id, + HTMLURL: checkRun.DetailsUrl, + Status: strings.ToUpper(checkRun.Status), + Conclusion: strings.ToUpper(checkRun.Conclusion), + StartedAt: checkRun.StartedAt, + CompletedAt: checkRun.CompletedAt, + Name: checkRun.Name, + Steps: paramsBytes, + Type: data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, checkRun.Name), + Environment: data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION, checkRun.Name), + } + results = append(results, githubJob) + return results, nil }, }) if err != nil { - return err + return errors.Convert(err) } return extractor.Execute()