Ejemplo n.º 1
0
class LearnEvent(AlertStateBase):
    variant_fields = [
        VariantDescriptor('learned_item_id', int, None, None, 0),
        VariantDescriptor(
            'learned_item_type', int,
            None, lambda self_, value: self_.set_variant(
                'learned_item_type', int, value.id), None)
    ]

    learned_item = VariantGenericForeignKey('learned_item_type',
                                            'learned_item_id')

    class Meta:
        app_label = 'chroma_core'
        db_table = AlertStateBase.table_name

    @staticmethod
    def type_name():
        return "Autodetection"

    def alert_message(self):
        from chroma_core.models import ManagedTarget, ManagedFilesystem, ManagedTargetMount
        if isinstance(self.learned_item, ManagedTargetMount):
            return "Discovered mount point of %s on %s" % (
                self.learned_item, self.learned_item.host)
        elif isinstance(self.learned_item, ManagedTarget):
            return "Discovered formatted target %s" % self.learned_item
        elif isinstance(self.learned_item, ManagedFilesystem):
            return "Discovered filesystem %s on MGS %s" % (
                self.learned_item, self.learned_item.mgs.primary_host)
        else:
            return "Discovered %s" % self.learned_item
class StorageResourceLearnEvent(AlertStateBase):
    variant_fields = [
        VariantDescriptor(
            "storage_resource",
            StorageResourceRecord,
            lambda self_: StorageResourceRecord.objects.get(
                id=self_.get_variant("storage_resource_id", None, int)),
            lambda self_, value: self_.set_variant("storage_resource_id", int,
                                                   value.id),
            None,
        )
    ]

    @staticmethod
    def type_name():
        return "Storage resource detection"

    def alert_message(self):
        from chroma_core.lib.storage_plugin.query import ResourceQuery

        class_name, instance_name = ResourceQuery(
        ).record_class_and_instance_string(self.storage_resource)
        return "Discovered %s '%s'" % (class_name, instance_name)

    class Meta:
        app_label = "chroma_core"
        db_table = AlertStateBase.table_name
class LearnEvent(AlertStateBase):
    variant_fields = [
        VariantDescriptor("learned_item_id", int, None, None, 0),
        VariantDescriptor(
            "learned_item_type",
            int,
            None,
            lambda self_, value: self_.set_variant("learned_item_type", int,
                                                   value),
            None,
        ),
    ]

    @property
    def learned_item(self):
        return self.__learned_item

    @learned_item.setter
    def learned_item(self, x):
        self.__learned_item = x

    __learned_item = VariantGenericForeignKey("learned_item_type",
                                              "learned_item_id")

    class Meta:
        app_label = "chroma_core"
        proxy = True

    @staticmethod
    def type_name():
        return "Autodetection"

    def alert_message(self):
        from chroma_core.models import ManagedTarget, ManagedFilesystem, ManagedTargetMount

        if isinstance(self.learned_item, ManagedTargetMount):
            return "Discovered mount point of %s on %s" % (
                self.learned_item, self.learned_item.host)
        elif isinstance(self.learned_item, ManagedTarget):
            return "Discovered formatted target %s" % self.learned_item
        elif isinstance(self.learned_item, ManagedFilesystem):
            return "Discovered filesystem %s on MGS %s" % (
                self.learned_item, self.learned_item.mgs.primary_host)
        else:
            return "Discovered %s" % self.learned_item
