mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package statement
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/stress/v2/stress_client"
|
|
)
|
|
|
|
// InfluxqlStatement is a Statement Implementation that allows statements that parse in InfluxQL to be passed directly to the target instance
|
|
type InfluxqlStatement struct {
|
|
StatementID string
|
|
Query string
|
|
Tracer *stressClient.Tracer
|
|
}
|
|
|
|
func (i *InfluxqlStatement) tags() map[string]string {
|
|
tags := make(map[string]string)
|
|
return tags
|
|
}
|
|
|
|
// SetID statisfies the Statement Interface
|
|
func (i *InfluxqlStatement) SetID(s string) {
|
|
i.StatementID = s
|
|
}
|
|
|
|
// Run statisfies the Statement Interface
|
|
func (i *InfluxqlStatement) Run(s *stressClient.StressTest) {
|
|
|
|
// Set the tracer
|
|
i.Tracer = stressClient.NewTracer(i.tags())
|
|
|
|
// Make the Package
|
|
p := stressClient.NewPackage(stressClient.Query, []byte(i.Query), i.StatementID, i.Tracer)
|
|
|
|
// Increment the tracer
|
|
i.Tracer.Add(1)
|
|
|
|
// Send the Package
|
|
s.SendPackage(p)
|
|
|
|
// Wait for all operations to finish
|
|
i.Tracer.Wait()
|
|
}
|
|
|
|
// Report statisfies the Statement Interface
|
|
// No test coverage, fix
|
|
func (i *InfluxqlStatement) Report(s *stressClient.StressTest) (out string) {
|
|
allData := s.GetStatementResults(i.StatementID, "query")
|
|
|
|
iqlr := &influxQlReport{
|
|
statement: i.Query,
|
|
columns: allData[0].Series[0].Columns,
|
|
values: allData[0].Series[0].Values,
|
|
}
|
|
|
|
iqlr.responseTime = time.Duration(responseTimes(iqlr.columns, iqlr.values)[0].Value)
|
|
|
|
switch countSuccesses(iqlr.columns, iqlr.values) {
|
|
case 0:
|
|
iqlr.success = false
|
|
case 1:
|
|
iqlr.success = true
|
|
default:
|
|
log.Fatal("Error fetching response for InfluxQL statement")
|
|
}
|
|
|
|
return iqlr.String()
|
|
}
|