From a1facc5d30b8b6bfeccad2126126e8de054fa061 Mon Sep 17 00:00:00 2001 From: magnus gohn Date: Mon, 29 Jan 2024 11:26:03 +0100 Subject: [PATCH] fixed the `EvaluateGroup` object to match what the api expects, fixed an issue with the `EvaluateRequest` builder, renamed a type. --- client.go | 8 ++-- examples/evaluate/main.go | 10 +++-- fields/evaluate.go | 81 ++++++++++++++++++++------------------- 3 files changed, 53 insertions(+), 46 deletions(-) diff --git a/client.go b/client.go index 8b1084f..75b6759 100644 --- a/client.go +++ b/client.go @@ -267,7 +267,7 @@ func (ns ClarifyNamespace) Evaluate(data fields.DataQuery) EvaluateRequest { } func (er EvaluateRequest) Items(items ...fields.EvaluateItem) EvaluateRequest { - newItems := make([]fields.EvaluateItem, len(er.items)+len(items)) + newItems := make([]fields.EvaluateItem, 0, len(er.items)+len(items)) newItems = append(append(newItems, er.items...), items...) er.items = newItems @@ -275,7 +275,7 @@ func (er EvaluateRequest) Items(items ...fields.EvaluateItem) EvaluateRequest { } func (er EvaluateRequest) Groups(groups ...fields.EvaluateGroup) EvaluateRequest { - newGroups := make([]fields.EvaluateGroup, len(er.groups)+len(groups)) + newGroups := make([]fields.EvaluateGroup, 0, len(er.groups)+len(groups)) newGroups = append(append(newGroups, er.groups...), groups...) er.groups = newGroups @@ -283,7 +283,7 @@ func (er EvaluateRequest) Groups(groups ...fields.EvaluateGroup) EvaluateRequest } func (er EvaluateRequest) Calculations(calculations ...fields.Calculation) EvaluateRequest { - newCalculations := make([]fields.Calculation, len(er.calculations)+len(calculations)) + newCalculations := make([]fields.Calculation, 0, len(er.calculations)+len(calculations)) newCalculations = append(append(newCalculations, er.calculations...), calculations...) er.calculations = newCalculations @@ -291,7 +291,7 @@ func (er EvaluateRequest) Calculations(calculations ...fields.Calculation) Evalu } func (er EvaluateRequest) Include(relationships ...string) EvaluateRequest { - newRelationships := make([]string, len(er.relationships)+len(relationships)) + newRelationships := make([]string, 0, len(er.relationships)+len(relationships)) newRelationships = append(append(newRelationships, er.relationships...), relationships...) er.relationships = newRelationships diff --git a/examples/evaluate/main.go b/examples/evaluate/main.go index cf65ce0..ab9cb1e 100644 --- a/examples/evaluate/main.go +++ b/examples/evaluate/main.go @@ -25,8 +25,8 @@ func main() { t2 := time.Now().Add(24 * time.Hour) query := fields.Query(). - Where(fields.CompareField("annotations.clarify/clarify-go/example/name", fields.Equal("publish_signals"))). - Limit(1) + Where(fields.FilterAll()). + Limit(10) data := fields.Data(). Where(fields.TimeRange(t1, t2)). @@ -44,13 +44,17 @@ func main() { {Alias: "i1", ID: selection.Data[0].ID, TimeAggregation: fields.TimeAggregationAvg}, } calculations := []fields.Calculation{ - {Alias: "c1", Formula: "sin(a)"}, + {Alias: "c1", Formula: "sin(g1)"}, {Alias: "c2", Formula: "sin(2*PI*time_seconds/3600)"}, {Alias: "c3", Formula: "max(c1,c2)"}, } + groups := []fields.EvaluateGroup{ + {Alias: "g1", Query: query, TimeAggregation: fields.TimeAggregationAvg, GroupAggregation: fields.GroupAggregationAvg}, + } result, err := client.Clarify().Evaluate(data). Items(items...). + Groups(groups...). Calculations(calculations...). Do(ctx) if err != nil { diff --git a/fields/evaluate.go b/fields/evaluate.go index c4cff56..952cc8e 100644 --- a/fields/evaluate.go +++ b/fields/evaluate.go @@ -21,7 +21,7 @@ import ( ) const ( - TimeAggregationDefault TimeAggregationMethod = iota + TimeAggregationDefault TimeAggregation = iota TimeAggregationCount TimeAggregationMin TimeAggregationMax @@ -32,7 +32,7 @@ const ( TimeAggregationRate ) -type TimeAggregationMethod uint8 +type TimeAggregation uint8 const ( GroupAggregationDefault GroupAggregation = iota @@ -46,11 +46,11 @@ const ( type GroupAggregation uint8 var ( - _ encoding.TextMarshaler = TimeAggregationMethod(0) - _ encoding.TextUnmarshaler = (*TimeAggregationMethod)(nil) + _ encoding.TextMarshaler = TimeAggregation(0) + _ encoding.TextUnmarshaler = (*TimeAggregation)(nil) ) -func (m TimeAggregationMethod) String() string { +func (m TimeAggregation) String() string { b, err := m.MarshalText() if err != nil { return "%(INVALID)!" @@ -58,7 +58,7 @@ func (m TimeAggregationMethod) String() string { return string(b) } -func (m TimeAggregationMethod) MarshalText() ([]byte, error) { +func (m TimeAggregation) MarshalText() ([]byte, error) { switch m { case TimeAggregationDefault: return nil, nil @@ -82,7 +82,7 @@ func (m TimeAggregationMethod) MarshalText() ([]byte, error) { return nil, fmt.Errorf("bad aggregation method") } -func (m *TimeAggregationMethod) UnmarshalText(data []byte) error { +func (m *TimeAggregation) UnmarshalText(data []byte) error { switch string(data) { case "": *m = TimeAggregationDefault @@ -147,60 +147,63 @@ func (m *GroupAggregation) UnmarshalText(data []byte) error { } type EvaluateItem struct { - Alias string `json:"alias,omitempty"` - ID string `json:"id,omitempty"` - TimeAggregation TimeAggregationMethod `json:"timeAggregation,omitempty"` - State int `json:"state"` - Lead int `json:"lead,omitempty"` - Lag int `json:"lag,omitempty"` + Alias string `json:"alias,omitempty"` + ID string `json:"id,omitempty"` + TimeAggregation TimeAggregation `json:"timeAggregation,omitempty"` + State int `json:"state"` + Lead int `json:"lead,omitempty"` + Lag int `json:"lag,omitempty"` } type EvaluateGroup struct { - Alias string `json:"alias,omitempty"` - ID string `json:"id,omitempty"` - TimeAggregation TimeAggregationMethod `json:"timeAggregation,omitempty"` - GroupAggregation GroupAggregation `json:"groupAggregation,omitempty"` - State int `json:"state"` - Lead int `json:"lead,omitempty"` - Lag int `json:"lag,omitempty"` + Alias string `json:"alias,omitempty"` + Query ResourceQuery `json:"query,omitempty"` + TimeAggregation TimeAggregation `json:"timeAggregation,omitempty"` + GroupAggregation GroupAggregation `json:"groupAggregation,omitempty"` + State int `json:"state"` + Lead int `json:"lead,omitempty"` + Lag int `json:"lag,omitempty"` } var _ json.Marshaler = EvaluateItem{} -func (ia EvaluateItem) MarshalJSON() ([]byte, error) { +func (ei EvaluateItem) MarshalJSON() ([]byte, error) { var v any - switch ia.TimeAggregation { + switch ei.TimeAggregation { case TimeAggregationSeconds, TimeAggregationPercent, TimeAggregationRate: type encType EvaluateItem - v = encType(ia) + + v = encType(ei) default: type encType struct { - Alias string `json:"alias,omitempty"` - ID string `json:"id,omitempty"` - TimeAggregation TimeAggregationMethod `json:"aggregation,omitempty"` - State int `json:"-"` - Lead int `json:"lead,omitempty"` - Lag int `json:"lag,omitempty"` + Alias string `json:"alias,omitempty"` + ID string `json:"id,omitempty"` + TimeAggregation TimeAggregation `json:"timeAggregation,omitempty"` + State int `json:"-"` + Lead int `json:"lead,omitempty"` + Lag int `json:"lag,omitempty"` } - v = encType(ia) + + v = encType(ei) } + return json.Marshal(v) } -func (ga EvaluateGroup) MarshalJSON() ([]byte, error) { +func (eg EvaluateGroup) MarshalJSON() ([]byte, error) { var v any type encType struct { - Alias string `json:"alias,omitempty"` - ID string `json:"id,omitempty"` - TimeAggregation TimeAggregationMethod `json:"aggregation,omitempty"` - GroupAggregation GroupAggregation `json:"groupAggregation,omitempty"` - State int `json:"-"` - Lead int `json:"lead,omitempty"` - Lag int `json:"lag,omitempty"` + Alias string `json:"alias,omitempty"` + Query ResourceQuery `json:"query,omitempty"` + TimeAggregation TimeAggregation `json:"timeAggregation,omitempty"` + GroupAggregation GroupAggregation `json:"groupAggregation,omitempty"` + State int `json:"-"` + Lead int `json:"lead,omitempty"` + Lag int `json:"lag,omitempty"` } - v = encType(ga) + v = encType(eg) return json.Marshal(v) }