| 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) | |
| } |