MCPcopy Create free account
hub / github.com/TalkingData/owl / topMethod

Function topMethod

inspector/compute.go:152–204  ·  view source on GitHub ↗
(cycle int, trigger *types.Trigger)

Source from the content-addressed store, hash-verified

150}
151
152func topMethod(cycle int, trigger *types.Trigger) (*types.TriggerResultSet, error) {
153 if trigger.Number == 0 {
154 err := errors.New("number can not be 0")
155 return nil, err
156 }
157 trigger_result_set := &types.TriggerResultSet{TriggerResults: make([]*types.TriggerResult, 0), Triggered: false}
158
159 results, err := tsdbClient.Query(fmt.Sprintf("%d", cycle), "", trigger.Tags, "sum", trigger.Metric, true)
160 if err != nil {
161 return nil, err
162 }
163 for _, result := range results {
164 if len(result.Dps) == 0 {
165 continue
166 }
167 values := make([]float64, 0)
168 for _, value := range result.Dps {
169 values = append(values, value)
170 }
171 sort.Sort(sort.Reverse(sort.Float64Slice(values)))
172 trigger_result := true
173 var count int
174 var sum float64
175 var current_threshold float64
176 for _, value := range values {
177 if count >= trigger.Number {
178 break
179 }
180 count += 1
181 sum += value
182 parameters := make(map[string]interface{}, 8)
183 parameters["current_threshold"] = value
184 parameters["threshold"] = trigger.Threshold
185 expression := fmt.Sprintf("current_threshold %s threshold", trigger.Symbol)
186 one_result, err := compute(parameters, expression)
187 if err != nil {
188 return trigger_result_set, err
189 }
190 current_threshold = value
191 if !one_result {
192 trigger_result = false
193 break
194 }
195 }
196 if !trigger_result_set.Triggered && trigger_result {
197 trigger_result_set.Triggered = trigger_result
198 current_threshold = sum / float64(count)
199 }
200 trigger_result_set.TriggerResults = append(trigger_result_set.TriggerResults, types.NewTriggerResult(trigger.Index, result.Tags, result.AggregateTags, current_threshold, trigger_result))
201 }
202
203 return trigger_result_set, nil
204}
205
206func bottomMethod(cycle int, trigger *types.Trigger) (*types.TriggerResultSet, error) {
207 if trigger.Number == 0 {

Callers 1

processTaskMethod · 0.85

Calls 2

computeFunction · 0.85
QueryMethod · 0.65

Tested by

no test coverage detected