def OP_ATTR_MAP(self): return { "2": {"1": False, "2": True}, "7": { "1": str(Profile.get_generic_profile_id()), "2": str(Profile.get_generic_profile_id()), "ne": ["2"], }, "13020": {"1": False, "2": True, "model": ManagedObjectProfile}, "1403": {"5": "S", "model": AuthProfile}, }
def handler(self): self.logger.info("Checking CPEs") now = datetime.datetime.now() result = self.object.scripts.get_cpe() for cpe in result: if cpe["status"] != "active": self.logger.debug( "[%s|%s] CPE status is '%s'. Skipping", cpe["id"], cpe["global_id"], cpe["status"], ) continue mo = self.find_cpe(cpe["global_id"]) if mo: changes = self.update_if_changed( mo, { "controller": self.object, "local_cpe_id": cpe["id"], "global_cpe_id": cpe["global_id"], "address": cpe["ip"], "last_seen": now, }, ) if changes: self.logger.info( "[%s|%s] Changed: %s", cpe["id"], cpe["global_id"], ", ".join("%s='%s'" % c for c in changes), ) else: name = cpe.get("name") or "cpe-%s" % cpe["global_id"] if ManagedObject.objects.filter(name=name).exists(): name = "cpe-%s" % cpe["global_id"] self.logger.info("[%s|%s] Created CPE %s", cpe["id"], cpe["global_id"], name) mo = ManagedObject( name=name, pool=self.object.pool, profile=Profile.get_by_id( Profile.get_generic_profile_id()), object_profile=self.object.object_profile.cpe_profile or self.object.object_profile, administrative_domain=self.object.administrative_domain, scheme=self.object.scheme, segment=self.object.segment, auth_profile=self.object.object_profile.cpe_auth_profile or self.object.auth_profile, address=cpe.get("ip") or "0.0.0.0", controller=self.object, last_seen=now, local_cpe_id=cpe["id"], global_cpe_id=cpe["global_id"], ) mo.save()
def get_profile(self): """ Returns profile for object, or None when not known """ # Get SNMP version and community if hasattr(self.object, "_suggest_snmp") and self.object._suggest_snmp: # Use guessed community # as defined one may be invalid snmp_community = self.object._suggest_snmp[0] snmp_version = [{ "snmp_v1_get": SNMP_v1, "snmp_v2c_get": SNMP_v2c }[self.object._suggest_snmp[2]]] else: snmp_community = self.object.credentials.snmp_ro caps = self.object.get_caps() if caps.get("SNMP | v2c") is False or caps.get( "SNMP | v2c") is None: snmp_version = [SNMP_v1, SNMP_v2c] else: snmp_version = [SNMP_v2c, SNMP_v1] # checker = ProfileChecker( self.object.address, self.object.pool.name, logger=self.logger, calling_service="discovery", snmp_community=snmp_community, snmp_version=snmp_version, ) profile = checker.get_profile() if profile: return profile # Report problem self.set_problem( alarm_class="Discovery | Guess | Profile", message=checker.get_error(), fatal=self.object.profile.id == Profile.get_generic_profile_id(), ) self.logger.debug("Result %s" % self.job.problems) return None
def test_generic_profile_id(): p = Profile.get_generic_profile_id() assert p assert isinstance(p, bson.ObjectId)