in pkg/updater/updater.go [1171:1227]
func appendCell(row *statepb.Row, cell Cell, start, count int) {
latest := int32(cell.Result)
n := len(row.Results)
switch {
case n == 0, row.Results[n-2] != latest:
row.Results = append(row.Results, latest, int32(count))
default:
row.Results[n-1] += int32(count)
}
addCellID := hasCellID(row.Name)
for i := 0; i < count; i++ {
columnIdx := int32(start + i)
for metricName, measurement := range cell.Metrics {
var metric *statepb.Metric
var ok bool
for _, name := range row.Metric {
if name == metricName {
ok = true
break
}
}
if !ok {
row.Metric = append(row.Metric, metricName)
}
for _, metric = range row.Metrics {
if metric.Name == metricName {
break
}
metric = nil
}
if metric == nil {
metric = &statepb.Metric{Name: metricName}
row.Metrics = append(row.Metrics, metric)
}
// len()-1 because we already appended the cell id
appendMetric(metric, columnIdx, measurement)
}
if cell.Result == statuspb.TestStatus_NO_RESULT {
continue
}
if addCellID {
// These values can be derived from the parent row and don't need to be repeated here.
row.CellIds = append(row.CellIds, cell.CellID)
row.Properties = append(row.Properties, &statepb.Property{
Property: cell.Properties,
})
}
// Javascript client expects no result cells to skip icons/messages
row.Messages = append(row.Messages, truncate(cell.Message, 140))
row.Icons = append(row.Icons, cell.Icon)
row.UserProperty = append(row.UserProperty, cell.UserProperty)
}
row.Issues = append(row.Issues, cell.Issues...)
}