class StorageResourceAlert(AlertStateBase):
    """Used by chroma_core.lib.storage_plugin"""
    class Meta:
        app_label = "chroma_core"
        proxy = True

    variant_fields = [
        VariantDescriptor("alert_class", str, None, None, ""),
        VariantDescriptor("attribute", str, None, None, None),
    ]

    def __str__(self):
        return "<%s:%s %s>" % (self.alert_class, self.attribute, self.pk)

    def alert_message(self):
        from chroma_core.lib.storage_plugin.query import ResourceQuery

        msg = ResourceQuery().record_alert_message(self.alert_item.pk,
                                                   self.alert_class)
        return msg

    def end_event(self):
        return AlertEvent(
            message_str="Cleared storage alert: %s" % self.message(),
            alert_item=self.alert_item,
            alert=self,
            severity=logging.INFO,
        )

    def affected_targets(self, affect_target):
        from chroma_core.models.target import get_host_targets

        affected_srrs = [
            sap["storage_resource_id"]
            for sap in StorageAlertPropagated.objects.filter(
                alert_state=self).values("storage_resource_id")
        ]
        affected_srrs.append(self.alert_item_id)
        luns = Volume.objects.filter(storage_resource__in=affected_srrs)
        for l in luns:
            for ln in l.volumenode_set.all():
                ts = get_host_targets(ln.host_id)
                for t in ts:
                    affect_target(t)
Ejemplo n.º 5
0
class AlertEvent(AlertStateBase):
    class Meta:
        app_label = 'chroma_core'
        db_table = AlertStateBase.table_name

    variant_fields = [
        VariantDescriptor('message_str', str, None, None, ''),
        VariantDescriptor(
            'alert', AlertState, lambda self_: AlertState.objects.get(
                id=self_.get_variant('alert_id', None, int)),
            lambda self_, value: self_.set_variant('alert_id', int, value.id),
            None)
    ]

    @staticmethod
    def type_name():
        return "Alert"

    def alert_message(self):
        return self.message_str
Ejemplo n.º 6
0
class StorageResourceAlert(AlertStateBase):
    """Used by chroma_core.lib.storage_plugin"""
    class Meta:
        app_label = 'chroma_core'
        db_table = AlertStateBase.table_name

    variant_fields = [
        VariantDescriptor('alert_class', str, None, None, ""),
        VariantDescriptor('attribute', str, None, None, None)
    ]

    def __str__(self):
        return "<%s:%s %s>" % (self.alert_class, self.attribute, self.pk)

    def alert_message(self):
        from chroma_core.lib.storage_plugin.query import ResourceQuery
        msg = ResourceQuery().record_alert_message(self.alert_item.pk,
                                                   self.alert_class)
        return msg

    def end_event(self):
        return AlertEvent(message_str="Cleared storage alert: %s" %
                          self.message(),
                          alert_item=self.alert_item,
                          alert=self,
                          severity=logging.INFO)

    def affected_targets(self, affect_target):
        affected_srrs = [
            sap['storage_resource_id']
            for sap in StorageAlertPropagated.objects.filter(
                alert_state=self).values('storage_resource_id')
        ]
        affected_srrs.append(self.alert_item_id)
        luns = Volume.objects.filter(storage_resource__in=affected_srrs)
        for l in luns:
            for ln in l.volumenode_set.all():
                tms = ManagedTargetMount.objects.filter(volume_node=ln)
                for tm in tms:
                    affect_target(tm.target)
class ClientConnectEvent(AlertStateBase):
    class Meta:
        app_label = "chroma_core"
        db_table = AlertStateBase.table_name

    variant_fields = [VariantDescriptor("message_str", str, None, None, "")]

    def alert_message(self):
        return self.message_str

    @staticmethod
    def type_name():
        return "ClientConnect"
class SyslogEvent(AlertStateBase):
    variant_fields = [VariantDescriptor("message_str", str, None, None, "")]

    class Meta:
        app_label = "chroma_core"
        db_table = AlertStateBase.table_name

    @staticmethod
    def type_name():
        return "Syslog"

    def alert_message(self):
        return self.message_str
Ejemplo n.º 9
0
class AlertEvent(AlertStateBase):
    class Meta:
        app_label = "chroma_core"
        proxy = True

    variant_fields = [
        VariantDescriptor("message_str", str, None, None, ""),
        VariantDescriptor(
            "alert",
            AlertState,
            lambda self_: AlertState.objects.get(id=self_.get_variant("alert_id", None, int)),
            lambda self_, value: self_.set_variant("alert_id", int, value.id),
            None,
        ),
    ]

    @staticmethod
    def type_name():
        return "Alert"

    def alert_message(self):
        return self.message_str