diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 270a54556e..ce757e1782 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1007,7 +1007,7 @@ class ActivityStreamSerializer(BaseSerializer): class Meta: model = ActivityStream fields = ('id', 'url', 'related', 'summary_fields', 'timestamp', 'operation', 'changes', - 'object1_id', 'object1_type', 'object2_id', 'object2_type', 'object_relationship_type') + 'object1_id', 'object1', 'object1_type', 'object2_id', 'object2', 'object2_type', 'object_relationship_type') def get_related(self, obj): if obj is None: @@ -1030,8 +1030,11 @@ class ActivityStreamSerializer(BaseSerializer): short_obj_type = obj.object1_type.split(".")[-1] under_short_obj_type = camelcase_to_underscore(short_obj_type) obj1 = eval(obj.object1_type + ".objects.get(id=" + str(obj.object1_id) + ")") - d['object1'] = {'name': obj1.name, 'description': obj1.description, - 'base': under_short_obj_type, 'id': obj.object1_id} + if hasattr(obj1, "name"): + d['object1'] = {'name': obj1.name, 'description': obj1.description, + 'base': under_short_obj_type, 'id': obj.object1_id} + else: + d['object1'] = {'base': under_short_obj_type, 'id': obj.object1_id} if under_short_obj_type == "host" or under_short_obj_type == "group": d['inventory'] = {'name': obj1.inventory.name, 'id': obj1.inventory.id} except Exception, e: @@ -1041,8 +1044,11 @@ class ActivityStreamSerializer(BaseSerializer): under_short_obj_type = camelcase_to_underscore(short_obj_type) if obj.operation in ('associate', 'disassociate'): obj2 = eval(obj.object2_type + ".objects.get(id=" + str(obj.object2_id) + ")") - d['object2'] = {'name': obj2.name, 'description': obj2.description, - 'base': under_short_obj_type, 'id': obj.object2_id} + if hasattr(obj2, "name"): + d['object2'] = {'name': obj2.name, 'description': obj2.description, + 'base': under_short_obj_type, 'id': obj.object2_id} + else: + d['object2'] = {'base': under_short_obj_type, 'id': obj.object2_id} if under_short_obj_type == "host" or under_short_obj_type == "group": d['inventory'] = {'name': obj2.inventory.name, 'id': obj2.inventory.id} except Exception, e: diff --git a/awx/main/migrations/0025_v14_changes.py b/awx/main/migrations/0025_v14_changes.py index ab4fcb3c3a..70fed60207 100644 --- a/awx/main/migrations/0025_v14_changes.py +++ b/awx/main/migrations/0025_v14_changes.py @@ -16,8 +16,10 @@ class Migration(SchemaMigration): ('timestamp', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), ('changes', self.gf('django.db.models.fields.TextField')(blank=True)), ('object1_id', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('object1', self.gf('django.db.models.fields.TextField')()), ('object1_type', self.gf('django.db.models.fields.TextField')()), ('object2_id', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, db_index=True)), + ('object2', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), ('object2_type', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), ('object_relationship_type', self.gf('django.db.models.fields.TextField')(blank=True)), )) @@ -70,8 +72,10 @@ class Migration(SchemaMigration): 'Meta': {'object_name': 'ActivityStream'}, 'changes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object1': ('django.db.models.fields.TextField', [], {}), 'object1_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), 'object1_type': ('django.db.models.fields.TextField', [], {}), + 'object2': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), 'object2_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'db_index': 'True'}), 'object2_type': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), 'object_relationship_type': ('django.db.models.fields.TextField', [], {'blank': 'True'}), diff --git a/awx/main/models/activity_stream.py b/awx/main/models/activity_stream.py index b0ef9127b0..76333bd564 100644 --- a/awx/main/models/activity_stream.py +++ b/awx/main/models/activity_stream.py @@ -28,9 +28,11 @@ class ActivityStream(models.Model): changes = models.TextField(blank=True) object1_id = models.PositiveIntegerField(db_index=True) + object1 = models.TextField() object1_type = models.TextField() object2_id = models.PositiveIntegerField(db_index=True, null=True) + object2 = models.TextField(null=True, blank=True) object2_type = models.TextField(null=True, blank=True) object_relationship_type = models.TextField(blank=True) diff --git a/awx/main/signals.py b/awx/main/signals.py index afab9f64e6..44fa6447b2 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -12,7 +12,7 @@ from django.dispatch import receiver # AWX from awx.main.models import * -from awx.main.utils import model_instance_diff, model_to_dict +from awx.main.utils import model_instance_diff, model_to_dict, camelcase_to_underscore __all__ = [] @@ -178,6 +178,7 @@ def activity_stream_create(sender, instance, created, **kwargs): activity_entry = ActivityStream( operation='create', object1_id=instance.id, + object1=camelcase_to_underscore(instance.__class__.__name__), object1_type=instance.__class__.__module__ + "." + instance.__class__.__name__, changes=json.dumps(model_to_dict(instance))) activity_entry.save() @@ -193,6 +194,7 @@ def activity_stream_update(sender, instance, **kwargs): activity_entry = ActivityStream( operation='update', object1_id=instance.id, + object1=camelcase_to_underscore(instance.__class__.__name__), object1_type=instance.__class__.__module__ + "." + instance.__class__.__name__, changes=json.dumps(changes)) activity_entry.save() @@ -202,6 +204,7 @@ def activity_stream_delete(sender, instance, **kwargs): activity_entry = ActivityStream( operation='delete', object1_id=instance.id, + object1=camelcase_to_underscore(instance.__class__.__name__), object1_type=instance.__class__.__module__ + "." + instance.__class__.__name__) activity_entry.save() @@ -222,8 +225,10 @@ def activity_stream_associate(sender, instance, **kwargs): activity_entry = ActivityStream( operation=action, object1_id=obj1_id, + object1=camelcase_to_underscore(obj1.__class__.__name__), object1_type=obj1.__class__.__module__ + "." + obj1.__class__.__name__, object2_id=obj2_id, + object2=camelcase_to_underscore(obj2.__name__), object2_type=obj2.__module__ + "." + obj2.__name__, object_relationship_type=obj_rel) activity_entry.save()