Exemple #1
0
    def _ShowAlertsForKeys(self, keys):
        """Show alerts for |keys|.

    Query for anomalies with overlapping revision. The |keys|
    parameter for group_report is a comma-separated list of urlsafe strings
    for Keys for Anomaly entities. (Each key corresponds to an alert)

    Args:
      keys: Comma-separated list of urlsafe strings for Anomaly keys.
    """
        urlsafe_keys = keys.split(',')
        try:
            keys = [ndb.Key(urlsafe=k) for k in urlsafe_keys]
        # Errors that can be thrown here include ProtocolBufferDecodeError
        # in google.net.proto.ProtocolBuffer. We want to catch any errors here
        # because they're almost certainly urlsafe key decoding errors.
        except Exception:
            raise request_handler.InvalidInputError(
                'Invalid Anomaly key given.')

        requested_anomalies = utils.GetMulti(keys)

        for i, anomaly_entity in enumerate(requested_anomalies):
            if anomaly_entity is None:
                raise request_handler.InvalidInputError(
                    'No Anomaly found for key %s.' % urlsafe_keys[i])

        if not requested_anomalies:
            raise request_handler.InvalidInputError('No anomalies found.')

        sheriff_key = requested_anomalies[0].sheriff
        min_range = utils.MinimumAlertRange(requested_anomalies)
        if min_range:
            query = anomaly.Anomaly.query(
                anomaly.Anomaly.sheriff == sheriff_key)
            query = query.order(-anomaly.Anomaly.timestamp)
            anomalies = query.fetch(limit=_QUERY_LIMIT)

            # Filter out anomalies that have been marked as invalid or ignore.
            # Include all anomalies with an overlapping revision range that have
            # been associated with a bug, or are not yet triaged.
            anomalies = [
                a for a in anomalies if a.bug_id is None or a.bug_id > 0
            ]
            anomalies = _GetOverlaps(anomalies, min_range[0], min_range[1])

            # Make sure alerts in specified param "keys" are included.
            key_set = {a.key for a in anomalies}
            for anomaly_entity in requested_anomalies:
                if anomaly_entity.key not in key_set:
                    anomalies.append(anomaly_entity)
        else:
            anomalies = requested_anomalies
        self._ShowAlerts(anomalies)
Exemple #2
0
def _GetKeyToTestDict(anomalies):
    """Returns a map of Test keys to entities for the given anomalies."""
    test_keys = {a.test for a in anomalies}
    tests = utils.GetMulti(test_keys)
    return {t.key: t for t in tests}
Exemple #3
0
 def testGetMulti_NotLoggedIn_ReturnsSomeEntities(self):
     keys = self._PutEntitiesHalfInternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys) / 2, len(utils.GetMulti(keys)))
Exemple #4
0
 def testGetMulti_LoggedIn_ReturnsAllEntities(self):
     keys = self._PutEntitiesHalfInternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys), len(utils.GetMulti(keys)))
Exemple #5
0
 def testGetMulti_AllExternal_ReturnsAllEntities(self):
     keys = self._PutEntitiesAllExternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys), len(utils.GetMulti(keys)))
Exemple #6
0
 def testGetMulti_LoggedIn(self):
     """Tests that GetMulti gets all of the entities when logged in."""
     keys = self._PutEntitiesHalfInternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys), len(utils.GetMulti(keys)))
Exemple #7
0
 def testGetMulti_NotLoggedIn_OnlySome(self):
     """Tests that GetMulti gets some of the entities when not logged in."""
     keys = self._PutEntitiesHalfInternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys) / 2, len(utils.GetMulti(keys)))
Exemple #8
0
 def testGetMulti_AllExternal(self):
     """Tests that GetMulti gets all of the entities when logged in."""
     keys = self._PutEntitiesAllExternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys), len(utils.GetMulti(keys)))
Exemple #9
0
 def testGetMulti_ExternalUser_ReturnsSomeEntities(self):
     keys = self._PutEntitiesHalfInternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys) / 2, len(utils.GetMulti(keys)))
Exemple #10
0
 def testGetMulti_AllExternalEntities_ReturnsAllEntities(self):
     keys = self._PutEntitiesAllExternal()
     self.SetCurrentUser('*****@*****.**')
     self.assertEqual(len(keys), len(utils.GetMulti(keys)))