Parcourir la source

Merge pull request #12880 from svenklemm/setupfillmode

Refactor setting fillmode
Marcus Efraimsson il y a 7 ans
Parent
commit
c4a189ee52
4 fichiers modifiés avec 30 ajouts et 46 suppressions
  1. 3 16
      pkg/tsdb/mssql/macros.go
  2. 3 15
      pkg/tsdb/mysql/macros.go
  3. 3 15
      pkg/tsdb/postgres/macros.go
  4. 21 0
      pkg/tsdb/sql_engine.go

+ 3 - 16
pkg/tsdb/mssql/macros.go

@@ -6,8 +6,6 @@ import (
 	"strings"
 	"time"
 
-	"strconv"
-
 	"github.com/grafana/grafana/pkg/tsdb"
 )
 
@@ -97,20 +95,9 @@ func (m *msSqlMacroEngine) evaluateMacro(name string, args []string) (string, er
 			return "", fmt.Errorf("error parsing interval %v", args[1])
 		}
 		if len(args) == 3 {
-			m.query.Model.Set("fill", true)
-			m.query.Model.Set("fillInterval", interval.Seconds())
-			switch args[2] {
-			case "NULL":
-				m.query.Model.Set("fillMode", "null")
-			case "previous":
-				m.query.Model.Set("fillMode", "previous")
-			default:
-				m.query.Model.Set("fillMode", "value")
-				floatVal, err := strconv.ParseFloat(args[2], 64)
-				if err != nil {
-					return "", fmt.Errorf("error parsing fill value %v", args[2])
-				}
-				m.query.Model.Set("fillValue", floatVal)
+			err := tsdb.SetupFillmode(m.query, interval, args[2])
+			if err != nil {
+				return "", err
 			}
 		}
 		return fmt.Sprintf("FLOOR(DATEDIFF(second, '1970-01-01', %s)/%.0f)*%.0f", args[0], interval.Seconds(), interval.Seconds()), nil

+ 3 - 15
pkg/tsdb/mysql/macros.go

@@ -3,7 +3,6 @@ package mysql
 import (
 	"fmt"
 	"regexp"
-	"strconv"
 	"strings"
 	"time"
 
@@ -92,20 +91,9 @@ func (m *mySqlMacroEngine) evaluateMacro(name string, args []string) (string, er
 			return "", fmt.Errorf("error parsing interval %v", args[1])
 		}
 		if len(args) == 3 {
-			m.query.Model.Set("fill", true)
-			m.query.Model.Set("fillInterval", interval.Seconds())
-			switch args[2] {
-			case "NULL":
-				m.query.Model.Set("fillMode", "null")
-			case "previous":
-				m.query.Model.Set("fillMode", "previous")
-			default:
-				m.query.Model.Set("fillMode", "value")
-				floatVal, err := strconv.ParseFloat(args[2], 64)
-				if err != nil {
-					return "", fmt.Errorf("error parsing fill value %v", args[2])
-				}
-				m.query.Model.Set("fillValue", floatVal)
+			err := tsdb.SetupFillmode(m.query, interval, args[2])
+			if err != nil {
+				return "", err
 			}
 		}
 		return fmt.Sprintf("UNIX_TIMESTAMP(%s) DIV %.0f * %.0f", args[0], interval.Seconds(), interval.Seconds()), nil

+ 3 - 15
pkg/tsdb/postgres/macros.go

@@ -3,7 +3,6 @@ package postgres
 import (
 	"fmt"
 	"regexp"
-	"strconv"
 	"strings"
 	"time"
 
@@ -114,20 +113,9 @@ func (m *postgresMacroEngine) evaluateMacro(name string, args []string) (string,
 			return "", fmt.Errorf("error parsing interval %v", args[1])
 		}
 		if len(args) == 3 {
-			m.query.Model.Set("fill", true)
-			m.query.Model.Set("fillInterval", interval.Seconds())
-			switch args[2] {
-			case "NULL":
-				m.query.Model.Set("fillMode", "null")
-			case "previous":
-				m.query.Model.Set("fillMode", "previous")
-			default:
-				m.query.Model.Set("fillMode", "value")
-				floatVal, err := strconv.ParseFloat(args[2], 64)
-				if err != nil {
-					return "", fmt.Errorf("error parsing fill value %v", args[2])
-				}
-				m.query.Model.Set("fillValue", floatVal)
+			err := tsdb.SetupFillmode(m.query, interval, args[2])
+			if err != nil {
+				return "", err
 			}
 		}
 		return fmt.Sprintf("floor(extract(epoch from %s)/%v)*%v", args[0], interval.Seconds(), interval.Seconds()), nil

+ 21 - 0
pkg/tsdb/sql_engine.go

@@ -6,6 +6,7 @@ import (
 	"database/sql"
 	"fmt"
 	"math"
+	"strconv"
 	"strings"
 	"sync"
 	"time"
@@ -568,3 +569,23 @@ func ConvertSqlValueColumnToFloat(columnName string, columnValue interface{}) (n
 
 	return value, nil
 }
+
+func SetupFillmode(query *Query, interval time.Duration, fillmode string) error {
+	query.Model.Set("fill", true)
+	query.Model.Set("fillInterval", interval.Seconds())
+	switch fillmode {
+	case "NULL":
+		query.Model.Set("fillMode", "null")
+	case "previous":
+		query.Model.Set("fillMode", "previous")
+	default:
+		query.Model.Set("fillMode", "value")
+		floatVal, err := strconv.ParseFloat(fillmode, 64)
+		if err != nil {
+			return fmt.Errorf("error parsing fill value %v", fillmode)
+		}
+		query.Model.Set("fillValue", floatVal)
+	}
+
+	return nil
+}