コード例 #1
0
ファイル: nova_verifier.py プロジェクト: rcleere/stacktach
def _verify_for_delete(exist, delete=None, delete_type="InstanceDeletes"):

    if not delete and exist.delete:
        # We know we have a delete and we have it's id
        delete = exist.delete
    elif not delete:
        if exist.deleted_at:
            # We received this exists before the delete, go find it
            deletes = models.InstanceDeletes.find(exist.instance, dt.dt_from_decimal(exist.launched_at))
            if deletes.count() == 1:
                delete = deletes[0]
            else:
                query = {"instance": exist.instance, "launched_at": exist.launched_at}
                raise NotFound(delete_type, query)
        else:
            # We don't know if this is supposed to have a delete or not.
            # Thus, we need to check if we have a delete for this instance.
            # We need to be careful though, since we could be verifying an
            # exist event that we got before the delete. So, we restrict the
            # search to only deletes before this exist's audit period ended.
            # If we find any, we fail validation
            launched_at = dt.dt_from_decimal(exist.launched_at)
            deleted_at_max = dt.dt_from_decimal(exist.audit_period_ending)
            deletes = models.InstanceDeletes.find(exist.instance, launched_at, deleted_at_max)
            if deletes.count() > 0:
                reason = "Found %s for non-delete exist" % delete_type
                raise VerificationException(reason)

    if delete:
        if not base_verifier._verify_date_field(delete.launched_at, exist.launched_at, same_second=True):
            raise FieldMismatch("launched_at", exist.launched_at, delete.launched_at, exist.instance)

        if not base_verifier._verify_date_field(delete.deleted_at, exist.deleted_at, same_second=True):
            raise FieldMismatch("deleted_at", exist.deleted_at, delete.deleted_at, exist.instance)
