func createEndpointGroupResultView(results []EndpointGroupInterface, report reports.MongoInterface, format string) ([]byte, error) { docRoot := &root{} prevSuperGroup := "" prevEndpointGroup := "" endpointGroup := &Group{} superGroup := &SuperGroup{} // we iterate through the results struct array // keeping only the value of each row for _, row := range results { timestamp, _ := time.Parse(customForm[0], fmt.Sprint(row.Date)) //if new superGroup value does not match the previous superGroup value //we create a new superGroup in the xml if prevSuperGroup != row.SuperGroup { prevSuperGroup = row.SuperGroup superGroup = &SuperGroup{ Name: row.SuperGroup, Type: report.GetGroupType(), } docRoot.Result = append(docRoot.Result, superGroup) prevEndpointGroup = "" } //if new endpointGroup does not match the previous service value //we create a new endpointGroup entry in the xml if prevEndpointGroup != row.Name { prevEndpointGroup = row.Name endpointGroup = &Group{ Name: row.Name, Type: report.GetEndpointGroupType(), } superGroup.Endpoints = append(superGroup.Endpoints, endpointGroup) } //we append the new availability values endpointGroup.Availability = append(endpointGroup.Availability, &Availability{ Timestamp: timestamp.Format(customForm[1]), Availability: fmt.Sprintf("%g", row.Availability), Reliability: fmt.Sprintf("%g", row.Reliability), Unknown: fmt.Sprintf("%g", row.Unknown), Uptime: fmt.Sprintf("%g", row.Up), Downtime: fmt.Sprintf("%g", row.Down), }) } if strings.ToLower(format) == "application/json" { return json.MarshalIndent(docRoot, " ", " ") } else { return xml.MarshalIndent(docRoot, " ", " ") } }