class State(Dictionary): class Meta(object): name = "state" layout = "flat" name = StringField() workflow = StringField() is_default = BooleanField() is_productive = BooleanField()
class ObjectProfile(Dictionary): class Meta(object): name = "objectprofile" layout = "flat" name = StringField() # ObjectProfile Level level = UInt8Field() enable_ping = BooleanField() enable_box_discovery = BooleanField() enable_periodic_discovery = BooleanField()
class Workflow(Dictionary): class Meta: name = "workflow" layout = "flat" name = StringField() is_active = BooleanField()
class ManagedObject(Model): class Meta(object): db_table = "managedobjects" engine = MergeTree("date", ("managed_object", "ts")) date = DateField(description=_("Date")) ts = DateTimeField(description=_("Created")) managed_object = ReferenceField(ManagedObjectDict, description=_("Object Name")) # Location administrative_domain = ReferenceField(AdministrativeDomain, description=_("Admin. Domain")) segment = ReferenceField(NetworkSegment, description=_("Network Segment")) container = ReferenceField(Container, description=_("Container")) location = StringField(description="Geo location") level = UInt16Field(description=_("Level")) # Coordinates x = Float64Field(description=_("Longitude")) y = Float64Field(description=_("Latitude")) # Management pool = ReferenceField(Pool, description=_("Pool Name")) name = StringField(description=_("Name")) hostname = StringField(description=_("Hostaname")) ip = IPv4Field(description=_("IP Address")) is_managed = BooleanField(description=_("Is Managed")) # Platform profile = ReferenceField(Profile, description=_("Profile")) vendor = ReferenceField(Vendor, description=_("Vendor")) platform = ReferenceField(Platform, description=_("Platform")) hw_version = StringField(description=_("HW. Version")) version = ReferenceField(Version, description=_("Version")) bootprom_version = StringField(description=_("BootPROM. Version")) n_interfaces = Int32Field(description=_("Interface count")) n_subscribers = Int32Field(description=_("Subscribers count")) n_services = Int32Field(description=_("Services count")) # Topology n_neighbors = Int32Field(description=_("Neighbors")) n_links = Int32Field(description=_("Links count")) nri_links = Int32Field(description=_("Links (NRI)")) mac_links = Int32Field(description=_("Links (MAC)")) stp_links = Int32Field(description=_("Links (STP)")) lldp_links = Int32Field(description=_("Links (LLDP)")) cdp_links = Int32Field(description=_("Links (CDP)")) # Capabilities has_stp = BooleanField(description=_("Has STP")) has_lldp = BooleanField(description=_("Has LLDP")) has_cdp = BooleanField(description=_("Has CDP")) has_snmp = BooleanField(description=_("Has SNMP")) has_snmp_v1 = BooleanField(description=_("Has SNMP v1")) has_snmp_v2c = BooleanField(description=_("Has SNMP v2c")) # Counter uptime = Float64Field(description=_("Uptime")) # SerialNumber serials = ArrayField(StringField(), description=_("Serial Numbers")) # Tags tags = ArrayField(StringField(), description=_("Tags")) @classmethod def transform_query(cls, query, user): if not user or user.is_superuser: return query # No restrictions # Get user domains domains = UserAccess.get_domains(user) # Resolve domains against dict domain_ids = [ x.bi_id for x in AdministrativeDomainM.objects.filter(id__in=domains) ] filter = query.get("filter", {}) dl = len(domain_ids) if not dl: return None elif dl == 1: q = {"$eq": [{"$field": "administrative_domain"}, domain_ids[0]]} else: q = {"$in": [{"$field": "administrative_domain"}, domain_ids]} if filter: query["filter"] = {"$and": [query["filter"], q]} else: query["filter"] = q return query