| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package gcp
- import (
- "context"
- "fmt"
- "cloud.google.com/go/bigquery"
- "github.com/opencost/opencost/pkg/cloud"
- )
- type BigQueryQuerier struct {
- BigQueryConfiguration
- ConnectionStatus cloud.ConnectionStatus
- }
- func (bqq *BigQueryQuerier) GetStatus() cloud.ConnectionStatus {
- // initialize status if it has not done so; this can happen if the integration is inactive
- if bqq.ConnectionStatus.String() == "" {
- bqq.ConnectionStatus = cloud.InitialStatus
- }
- return bqq.ConnectionStatus
- }
- func (bqq *BigQueryQuerier) Equals(config cloud.Config) bool {
- thatConfig, ok := config.(*BigQueryQuerier)
- if !ok {
- return false
- }
- return bqq.BigQueryConfiguration.Equals(&thatConfig.BigQueryConfiguration)
- }
- func (bqq *BigQueryQuerier) Query(ctx context.Context, queryStr string) (*bigquery.RowIterator, error) {
- err := bqq.Validate()
- if err != nil {
- bqq.ConnectionStatus = cloud.InvalidConfiguration
- return nil, err
- }
- client, err := bqq.GetBigQueryClient(ctx)
- if err != nil {
- bqq.ConnectionStatus = cloud.FailedConnection
- return nil, err
- }
- query := client.Query(queryStr)
- iter, err := query.Read(ctx)
- // If result is empty and connection status is not already successful update status to missing data
- if iter == nil && bqq.ConnectionStatus != cloud.SuccessfulConnection {
- bqq.ConnectionStatus = cloud.MissingData
- } else {
- bqq.ConnectionStatus = cloud.SuccessfulConnection
- }
- if err != nil {
- return iter, fmt.Errorf("BigQueryQuerier: Query: error reading query results: %w", err)
- }
- return iter, nil
- }
|