blob: 34a22a418aed153c67864ff4fff59b0e9e428f50 [file] [log] [blame]
package data
import (
"fmt"
"strings"
monitoringpb "google.golang.org/genproto/googleapis/monitoring/v3"
)
type DataSet interface {
GetData() *LegacyDataSet
}
type LegacyDataSet struct {
Headers []string
Data [][]interface{}
}
func (data *LegacyDataSet) String() string {
lines := make([]string, len(data.Data)+1)
lines[0] = strings.Join(data.Headers, "\t")
for i, row := range data.Data {
lines[i+1] = strings.Join(GetRowAsStrings(row), "\t")
}
return strings.Join(lines, "\n")
}
func CreateDataSet(headers []string) *LegacyDataSet {
return &LegacyDataSet{Headers: headers, Data: make([][]interface{}, 0)}
}
func (lds *LegacyDataSet) GetData() *LegacyDataSet {
return lds
}
func (lds *LegacyDataSet) AddRow(values ...interface{}) error {
if len(values) != len(lds.Headers) {
return fmt.Errorf("DataSet has %d columns (%s), but new row has %d (values: %s).", len(lds.Headers), strings.Join(lds.Headers, ", "), len(values), strings.Join(GetRowAsStrings(values), ", "))
}
lds.Data = append(lds.Data, values)
return nil
}
func GetRowAsStrings(row []interface{}) []string {
stringValues := make([]string, len(row))
for i, v := range row {
if str, ok := v.(string); ok {
stringValues[i] = str
} else {
stringValues[i] = fmt.Sprintf("%v", v)
}
}
return stringValues
}
type StackDriverTimeSeriesDataSet interface {
CreateTimeSeriesRequest(projectID string) *monitoringpb.CreateTimeSeriesRequest
}
type PipelineID struct {
Org string
Slug string
}
func CreatePipelineID(value string) (*PipelineID, error) {
parts := strings.Split(value, "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid pipeline ID '%s'. Pipelines must be specified as 'org_slug/pipeline_slug'.", value)
}
return &PipelineID{Org: parts[0], Slug: parts[1]}, nil
}
func (pid *PipelineID) String() string {
return fmt.Sprintf("%s/%s", pid.Org, pid.Slug)
}