query:=fmt.Sprintf("SELECT serviceName, quantile(0.99)(durationNano) as p99, avg(durationNano) as avgDuration, count(*) as numCalls FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' GROUP BY serviceName",r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10))
forrows.Next(){
varvaluestring
iferr:=rows.Scan(&value);err!=nil{
returnnil,err
}
values=append(values,value)
}
err:=r.db.Select(&serviceItems,query)
zap.S().Info(query)
iferr:=rows.Err();err!=nil{
returnnil,err
iferr!=nil{
zap.S().Debug("Error in processing sql query: ",err)
returnnil,fmt.Errorf("Error in processing sql query")
}
returnvalues,nil
}
////////////////// Below block gets 5xx of services
serviceErrorItems:=[]model.ServiceItem{}
// GetServices fetches the sorted service list that have not expired
query=fmt.Sprintf("SELECT serviceName, count(*) as numErrors FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' AND statusCode>=500 GROUP BY serviceName",r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10))
ifr.indexTable==""{
returnnil,ErrNoIndexTable
err=r.db.Select(&serviceErrorItems,query)
zap.S().Info(query)
iferr!=nil{
zap.S().Debug("Error in processing sql query: ",err)
returnnil,fmt.Errorf("Error in processing sql query")
}
varserviceItems[]model.ServiceItem
m5xx:=make(map[string]int)
query:=fmt.Sprintf("SELECT serviceName, quantile(0.99)(durationNano) as p99, avg(durationNano) as avgDuration, count(*) as numCalls FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' GROUP BY serviceName",r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10))
////////////////// Below block gets 4xx of services
service4xxItems:=[]model.ServiceItem{}
query=fmt.Sprintf("SELECT serviceName, count(*) as num4xx FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' AND statusCode>=400 AND statusCode<500 GROUP BY serviceName",r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10))
query:=fmt.Sprintf("SELECT toStartOfInterval(timestamp, INTERVAL %s minute) as time, quantile(0.99)(durationNano) as p99, quantile(0.95)(durationNano) as p95,quantile(0.50)(durationNano) as p50, count(*) as numCalls FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' AND serviceName='%s' GROUP BY time ORDER BY time DESC",strconv.Itoa(int(queryParams.StepSeconds/60)),r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10),queryParams.ServiceName)
returnnil,fmt.Errorf("Error in processing sql query")
}
serviceErrorItems:=[]model.ServiceErrorItem{}
query=fmt.Sprintf("SELECT toStartOfInterval(timestamp, INTERVAL %s minute) as time, count(*) as numErrors FROM %s WHERE timestamp>='%s' AND timestamp<='%s' AND kind='2' AND serviceName='%s' AND statusCode>=500 GROUP BY time ORDER BY time DESC",strconv.Itoa(int(queryParams.StepSeconds/60)),r.indexTable,strconv.FormatInt(queryParams.Start.UnixNano(),10),strconv.FormatInt(queryParams.End.UnixNano(),10),queryParams.ServiceName)
err=r.db.Select(&serviceErrorItems,query)
zap.S().Info(query)
iferr!=nil{
zap.S().Debug("Error in processing sql query: ",err)
returnnil,fmt.Errorf("Error in processing sql query")
////////////////// Below block gets 4xx of services
sqlQuery=fmt.Sprintf(`SELECT COUNT(SpanId) as numErrors, "ServiceName" as "serviceName" FROM %s WHERE "__time" >= '%s' and "__time" <= '%s' and "Kind"='2' and "StatusCode">=400 and "StatusCode" < 500 GROUP BY "ServiceName"`,constants.DruidDatasource,query.StartTime,query.EndTime)
sqlQuery=fmt.Sprintf(`SELECT COUNT(SpanId) as num4xx, "ServiceName" as "serviceName" FROM %s WHERE "__time" >= '%s' and "__time" <= '%s' and "Kind"='2' and "StatusCode">=400 and "StatusCode" < 500 GROUP BY "ServiceName"`,constants.DruidDatasource,query.StartTime,query.EndTime)