report/diff_report.go (55 lines of code) (raw):

package report import ( _ "embed" "strings" "github.com/azure/armstrong/types" paltypes "github.com/ms-henglu/pal/types" ) //go:embed diff_report.md var diffReportTemplate string func DiffMarkdownReport(report types.Diff, logs []paltypes.RequestTrace) string { parts := strings.Split(report.Type, "@") resourceType := "" apiVersion := "" if len(parts) == 2 { resourceType = parts[0] apiVersion = parts[1] } operationId := "TODO\ne.g., VirtualMachines_Get" diffDescription := DiffMessageDescription(report.Change) diffJson := DiffMessageMarkdown(report.Change) errCodes := make([]string, 0) if strings.Contains(diffJson, "in response, expect") { errCodes = append(errCodes, "ROUNDTRIP_INCONSISTENT_PROPERTY") } if strings.Contains(diffJson, "is not returned from response") { errCodes = append(errCodes, "ROUNDTRIP_MISSING_PROPERTY") } requestTraces := RequestTracesContent(report.Id, logs) content := diffReportTemplate content = strings.ReplaceAll(content, "${resource_type}", resourceType) content = strings.ReplaceAll(content, "${api_version}", apiVersion) content = strings.ReplaceAll(content, "${operation_id}", operationId) content = strings.ReplaceAll(content, "${error_code_in_title}", strings.Join(errCodes, " && ")) content = strings.ReplaceAll(content, "${error_code_in_block}", strings.Join(errCodes, "\n")) content = strings.ReplaceAll(content, "${request_traces}", requestTraces) content = strings.ReplaceAll(content, "${diff_description}", diffDescription) content = strings.ReplaceAll(content, "${diff_json}", diffJson) return content } func RequestTracesContent(id string, logs []paltypes.RequestTrace) string { content := "" index := len(logs) - 1 for ; index >= 0; index-- { if IsUrlMatchWithId(logs[index].Url, id) && logs[index].Method == "GET" { content = RequestTraceToString(logs[index]) break } } for ; index >= 0; index-- { if IsUrlMatchWithId(logs[index].Url, id) && logs[index].Method == "PUT" { content = RequestTraceToString(logs[index]) + "\n\n\n" + content break } } return content }