コード例 #2
0
    def test_do_list_usage_exists_with_instance(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {"instance": INSTANCE_ID_1}
        results = self.mox.CreateMockAnything()
        models.InstanceExists.objects.filter(instance=INSTANCE_ID_1).AndReturn(results)
        usage = self.mox.CreateMockAnything()
        usage.instance = INSTANCE_ID_1
        usage.launched_at = utils.decimal_utc()
        usage.deleted_at = usage.launched_at + 10
        usage.instance_type_id = 1
        usage.message_id = "someid"
        usage.status = "pending"
        results.__iter__().AndReturn([usage].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_list_usage_exists(fake_request)
        self.assertEqual(resp.status_code, 200)
        resp_json = json.loads(resp.content)
        self.assertEqual(len(resp_json), 2)
        self.assertEqual(
            resp_json[0], ["UUID", "Launched At", "Deleted At", "Instance Type Id", "Message ID", "Status"]
        )
        self.assertEqual(resp_json[1][0], INSTANCE_ID_1)
        launch_time_str = dt.dt_from_decimal(usage.launched_at)
        self.assertEqual(resp_json[1][1], str(launch_time_str))
        delete_time_str = dt.dt_from_decimal(usage.deleted_at)
        self.assertEqual(resp_json[1][2], str(delete_time_str))
        self.mox.VerifyAll()
コード例 #3
0
    def test_do_list_usage_exists_with_instance(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {'instance': INSTANCE_ID_1}
        results = self.mox.CreateMockAnything()
        models.InstanceExists.objects.filter(instance=INSTANCE_ID_1)\
                                     .AndReturn(results)
        usage = self.mox.CreateMockAnything()
        usage.instance = INSTANCE_ID_1
        usage.launched_at = utils.decimal_utc()
        usage.deleted_at = usage.launched_at + 10
        usage.instance_type_id = 1
        usage.message_id = 'someid'
        usage.status = 'pending'
        results.__iter__().AndReturn([usage].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_list_usage_exists(fake_request)
        self.assertEqual(resp.status_code, 200)
        resp_json = json.loads(resp.content)
        self.assertEqual(len(resp_json), 2)
        self.assertEqual(resp_json[0], [
            "UUID", "Launched At", "Deleted At", "Instance Type Id",
            "Message ID", "Status"
        ])
        self.assertEqual(resp_json[1][0], INSTANCE_ID_1)
        launch_time_str = dt.dt_from_decimal(usage.launched_at)
        self.assertEqual(resp_json[1][1], str(launch_time_str))
        delete_time_str = dt.dt_from_decimal(usage.deleted_at)
        self.assertEqual(resp_json[1][2], str(delete_time_str))
        self.mox.VerifyAll()
コード例 #4
0
def _audit_launches_to_exists(launches, exists, beginning):
    fails = []
    for (instance, launches) in launches.items():
        if instance in exists:
            for expected in launches:
                found = False
                for actual in exists[instance]:
                    if int(expected['launched_at']) == \
                            int(actual['launched_at']):
                    # HACK (apmelton): Truncate the decimal because we may not
                    #    have the milliseconds.
                        found = True

                if not found:
                    rec = False
                    if reconciler:
                        args = (expected['id'], beginning)
                        rec = reconciler.missing_exists_for_instance(*args)
                    launched_at = dt.dt_from_decimal(expected['launched_at'])
                    msg = "Couldn't find exists for launch (%s, %s)"
                    msg = msg % (instance, launched_at)
                    cell, compute = cell_and_compute(instance, launched_at)
                    fails.append(['Launch', expected['id'], msg,
                                  'Y' if rec else 'N', cell, compute])
        else:
            rec = False
            if reconciler:
                args = (launches[0]['id'], beginning)
                rec = reconciler.missing_exists_for_instance(*args)
            msg = "No exists for instance (%s)" % instance
            launched_at = dt.dt_from_decimal(launches[0]['launched_at'])
            cell, compute = cell_and_compute(instance, launched_at)
            fails.append(['-', msg, 'Y' if rec else 'N',
                          cell, compute])
    return fails
コード例 #5
0
def _verify_for_delete(exist, delete=None, delete_type="InstanceDeletes"):

    if not delete and exist.delete:
        # We know we have a delete and we have it's id
        delete = exist.delete
    elif not delete:
        if exist.deleted_at:
            # We received this exists before the delete, go find it
            deletes = models.InstanceDeletes.find(
                exist.instance, dt.dt_from_decimal(exist.launched_at))
            if deletes.count() == 1:
                delete = deletes[0]
            else:
                query = {
                    'instance': exist.instance,
                    'launched_at': exist.launched_at
                }
                raise NotFound(delete_type, query)
        else:
            # We don't know if this is supposed to have a delete or not.
            # Thus, we need to check if we have a delete for this instance.
            # We need to be careful though, since we could be verifying an
            # exist event that we got before the delete. So, we restrict the
            # search to only deletes before this exist's audit period ended.
            # If we find any, we fail validation
            launched_at = dt.dt_from_decimal(exist.launched_at)
            deleted_at_max = dt.dt_from_decimal(exist.audit_period_ending)
            deletes = models.InstanceDeletes.find(exist.instance, launched_at,
                                                  deleted_at_max)
            if deletes.count() > 0:
                reason = 'Found %s for non-delete exist' % delete_type
                raise VerificationException(reason)

    if delete:
        if not base_verifier._verify_date_field(
                delete.launched_at, exist.launched_at, same_second=True):
            raise FieldMismatch('launched_at', {
                'name': 'exists',
                'value': exist.launched_at
            }, {
                'name': 'deletes',
                'value': delete.launched_at
            }, exist.instance)

        if not base_verifier._verify_date_field(
                delete.deleted_at, exist.deleted_at, same_second=True):
            raise FieldMismatch('deleted_at', {
                'name': 'exists',
                'value': exist.deleted_at
            }, {
                'name': 'deletes',
                'value': delete.deleted_at
            }, exist.instance)
コード例 #6
0
    def test_do_list_usage_launches_with_instance(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {'instance': INSTANCE_ID_1}
        results = self.mox.CreateMockAnything()
        models.InstanceUsage.objects.filter(instance=INSTANCE_ID_1)\
                                    .AndReturn(results)
        usage = self.mox.CreateMockAnything()
        usage.instance = INSTANCE_ID_1
        usage.launched_at = utils.decimal_utc()
        usage.instance_type_id = 1
        results.__iter__().AndReturn([usage].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_list_usage_launches(fake_request)
        self.assertEqual(resp.status_code, 200)
        resp_json = json.loads(resp.content)
        self.assertEqual(len(resp_json), 2)
        self.assertEqual(resp_json[0], ["UUID", "Launched At",
                                        "Instance Type Id"])
        self.assertEqual(resp_json[1][0], INSTANCE_ID_1)
        time_str = dt.dt_from_decimal(usage.launched_at)
        self.assertEqual(resp_json[1][1], str(time_str))
        self.assertEqual(resp_json[1][2], 1)

        self.mox.VerifyAll()
コード例 #7
0
ファイル: test_nova_verifier.py プロジェクト: anujm/stacktach
    def test_verify_for_launch_late_ambiguous_usage(self):
        exist = self.mox.CreateMockAnything()
        exist.usage = None
        exist.instance = INSTANCE_ID_1
        launched_at = decimal.Decimal('1.1')
        exist.launched_at = launched_at
        exist.instance_type_id = 2
        results = self.mox.CreateMockAnything()
        models.InstanceUsage.objects.filter(
            instance=INSTANCE_ID_1).AndReturn(results)
        results.count().AndReturn(1)
        models.InstanceUsage.find(
            INSTANCE_ID_1, dt.dt_from_decimal(launched_at)).AndReturn(results)
        results.count().AndReturn(2)
        self.mox.ReplayAll()

        with self.assertRaises(AmbiguousResults) as ar:
            nova_verifier._verify_for_launch(exist)
        exception = ar.exception
        self.assertEqual(exception.object_type, 'InstanceUsage')
        search_params = {'instance': INSTANCE_ID_1,
                         'launched_at': decimal.Decimal('1.1')}
        self.assertEqual(exception.search_params, search_params)

        self.mox.VerifyAll()
コード例 #8
0
ファイル: views.py プロジェクト: huangshunping/stacktach
def _post_process_raw_data(rows, highlight=None):
    for row in rows:
        if "error" in row.routing_key:
            row.is_error = True
        if highlight and row.id == int(highlight):
            row.highlight = True
        row.fwhen = dt.dt_from_decimal(row.when)
コード例 #9
0
    def test_do_request(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {"request_id": REQUEST_ID_1}
        raw = self._create_raw()
        results = self.mox.CreateMockAnything()
        models.RawData.objects.filter(request_id=REQUEST_ID_1).AndReturn(results)
        results.order_by("when").AndReturn(results)
        results.__iter__().AndReturn([raw].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_request(fake_request)

        self.assertEqual(resp.status_code, 200)
        json_resp = json.loads(resp.content)
        self.assertEqual(len(json_resp), 2)
        self.assertEqual(json_resp[0], ["#", "?", "When", "Deployment", "Event", "Host", "State", "State'", "Task'"])
        self.assertEqual(json_resp[1][0], 1)
        self.assertEqual(json_resp[1][1], u" ")
        self.assertEqual(json_resp[1][2], str(dt.dt_from_decimal(raw.when)))
        self.assertEqual(json_resp[1][3], u"deployment")
        self.assertEqual(json_resp[1][4], u"test.start")
        self.assertEqual(json_resp[1][5], u"example.com")
        self.assertEqual(json_resp[1][6], u"active")
        self.assertEqual(json_resp[1][7], None)
        self.assertEqual(json_resp[1][8], None)
        self.mox.VerifyAll()
コード例 #10
0
    def test_do_uuid(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {'uuid': INSTANCE_ID_1}
        result = self.mox.CreateMockAnything()
        models.RawData.objects.select_related().AndReturn(result)
        result.filter(instance=INSTANCE_ID_1).AndReturn(result)
        result.order_by('when').AndReturn(result)
        raw = self._create_raw()
        result.__iter__().AndReturn([raw].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_uuid(fake_request)

        self.assertEqual(resp.status_code, 200)
        json_resp = json.loads(resp.content)
        self.assertEqual(len(json_resp), 2)
        header = [
            "#", "?", "When", "Deployment", "Event", "Host", "State", "State'",
            "Task'"
        ]
        self.assertEqual(json_resp[0], header)
        datetime = dt.dt_from_decimal(raw.when)
        body = [
            1, " ",
            str(datetime), "deployment", "test.start", "example.com", "active",
            None, None
        ]
        self.assertEqual(json_resp[1], body)
        self.mox.VerifyAll()
コード例 #11
0
ファイル: nova_verifier.py プロジェクト: openstack/stacktach
def _verify_with_reconciled_data(exist):
    if not exist.launched_at:
        raise VerificationException("Exists without a launched_at")

    query = models.InstanceReconcile.objects.filter(instance=exist.instance)
    if query.count() > 0:
        recs = models.InstanceReconcile.find(exist.instance,
                                             dt.dt_from_decimal((
                                             exist.launched_at)))
        search_query = {'instance': exist.instance,
                        'launched_at': exist.launched_at}
        count = recs.count()
        if count > 1:
            raise AmbiguousResults('InstanceReconcile', search_query)
        elif count == 0:
            raise NotFound('InstanceReconcile', search_query)
        reconcile = recs[0]
    else:
        raise NotFound('InstanceReconcile', {'instance': exist.instance})

    _verify_for_launch(exist, launch=reconcile,
                       launch_type="InstanceReconcile")
    delete = None
    if reconcile.deleted_at is not None:
        delete = reconcile
    _verify_for_delete(exist, delete=delete, delete_type="InstanceReconcile")
コード例 #12
0
 def test_verify_with_reconciled_data_deleted(self):
     exists = self.mox.CreateMockAnything()
     exists.instance = INSTANCE_ID_1
     launched_at = decimal.Decimal('1.1')
     deleted_at = decimal.Decimal('2.1')
     exists.launched_at = launched_at
     exists.deleted_at = deleted_at
     results = self.mox.CreateMockAnything()
     models.InstanceReconcile.objects.filter(instance=INSTANCE_ID_1)\
                                     .AndReturn(results)
     results.count().AndReturn(1)
     launched_at = dt.dt_from_decimal(decimal.Decimal('1.1'))
     recs = self.mox.CreateMockAnything()
     models.InstanceReconcile.find(INSTANCE_ID_1, launched_at).AndReturn(recs)
     recs.count().AndReturn(1)
     reconcile = self.mox.CreateMockAnything()
     reconcile.deleted_at = deleted_at
     recs[0].AndReturn(reconcile)
     self.mox.StubOutWithMock(nova_verifier, '_verify_for_launch')
     nova_verifier._verify_for_launch(exists, launch=reconcile,
                                   launch_type='InstanceReconcile')
     self.mox.StubOutWithMock(nova_verifier, '_verify_for_delete')
     nova_verifier._verify_for_delete(exists, delete=reconcile,
                                   delete_type='InstanceReconcile')
     self.mox.ReplayAll()
     nova_verifier._verify_with_reconciled_data(exists)
     self.mox.VerifyAll()
コード例 #13
0
    def test_do_request(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {'request_id': REQUEST_ID_1}
        raw = self._create_raw()
        results = self.mox.CreateMockAnything()
        models.RawData.objects.filter(
            request_id=REQUEST_ID_1).AndReturn(results)
        results.order_by('when').AndReturn(results)
        results.__iter__().AndReturn([raw].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_request(fake_request)

        self.assertEqual(resp.status_code, 200)
        json_resp = json.loads(resp.content)
        self.assertEqual(len(json_resp), 2)
        self.assertEqual(json_resp[0], [
            "#", "?", "When", "Deployment", "Event", "Host", "State", "State'",
            "Task'"
        ])
        self.assertEqual(json_resp[1][0], 1)
        self.assertEqual(json_resp[1][1], u' ')
        self.assertEqual(json_resp[1][2], str(dt.dt_from_decimal(raw.when)))
        self.assertEqual(json_resp[1][3], u'deployment')
        self.assertEqual(json_resp[1][4], u'test.start')
        self.assertEqual(json_resp[1][5], u'example.com')
        self.assertEqual(json_resp[1][6], u'active')
        self.assertEqual(json_resp[1][7], None)
        self.assertEqual(json_resp[1][8], None)
        self.mox.VerifyAll()
コード例 #14
0
def _verify_with_reconciled_data(exist):
    if not exist.launched_at:
        raise VerificationException("Exists without a launched_at")

    query = models.InstanceReconcile.objects.filter(instance=exist.instance)
    if query.count() > 0:
        recs = models.InstanceReconcile.find(
            exist.instance, dt.dt_from_decimal((exist.launched_at)))
        search_query = {
            'instance': exist.instance,
            'launched_at': exist.launched_at
        }
        count = recs.count()
        if count > 1:
            raise AmbiguousResults('InstanceReconcile', search_query)
        elif count == 0:
            raise NotFound('InstanceReconcile', search_query)
        reconcile = recs[0]
    else:
        raise NotFound('InstanceReconcile', {'instance': exist.instance})

    _verify_for_launch(exist,
                       launch=reconcile,
                       launch_type="InstanceReconcile")
    delete = None
    if reconcile.deleted_at is not None:
        delete = reconcile
    _verify_for_delete(exist, delete=delete, delete_type="InstanceReconcile")
コード例 #15
0
def _post_process_raw_data(rows, highlight=None):
    for row in rows:
        if "error" in row.routing_key:
            row.is_error = True
        if highlight and row.id == int(highlight):
            row.highlight = True
        row.fwhen = dt.dt_from_decimal(row.when)
コード例 #16
0
ファイル: dbverifier.py プロジェクト: pperezrubio/stacktach
def _verify_for_launch(exist):
    if exist.usage:
        launch = exist.usage
    else:
        if models.InstanceUsage.objects\
                 .filter(instance=exist.instance).count() > 0:
            launches = _find_launch(exist.instance,
                                    dt.dt_from_decimal(exist.launched_at))
            count = launches.count()
            query = {
                'instance': exist.instance,
                'launched_at': exist.launched_at
            }
            if count > 1:
                raise AmbiguousResults('InstanceUsage', query)
            elif count == 0:
                raise NotFound('InstanceUsage', query)
            launch = launches[0]
        else:
            raise NotFound('InstanceUsage', {'instance': exist.instance})

    if not _verify_date_field(launch.launched_at, exist.launched_at,
                              same_second=True):
        raise FieldMismatch('launched_at', exist.launched_at,
                            launch.launched_at)

    if launch.instance_type_id != exist.instance_type_id:
        raise FieldMismatch('instance_type_id', exist.instance_type_id,
                            launch.instance_type_id)
コード例 #17
0
ファイル: dbapi.py プロジェクト: anujm/stacktach
def _convert_model(model, extra_values_func=None):
    model_dict = model_to_dict(model)
    for key in model_dict:
        if isinstance(model_dict[key], decimal.Decimal):
            model_dict[key] = str(dt.dt_from_decimal(model_dict[key]))
    if extra_values_func:
        model_dict.update(extra_values_func(model))
    return model_dict
コード例 #18
0
ファイル: dbapi.py プロジェクト: macdomat/stacktach
def _convert_model(model, extra_values_func=None):
    model_dict = model_to_dict(model)
    for key in model_dict:
        if isinstance(model_dict[key], decimal.Decimal):
            model_dict[key] = str(dt.dt_from_decimal(model_dict[key]))
    if extra_values_func:
        model_dict.update(extra_values_func(model))
    return model_dict
コード例 #19
0
    def test_verify_for_delete_non_delete(self):
        launched_at = decimal.Decimal('1.1')
        deleted_at = decimal.Decimal('1.1')
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.instance = INSTANCE_ID_1
        exist.launched_at = launched_at
        exist.deleted_at = None
        exist.audit_period_ending = deleted_at
        results = self.mox.CreateMockAnything()
        models.InstanceDeletes.find(
            INSTANCE_ID_1, dt.dt_from_decimal(launched_at),
            dt.dt_from_decimal(deleted_at)).AndReturn(results)
        results.count().AndReturn(0)

        self.mox.ReplayAll()

        nova_verifier._verify_for_delete(exist)
        self.mox.VerifyAll()
コード例 #20
0
ファイル: views.py プロジェクト: souvikbasu/stacktach
def _post_process_raw_data(rows, highlight=None):
    deployments = models.Deployment.objects.all()
    dep_dict = dict((dep.id, dep) for dep in deployments)
    for row in rows:
        if "error" in row.routing_key:
            row.is_error = True
        if highlight and row.id == int(highlight):
            row.highlight = True
        row.fwhen = dt.dt_from_decimal(row.when)
        row.deployment = dep_dict[row.deployment_id]
コード例 #21
0
ファイル: dbverifier.py プロジェクト: AsherBond/stacktach
def _verify_for_delete(exist):

    delete = None
    if exist.delete:
        # We know we have a delete and we have it's id
        delete = exist.delete
    else:
        if exist.deleted_at:
            # We received this exists before the delete, go find it
            deletes = _find_delete(exist.instance,
                                   dt.dt_from_decimal(exist.launched_at))
            if deletes.count() == 1:
                delete = deletes[0]
            else:
                query = {
                    'instance': exist.instance,
                    'launched_at': exist.launched_at
                }
                raise NotFound('InstanceDelete', query)
        else:
            # We don't know if this is supposed to have a delete or not.
            # Thus, we need to check if we have a delete for this instance.
            # We need to be careful though, since we could be verifying an
            # exist event that we got before the delete. So, we restrict the
            # search to only deletes before the time this exist was sent.
            # If we find any, we fail validation
            deletes = _find_delete(exist.instance,
                                   dt.dt_from_decimal(exist.launched_at),
                                   dt.dt_from_decimal(exist.raw.when))
            if deletes.count() > 0:
                reason = 'Found InstanceDeletes for non-delete exist'
                raise VerificationException(reason)

    if delete:
        if not _verify_date_field(delete.launched_at, exist.launched_at,
                                  same_second=True):
            raise FieldMismatch('launched_at', exist.launched_at,
                                delete.launched_at)

        if not _verify_date_field(delete.deleted_at, exist.deleted_at,
                                  same_second=True):
            raise FieldMismatch('deleted_at', exist.deleted_at,
                                delete.deleted_at)
コード例 #22
0
ファイル: views.py プロジェクト: souvikbasu/stacktach
def _post_process_raw_data(rows, highlight=None):
    deployments = models.Deployment.objects.all()
    dep_dict = dict((dep.id, dep) for dep in deployments)
    for row in rows:
        if "error" in row.routing_key:
            row.is_error = True
        if highlight and row.id == int(highlight):
            row.highlight = True
        row.fwhen = dt.dt_from_decimal(row.when)
        row.deployment = dep_dict[row.deployment_id]
コード例 #23
0
    def test_do_list_usage_deletes(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {}
        results = self.mox.CreateMockAnything()
        models.InstanceDeletes.objects.all().AndReturn(results)
        usage = self.mox.CreateMockAnything()
        usage.instance = INSTANCE_ID_1
        usage.launched_at = utils.decimal_utc()
        usage.deleted_at = usage.launched_at + 10
        results.__iter__().AndReturn([usage].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_list_usage_deletes(fake_request)
        self.assertEqual(resp.status_code, 200)
        resp_json = json.loads(resp.content)
        self.assertEqual(len(resp_json), 2)
        self.assertEqual(resp_json[0], ["UUID", "Launched At", "Deleted At"])
        self.assertEqual(resp_json[1][0], INSTANCE_ID_1)
        launch_time_str = dt.dt_from_decimal(usage.launched_at)
        self.assertEqual(resp_json[1][1], str(launch_time_str))
        delete_time_str = dt.dt_from_decimal(usage.deleted_at)
        self.assertEqual(resp_json[1][2], str(delete_time_str))
        self.mox.VerifyAll()
コード例 #24
0
    def test_do_list_usage_deletes(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {}
        results = self.mox.CreateMockAnything()
        models.InstanceDeletes.objects.all().AndReturn(results)
        usage = self.mox.CreateMockAnything()
        usage.instance = INSTANCE_ID_1
        usage.launched_at = utils.decimal_utc()
        usage.deleted_at = usage.launched_at + 10
        results.__iter__().AndReturn([usage].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_list_usage_deletes(fake_request)
        self.assertEqual(resp.status_code, 200)
        resp_json = json.loads(resp.content)
        self.assertEqual(len(resp_json), 2)
        self.assertEqual(resp_json[0], ["UUID", "Launched At", "Deleted At"])
        self.assertEqual(resp_json[1][0], INSTANCE_ID_1)
        launch_time_str = dt.dt_from_decimal(usage.launched_at)
        self.assertEqual(resp_json[1][1], str(launch_time_str))
        delete_time_str = dt.dt_from_decimal(usage.deleted_at)
        self.assertEqual(resp_json[1][2], str(delete_time_str))
        self.mox.VerifyAll()
コード例 #25
0
    def test_verify_for_delete_non_delete_found_deletes(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.instance = INSTANCE_ID_1
        launched_at = decimal.Decimal('1.1')
        deleted_at = decimal.Decimal('1.3')
        exist.launched_at = launched_at
        exist.deleted_at = None
        exist.audit_period_ending = deleted_at
        results = self.mox.CreateMockAnything()
        models.InstanceDeletes.find(
            INSTANCE_ID_1, dt.dt_from_decimal(launched_at),
            dt.dt_from_decimal(deleted_at)).AndReturn(results)
        results.count().AndReturn(1)

        self.mox.ReplayAll()

        try:
            nova_verifier._verify_for_delete(exist)
            self.fail()
        except VerificationException, ve:
            msg = 'Found InstanceDeletes for non-delete exist'
            self.assertEqual(ve.reason, msg)
コード例 #26
0
 def _assert_on_show(self, values, raw):
     self.assertEqual(len(values), 12)
     self.assertEqual(values[0], ["Key", "Value"])
     self.assertEqual(values[1], ["#", raw.id])
     self.assertEqual(values[2], ["When", str(dt.dt_from_decimal(raw.when))])
     self.assertEqual(values[3], ["Deployment", raw.deployment.name])
     self.assertEqual(values[4], ["Category", raw.routing_key])
     self.assertEqual(values[5], ["Publisher", raw.publisher])
     self.assertEqual(values[6], ["State", raw.state])
     self.assertEqual(values[7], ["Event", raw.event])
     self.assertEqual(values[8], ["Service", raw.service])
     self.assertEqual(values[9], ["Host", raw.host])
     self.assertEqual(values[10], ["UUID", raw.instance])
     self.assertEqual(values[11], ["Req ID", raw.request_id])
コード例 #27
0
 def _assert_on_show(self, values, raw):
     self.assertEqual(len(values), 12)
     self.assertEqual(values[0], ["Key", "Value"])
     self.assertEqual(values[1], ["#", raw.id])
     self.assertEqual(values[2],
                      ["When", str(dt.dt_from_decimal(raw.when))])
     self.assertEqual(values[3], ["Deployment", raw.deployment.name])
     self.assertEqual(values[4], ["Category", raw.routing_key])
     self.assertEqual(values[5], ["Publisher", raw.publisher])
     self.assertEqual(values[6], ["State", raw.state])
     self.assertEqual(values[7], ["Event", raw.event])
     self.assertEqual(values[8], ["Service", raw.service])
     self.assertEqual(values[9], ["Host", raw.host])
     self.assertEqual(values[10], ["UUID", raw.instance])
     self.assertEqual(values[11], ["Req ID", raw.request_id])
コード例 #28
0
    def test_verify_delete_when_no_delete(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.uuid = IMAGE_UUID_1
        exist.deleted_at = None
        audit_period_ending = decimal.Decimal("1.2")
        exist.audit_period_ending = audit_period_ending

        results = self.mox.CreateMockAnything()
        models.ImageDeletes.find(IMAGE_UUID_1, dt.dt_from_decimal(audit_period_ending)).AndReturn(results)
        results.count().AndReturn(0)

        self.mox.ReplayAll()

        glance_verifier._verify_for_delete(exist)
        self.mox.VerifyAll()
コード例 #29
0
ファイル: nova_verifier.py プロジェクト: rcleere/stacktach
def _verify_for_launch(exist, launch=None, launch_type="InstanceUsage"):

    if not launch and exist.usage:
        launch = exist.usage
    elif not launch:
        if models.InstanceUsage.objects.filter(instance=exist.instance).count() > 0:
            launches = models.InstanceUsage.find(exist.instance, dt.dt_from_decimal(exist.launched_at))
            count = launches.count()
            query = {"instance": exist.instance, "launched_at": exist.launched_at}
            if count > 1:
                raise AmbiguousResults(launch_type, query)
            elif count == 0:
                raise NotFound(launch_type, query)
            launch = launches[0]
        else:
            raise NotFound(launch_type, {"instance": exist.instance})

    _verify_field_mismatch(exist, launch)
コード例 #30
0
    def test_verify_delete_when_no_delete(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.uuid = IMAGE_UUID_1
        exist.deleted_at = None
        audit_period_ending = decimal.Decimal('1.2')
        exist.audit_period_ending = audit_period_ending

        results = self.mox.CreateMockAnything()
        models.ImageDeletes.find(
            IMAGE_UUID_1,
            dt.dt_from_decimal(audit_period_ending)).AndReturn(results)
        results.count().AndReturn(0)

        self.mox.ReplayAll()

        glance_verifier._verify_for_delete(exist)
        self.mox.VerifyAll()
コード例 #31
0
    def test_verify_delete_found_delete_when_exist_deleted_at_is_none(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.uuid = IMAGE_UUID_1
        audit_period_ending = decimal.Decimal("1.3")
        exist.deleted_at = None
        exist.audit_period_ending = audit_period_ending
        results = self.mox.CreateMockAnything()
        models.ImageDeletes.find(IMAGE_UUID_1, dt.dt_from_decimal(audit_period_ending)).AndReturn(results)
        results.count().AndReturn(1)

        self.mox.ReplayAll()

        with self.assertRaises(VerificationException) as ve:
            glance_verifier._verify_for_delete(exist)
        exception = ve.exception
        self.assertEqual(exception.reason, "Found ImageDeletes for non-delete exist")

        self.mox.VerifyAll()
コード例 #32
0
    def test_verify_for_delete_found_delete(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.instance = INSTANCE_ID_1
        exist.launched_at = decimal.Decimal('1.1')
        exist.deleted_at = decimal.Decimal('5.1')
        launched_at = decimal.Decimal('1.1')
        results = self.mox.CreateMockAnything()
        models.InstanceDeletes.find(INSTANCE_ID_1, dt.dt_from_decimal(
                                    launched_at)).AndReturn(results)
        results.count().AndReturn(1)
        delete = self.mox.CreateMockAnything()
        delete.launched_at = decimal.Decimal('1.1')
        delete.deleted_at = decimal.Decimal('5.1')
        results.__getitem__(0).AndReturn(delete)

        self.mox.ReplayAll()

        nova_verifier._verify_for_delete(exist)
        self.mox.VerifyAll()
コード例 #33
0
 def test_verify_with_reconciled_data_reconcile_not_found(self):
     exists = self.mox.CreateMockAnything()
     exists.instance = INSTANCE_ID_1
     launched_at = decimal.Decimal('1.1')
     deleted_at = decimal.Decimal('2.1')
     exists.launched_at = launched_at
     exists.deleted_at = deleted_at
     results = self.mox.CreateMockAnything()
     models.InstanceReconcile.objects.filter(instance=INSTANCE_ID_1)\
                                     .AndReturn(results)
     results.count().AndReturn(1)
     launched_at = dt.dt_from_decimal(decimal.Decimal('1.1'))
     recs = self.mox.CreateMockAnything()
     models.InstanceReconcile.find(INSTANCE_ID_1, launched_at).AndReturn(recs)
     recs.count().AndReturn(0)
     self.mox.ReplayAll()
     with self.assertRaises(NotFound) as cm:
         nova_verifier._verify_with_reconciled_data(exists)
     exception = cm.exception
     self.assertEquals(exception.object_type, 'InstanceReconcile')
     self.mox.VerifyAll()
コード例 #34
0
    def test_verify_delete_found_delete_when_exist_deleted_at_is_none(self):
        exist = self.mox.CreateMockAnything()
        exist.delete = None
        exist.uuid = IMAGE_UUID_1
        audit_period_ending = decimal.Decimal('1.3')
        exist.deleted_at = None
        exist.audit_period_ending = audit_period_ending
        results = self.mox.CreateMockAnything()
        models.ImageDeletes.find(
            IMAGE_UUID_1,
            dt.dt_from_decimal(audit_period_ending)).AndReturn(results)
        results.count().AndReturn(1)

        self.mox.ReplayAll()

        with self.assertRaises(VerificationException) as ve:
            glance_verifier._verify_for_delete(exist)
        exception = ve.exception
        self.assertEqual(exception.reason,
                         'Found ImageDeletes for non-delete exist')

        self.mox.VerifyAll()
コード例 #35
0
ファイル: dbverifier.py プロジェクト: manalilatkar/stacktach
def _verify_for_launch(exist):
    if exist.usage:
        launch = exist.usage
    else:
        if models.InstanceUsage.objects\
                 .filter(instance=exist.instance).count() > 0:
            launches = _find_launch(exist.instance,
                                    dt.dt_from_decimal(exist.launched_at))
            count = launches.count()
            query = {
                'instance': exist.instance,
                'launched_at': exist.launched_at
            }
            if count > 1:
                raise AmbiguousResults('InstanceUsage', query)
            elif count == 0:
                raise NotFound('InstanceUsage', query)
            launch = launches[0]
        else:
            raise NotFound('InstanceUsage', {'instance': exist.instance})

    _verify_field_mismatch(exist, launch)
コード例 #36
0
    def test_verify_for_launch_late_usage(self):
        exist = self.mox.CreateMockAnything()
        exist.usage = None
        exist.instance = INSTANCE_ID_1
        launched_at = decimal.Decimal('1.1')
        exist.launched_at = launched_at
        exist.instance_type_id = 2
        results = self.mox.CreateMockAnything()
        models.InstanceUsage.objects.filter(instance=INSTANCE_ID_1)\
            .AndReturn(results)
        results.count().AndReturn(2)
        models.InstanceUsage.find(INSTANCE_ID_1, dt.dt_from_decimal(
            launched_at)).AndReturn(results)
        results.count().AndReturn(1)
        usage = self.mox.CreateMockAnything()
        results.__getitem__(0).AndReturn(usage)
        usage.launched_at = decimal.Decimal('1.1')
        usage.instance_type_id = 2
        self.mox.ReplayAll()

        nova_verifier._verify_for_launch(exist)
        self.mox.VerifyAll()
コード例 #37
0
    def test_do_uuid(self):
        fake_request = self.mox.CreateMockAnything()
        fake_request.GET = {"uuid": INSTANCE_ID_1}
        result = self.mox.CreateMockAnything()
        models.RawData.objects.select_related().AndReturn(result)
        result.filter(instance=INSTANCE_ID_1).AndReturn(result)
        result.order_by("when").AndReturn(result)
        raw = self._create_raw()
        result.__iter__().AndReturn([raw].__iter__())
        self.mox.ReplayAll()

        resp = stacky_server.do_uuid(fake_request)

        self.assertEqual(resp.status_code, 200)
        json_resp = json.loads(resp.content)
        self.assertEqual(len(json_resp), 2)
        header = ["#", "?", "When", "Deployment", "Event", "Host", "State", "State'", "Task'"]
        self.assertEqual(json_resp[0], header)
        datetime = dt.dt_from_decimal(raw.when)
        body = [1, " ", str(datetime), "deployment", "test.start", "example.com", "active", None, None]
        self.assertEqual(json_resp[1], body)
        self.mox.VerifyAll()
コード例 #38
0
ファイル: views.py プロジェクト: souvikbasu/stacktach
def details(request, deployment_id, column, row_id):
    deployment_id = int(deployment_id)
    c = _default_context(request, deployment_id)
    row = models.RawData.objects.get(pk=row_id)
    value = getattr(row, column)
    rows = models.RawData.objects
    if deployment_id:
        rows = rows.filter(deployment=deployment_id)
    if column != 'when':
        rows = rows.filter(**{column: value})
    else:
        when = dt.dt_from_decimal(value)
        from_time = when - datetime.timedelta(minutes=1)
        to_time = when + datetime.timedelta(minutes=1)
        from_time_dec = dt.dt_to_decimal(from_time)
        to_time_dec = dt.dt_to_decimal(to_time)
        rows = rows.filter(when__range=(from_time_dec, to_time_dec))

    rows = rows.order_by('-when')[:200]
    _post_process_raw_data(rows, highlight=row_id)
    c['rows'] = rows
    c['allow_expansion'] = True
    c['show_absolute_time'] = True
    return render_to_response('rows.html', c)
コード例 #39
0
ファイル: views.py プロジェクト: huangshunping/stacktach
def details(request, deployment_id, column, row_id):
    deployment_id = int(deployment_id)
    c = _default_context(request, deployment_id)
    row = models.RawData.objects.get(pk=row_id)
    value = getattr(row, column)
    rows = models.RawData.objects.select_related()
    if deployment_id:
        rows = rows.filter(deployment=deployment_id)
    if column != 'when':
        rows = rows.filter(**{column:value})
    else:
        when = dt.dt_from_decimal(value)
        from_time = when - datetime.timedelta(minutes=1)
        to_time = when + datetime.timedelta(minutes=1)
        from_time_dec = dt.dt_to_decimal(from_time)
        to_time_dec = dt.dt_to_decimal(to_time)
        rows = rows.filter(when__range=(from_time_dec, to_time_dec))

    rows = rows.order_by('-when')[:200]
    _post_process_raw_data(rows, highlight=row_id)
    c['rows'] = rows
    c['allow_expansion'] = True
    c['show_absolute_time'] = True
    return render_to_response('rows.html', c)
コード例 #40
0
ファイル: dbapi.py プロジェクト: anujm/stacktach
def _exists_extra_values(exist):
    values = {'received': str(dt.dt_from_decimal(exist.raw.when))}
    return values
コード例 #41
0
 def test_decimal_to_datetime(self):
     expected_decimal = decimal.Decimal('1356093296.123')
     expected_datetime = datetime.datetime.utcfromtimestamp(
         expected_decimal)
     actual_datetime = datetime_to_decimal.dt_from_decimal(expected_decimal)
     self.assertEqual(actual_datetime, expected_datetime)
コード例 #42
0
def print_status(event, completed, errored, total):
    out = (event, completed, errored, total - (completed + errored))
    print "%s: %s completed, %s errored, %s remaining" % out


def find_start_decimal():
    usage = models.InstanceUsage.objects.all().order_by('id')[0]
    usage_raw = models.RawData.objects.filter(request_id=usage.request_id)\
                                      .order_by('when')[0]
    delete = models.InstanceDeletes.objects.all().order_by('id')[0]
    # Start a day after receiving the first usage, just to be safe
    return min(usage_raw.when, delete.raw.when) + (60 * 60 * 24)

start_decimal = find_start_decimal()

print "Starting from date %s" % dt.dt_from_decimal(start_decimal)

for event in events:
    start = datetime.datetime.utcnow()

    raws = models.RawData.objects.filter(event=event, when__lte=start_decimal)
    total = raws.count()
    completed = 0
    errored = 0
    loc = 0

    print_status(event, completed, errored, total)
    update_interval = datetime.timedelta(seconds=30)
    next_update = start + update_interval
    while loc < total:
        new_loc = loc + 500
コード例 #43
0
                failed_request['platform'] = image_type.readable(image_type_num)
                tenant_issues[tenant] = tenant_issues.get(tenant, 0) + 1

                if err_id:
                    err = models.RawData.objects.get(id=err_id)
                    queue, body = json.loads(err.json)
                    payload = body['payload']

                    # Add error information to failed request report
                    failed_request['event_id'] = err.id
                    failed_request['tenant'] = err.tenant
                    failed_request['service'] = err.service
                    failed_request['host'] = err.host
                    failed_request['deployment'] = err.deployment.name
                    failed_request['event'] = err.event
                    failed_request['when'] = str(dt.dt_from_decimal(err.when))

                    # Track failed event counts
                    event_counts[err.event] = event_counts.get(err.event, 0) + 1

                    exc = payload.get('exception')
                    if exc:
                        # group the messages ...
                        failed_request['exception'] = exc

                        # assemble message from exception and generalize
                        message_str = mask_msg(build_exc_msg(exc))
                        # count exception messages
                        exception_counts[message_str] = exception_counts.get(
                            message_str, 0) + 1
コード例 #44
0
                    image_type_num)
                tenant_issues[tenant] = tenant_issues.get(tenant, 0) + 1

                if err_id:
                    err = models.RawData.objects.get(id=err_id)
                    queue, body = json.loads(err.json)
                    payload = body['payload']

                    # Add error information to failed request report
                    failed_request['event_id'] = err.id
                    failed_request['tenant'] = err.tenant
                    failed_request['service'] = err.service
                    failed_request['host'] = err.host
                    failed_request['deployment'] = err.deployment.name
                    failed_request['event'] = err.event
                    failed_request['when'] = str(dt.dt_from_decimal(err.when))

                    # Track failed event counts
                    event_counts[err.event] = event_counts.get(err.event,
                                                               0) + 1

                    exc = payload.get('exception')
                    if exc:
                        # group the messages ...
                        failed_request['exception'] = exc

                        # assemble message from exception and generalize
                        message_str = mask_msg(build_exc_msg(exc))
                        # count exception messages
                        exception_counts[message_str] = exception_counts.get(
                            message_str, 0) + 1
コード例 #45
0
def print_status(event, completed, errored, total):
    out = (event, completed, errored, total - (completed + errored))
    print "%s: %s completed, %s errored, %s remaining" % out


def find_start_decimal():
    usage = models.InstanceUsage.objects.all().order_by('id')[0]
    usage_raw = models.RawData.objects.filter(request_id=usage.request_id)\
                                      .order_by('when')[0]
    delete = models.InstanceDeletes.objects.all().order_by('id')[0]
    # Start a day after receiving the first usage, just to be safe
    return min(usage_raw.when, delete.raw.when) + (60 * 60 * 24)

start_decimal = find_start_decimal()

print "Starting from date %s" % dt.dt_from_decimal(start_decimal)

for event in events:
    start = datetime.datetime.utcnow()

    raws = models.RawData.objects.filter(event=event, when__lte=start_decimal)
    total = raws.count()
    completed = 0
    errored = 0
    loc = 0

    print_status(event, completed, errored, total)
    update_interval = datetime.timedelta(seconds=30)
    next_update = start + update_interval
    while loc < total:
        new_loc = loc + 500
コード例 #46
0
ファイル: dbapi.py プロジェクト: macdomat/stacktach
def _exists_extra_values(exist):
    values = {'received': str(dt.dt_from_decimal(exist.raw.when))}
    return values
コード例 #47
0
 def test_decimal_to_datetime(self):
     expected_decimal = decimal.Decimal('1356093296.123')
     expected_datetime = datetime.datetime.utcfromtimestamp(expected_decimal)
     actual_datetime = datetime_to_decimal.dt_from_decimal(expected_decimal)
     self.assertEqual(actual_datetime, expected_datetime)