|
30 | 30 | nrqlConditionTitleTemplate = "Title {{ createdAt }}" // needed for setting pointer |
31 | 31 | nrqlConditionPredictBy = 7200 // needed for setting pointer |
32 | 32 | nrqlConditionSignalSeasonality = NrqlSignalSeasonalities.Weekly // needed for setting pointer |
| 33 | + nrqlConditionBasePollingFrequency = 3600 // needed for setting pointer |
| 34 | + nrqlConditionBasePollingAggWindow = 3600 // needed for setting pointer |
33 | 35 | nrqlConditionCreateBase = NrqlConditionCreateBase{ |
34 | 36 | Description: "test description", |
35 | 37 | Enabled: true, |
@@ -1229,3 +1231,143 @@ func TestIntegrationNrqlConditions_DisableHealthStatusReporting(t *testing.T) { |
1229 | 1231 | } |
1230 | 1232 | }() |
1231 | 1233 | } |
| 1234 | + |
| 1235 | +func TestIntegrationNrqlConditions_SignalPollingFrequency(t *testing.T) { |
| 1236 | + t.Parallel() |
| 1237 | + |
| 1238 | + testAccountID, err := mock.GetTestAccountID() |
| 1239 | + if err != nil { |
| 1240 | + t.Skipf("%s", err) |
| 1241 | + } |
| 1242 | + |
| 1243 | + var ( |
| 1244 | + updatedPollingFrequency = 7200 |
| 1245 | + ) |
| 1246 | + |
| 1247 | + var conditionCreateInput = NrqlConditionCreateInput{ |
| 1248 | + NrqlConditionCreateBase: NrqlConditionCreateBase{ |
| 1249 | + Enabled: true, |
| 1250 | + Name: fmt.Sprintf("test-nrql-condition-%s", testNrqlConditionRandomString), |
| 1251 | + Nrql: NrqlConditionCreateQuery{ |
| 1252 | + Query: "select count(*) from CloudCost", |
| 1253 | + DataAccountId: &testAccountID, |
| 1254 | + }, |
| 1255 | + Terms: []NrqlConditionTerm{ |
| 1256 | + { |
| 1257 | + Threshold: &nrqlConditionBaseThreshold, |
| 1258 | + ThresholdOccurrences: ThresholdOccurrences.AtLeastOnce, |
| 1259 | + ThresholdDuration: 3600, |
| 1260 | + Operator: AlertsNRQLConditionTermsOperatorTypes.ABOVE, |
| 1261 | + Priority: NrqlConditionPriorities.Critical, |
| 1262 | + }, |
| 1263 | + }, |
| 1264 | + ViolationTimeLimitSeconds: 3600, |
| 1265 | + Signal: &AlertsNrqlConditionCreateSignal{ |
| 1266 | + AggregationWindow: &nrqlConditionBasePollingAggWindow, |
| 1267 | + EvaluationDelay: &nrqlConditionEvaluationDelay, |
| 1268 | + AggregationDelay: &nrqlConditionBaseAggDelay, |
| 1269 | + PollingFrequency: &nrqlConditionBasePollingFrequency, |
| 1270 | + }, |
| 1271 | + }, |
| 1272 | + } |
| 1273 | + var conditionCreateNilInput = NrqlConditionCreateInput{ |
| 1274 | + NrqlConditionCreateBase: NrqlConditionCreateBase{ |
| 1275 | + Enabled: true, |
| 1276 | + Name: fmt.Sprintf("test-nrql-condition-%s", testNrqlConditionRandomString), |
| 1277 | + Nrql: NrqlConditionCreateQuery{ |
| 1278 | + Query: "SELECT rate(sum(apm.service.cpu.usertime.utilization), 1 second) * 100 as cpuUsage FROM Metric WHERE appName like 'Dummy App'", |
| 1279 | + DataAccountId: &testAccountID, |
| 1280 | + }, |
| 1281 | + Terms: []NrqlConditionTerm{ |
| 1282 | + { |
| 1283 | + Threshold: &nrqlConditionBaseThreshold, |
| 1284 | + ThresholdOccurrences: ThresholdOccurrences.AtLeastOnce, |
| 1285 | + ThresholdDuration: 3600, |
| 1286 | + Operator: AlertsNRQLConditionTermsOperatorTypes.ABOVE, |
| 1287 | + Priority: NrqlConditionPriorities.Critical, |
| 1288 | + }, |
| 1289 | + }, |
| 1290 | + ViolationTimeLimitSeconds: 3600, |
| 1291 | + Signal: &AlertsNrqlConditionCreateSignal{ |
| 1292 | + AggregationWindow: &nrqlConditionBasePollingAggWindow, |
| 1293 | + EvaluationDelay: &nrqlConditionEvaluationDelay, |
| 1294 | + AggregationDelay: &nrqlConditionBaseAggDelay, |
| 1295 | + PollingFrequency: nil, |
| 1296 | + }, |
| 1297 | + }, |
| 1298 | + } |
| 1299 | + var conditionUpdateInput = NrqlConditionUpdateInput{ |
| 1300 | + NrqlConditionUpdateBase: NrqlConditionUpdateBase{ |
| 1301 | + Enabled: true, |
| 1302 | + Name: fmt.Sprintf("test-nrql-condition-%s", testNrqlConditionRandomString), |
| 1303 | + Nrql: NrqlConditionUpdateQuery{ |
| 1304 | + Query: "select count(*) from CloudCost", |
| 1305 | + DataAccountId: &testAccountID, |
| 1306 | + }, |
| 1307 | + Terms: []NrqlConditionTerm{ |
| 1308 | + { |
| 1309 | + Threshold: &nrqlConditionBaseThreshold, |
| 1310 | + ThresholdOccurrences: ThresholdOccurrences.AtLeastOnce, |
| 1311 | + ThresholdDuration: 7200, |
| 1312 | + Operator: AlertsNRQLConditionTermsOperatorTypes.ABOVE, |
| 1313 | + Priority: NrqlConditionPriorities.Critical, |
| 1314 | + }, |
| 1315 | + }, |
| 1316 | + ViolationTimeLimitSeconds: 3600, |
| 1317 | + Signal: &AlertsNrqlConditionUpdateSignal{ |
| 1318 | + AggregationWindow: &nrqlConditionBasePollingAggWindow, |
| 1319 | + EvaluationDelay: &nrqlConditionEvaluationDelay, |
| 1320 | + AggregationDelay: &nrqlConditionBaseAggDelay, |
| 1321 | + PollingFrequency: &updatedPollingFrequency, |
| 1322 | + }, |
| 1323 | + }, |
| 1324 | + } |
| 1325 | + |
| 1326 | + var randStr = mock.RandSeq(5) |
| 1327 | + |
| 1328 | + // Setup |
| 1329 | + client := newIntegrationTestClient(t) |
| 1330 | + testPolicy := AlertsPolicyInput{ |
| 1331 | + IncidentPreference: AlertsIncidentPreferenceTypes.PER_POLICY, |
| 1332 | + Name: fmt.Sprintf("test-alert-policy-%s", randStr), |
| 1333 | + } |
| 1334 | + policy, err := client.CreatePolicyMutation(testAccountID, testPolicy) |
| 1335 | + require.NoError(t, err) |
| 1336 | + |
| 1337 | + // Test: Create (condition with Signal.PollingFrequency field) |
| 1338 | + |
| 1339 | + createdCondition, err := client.CreateNrqlConditionStaticMutation(testAccountID, policy.ID, conditionCreateInput) |
| 1340 | + require.NoError(t, err) |
| 1341 | + require.NotNil(t, createdCondition) |
| 1342 | + require.NotNil(t, createdCondition.ID) |
| 1343 | + require.NotNil(t, createdCondition.PolicyID) |
| 1344 | + require.Equal(t, &nrqlConditionBasePollingFrequency, createdCondition.Signal.PollingFrequency) |
| 1345 | + |
| 1346 | + // Test: Create nil (condition with Signal.PollingFrequency field that is nil) |
| 1347 | + |
| 1348 | + createdNilCondition, err := client.CreateNrqlConditionStaticMutation(testAccountID, policy.ID, conditionCreateNilInput) |
| 1349 | + require.NoError(t, err) |
| 1350 | + require.NotNil(t, createdNilCondition) |
| 1351 | + require.NotNil(t, createdNilCondition.ID) |
| 1352 | + require.NotNil(t, createdNilCondition.PolicyID) |
| 1353 | + require.Nil(t, createdNilCondition.Signal.PollingFrequency) |
| 1354 | + |
| 1355 | + // Test: Get (condition with Signal.PollingFrequency field) |
| 1356 | + readResult, err := client.GetNrqlConditionQuery(testAccountID, createdCondition.ID) |
| 1357 | + require.NoError(t, err) |
| 1358 | + require.NotNil(t, readResult) |
| 1359 | + require.Equal(t, &nrqlConditionBasePollingFrequency, readResult.Signal.PollingFrequency) |
| 1360 | + |
| 1361 | + // Test: Update (condition with non-default Signal.PollingFrequency field) |
| 1362 | + updatedCondition, err := client.UpdateNrqlConditionStaticMutation(testAccountID, createdCondition.ID, conditionUpdateInput) |
| 1363 | + require.NoError(t, err) |
| 1364 | + require.Equal(t, &updatedPollingFrequency, updatedCondition.Signal.PollingFrequency) |
| 1365 | + |
| 1366 | + // Deferred teardown |
| 1367 | + defer func() { |
| 1368 | + _, err := client.DeletePolicyMutation(testAccountID, policy.ID) |
| 1369 | + if err != nil { |
| 1370 | + t.Logf("error cleaning up alert policy %s (%s): %s", policy.ID, policy.Name, err) |
| 1371 | + } |
| 1372 | + }() |
| 1373 | +} |
0 commit comments