(cycle int, trigger *types.Trigger)
| 258 | } |
| 259 | |
| 260 | func 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 |
no test coverage detected