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

Function lastMethod

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

Source from the content-addressed store, hash-verified

258}
259
260func lastMethod(cycle int, trigger *types.Trigger) (*types.TriggerResultSet, error) {
261 if trigger.Number == 0 {
262 err := errors.New("number can not be 0")
263 return nil, err
264 }
265 trigger_result_set := &types.TriggerResultSet{TriggerResults: make([]*types.TriggerResult, 0), Triggered: false}
266
267 results, err := tsdbClient.Query(fmt.Sprintf("%d", cycle), "", trigger.Tags, "sum", trigger.Metric, true)
268 if err != nil {
269 return nil, err
270 }
271 for _, result := range results {
272 if len(result.Dps) == 0 {
273 continue
274 }
275 value_times := make([]string, 0)
276 for value_time := range result.Dps {
277 value_times = append(value_times, value_time)
278 }
279 sort.Strings(value_times)
280 values := make([]float64, len(value_times))
281 for index, value_time := range value_times {
282 values[len(value_times)-(index+1)] = result.Dps[value_time]
283 }
284 trigger_result := true
285 var count int
286 var sum float64
287 var current_threshold float64
288 for _, value := range values {
289 if count >= trigger.Number {
290 break
291 }
292 count += 1
293 sum += value
294 parameters := make(map[string]interface{}, 8)
295 parameters["current_threshold"] = value
296 parameters["threshold"] = trigger.Threshold
297 expression := fmt.Sprintf("current_threshold %s threshold", trigger.Symbol)
298 one_result, err := compute(parameters, expression)
299 if err != nil {
300 return trigger_result_set, err
301 }
302 current_threshold = value
303 if !one_result {
304 trigger_result = false
305 break
306 }
307 }
308 if !trigger_result_set.Triggered && trigger_result {
309 trigger_result_set.Triggered = trigger_result
310 current_threshold = sum / float64(count)
311 }
312 trigger_result_set.TriggerResults = append(trigger_result_set.TriggerResults, types.NewTriggerResult(trigger.Index, result.Tags, result.AggregateTags, current_threshold, trigger_result))
313 }
314
315 return trigger_result_set, nil
316}
317

Callers 1

processTaskMethod · 0.85

Calls 2

computeFunction · 0.85
QueryMethod · 0.65

Tested by

no test coverage detected