(cycle int, trigger *types.Trigger)
| 150 | } |
| 151 | |
| 152 | func 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 | |
| 206 | func bottomMethod(cycle int, trigger *types.Trigger) (*types.TriggerResultSet, error) { |
| 207 | if trigger.Number == 0 { |
no test coverage detected