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)
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
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
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