def ensure_discovery_jobs(self): if self.profile and self.profile.discovery_interval > 0: Job.submit("scheduler", self.DISCOVERY_JOB, key=self.id, keep_ts=True) else: Job.remove("scheduler", self.DISCOVERY_JOB, key=self.id)
def api_stop_discovery(self, request, id): o = self.get_object_or_404(ManagedObject, id=id) if not o.has_access(request.user): return self.response_forbidden("Access denied") r = ujson.loads(request.body).get("names", []) for name, jcls in self.DISCOVERY_JOBS: if name not in r: continue if not getattr(o.object_profile, "enable_%s_discovery" % name): continue # Disabled by profile Job.remove("discovery", jcls, key=o.id, pool=o.pool.name) return {"success": True}
def apply_discovery_jobs(profile_id, box_changed, periodic_changed): def iter_objects(): pool_cache = cachetools.LRUCache( maxsize=200, missing=lambda x: Pool.objects.get(id=x) ) for o_id, is_managed, pool_id in profile.managedobject_set.values_list("id", "is_managed", "pool"): yield o_id, is_managed, pool_cache[pool_id] try: profile = ManagedObjectProfile.objects.get(id=profile_id) except ManagedObjectProfile.DoesNotExist: return for mo_id, is_managed, pool in iter_objects(): if box_changed: if profile.enable_box_discovery and is_managed: Job.submit( "discovery", "noc.services.discovery.jobs.box.job.BoxDiscoveryJob", key=mo_id, pool=pool ) else: Job.remove( "discovery", "noc.services.discovery.jobs.box.job.BoxDiscoveryJob", key=mo_id, pool=pool ) if periodic_changed: if profile.enable_periodic_discovery and is_managed: Job.submit( "discovery", "noc.services.discovery.jobs.periodic.job.PeriodicDiscoveryJob", key=mo_id, pool=pool ) else: Job.remove( "discovery", "noc.services.discovery.jobs.periodic.job.PeriodicDiscoveryJob", key=mo_id, pool=pool )
def remove_job(self): logger.info("Removing job") Job.remove("scheduler", self.JCLS)
def wipe(o): if not hasattr(o, "id"): try: o = ManagedObject.objects.get(id=o) except ManagedObject.DoesNotExist: return True log = PrefixLoggerAdapter(logger, str(o.id)) # Wiping discovery tasks log.debug("Wiping discovery tasks") for j in [ ManagedObject.BOX_DISCOVERY_JOB, ManagedObject.PERIODIC_DISCOVERY_JOB ]: Job.remove("discovery", j, key=o.id, pool=o.pool.name) # Wiping FM events log.debug("Wiping events") FailedEvent.objects.filter(managed_object=o.id).delete() ActiveEvent.objects.filter(managed_object=o.id).delete() ArchivedEvent.objects.filter(managed_object=o.id).delete() # Wiping alarms log.debug("Wiping alarms") for ac in (ActiveAlarm, ArchivedAlarm): for a in ac.objects.filter(managed_object=o.id): # Relink root causes my_root = a.root for iac in (ActiveAlarm, ArchivedAlarm): for ia in iac.objects.filter(root=a.id): ia.root = my_root ia.save() # Delete alarm a.delete() # Wiping MAC DB log.debug("Wiping MAC DB") MACDB._get_collection().remove({"managed_object": o.id}) # Wiping discovery id cache log.debug("Wiping discovery id") DiscoveryID._get_collection().remove({"object": o.id}) # Wiping interfaces, subs and links # Wipe links log.debug("Wiping links") for i in Interface.objects.filter(managed_object=o.id): # @todo: Remove aggregated links correctly Link.objects.filter(interfaces=i.id).delete() # log.debug("Wiping subinterfaces") SubInterface.objects.filter(managed_object=o.id).delete() log.debug("Wiping interfaces") Interface.objects.filter(managed_object=o.id).delete() log.debug("Wiping forwarding instances") ForwardingInstance.objects.filter(managed_object=o.id).delete() # Unbind from IPAM log.debug("Unbind from IPAM") for a in Address.objects.filter(managed_object=o): a.managed_object = None a.save() # Wipe object status log.debug("Wiping object status") ObjectStatus.objects.filter(object=o.id).delete() # Wipe outages log.debug("Wiping outages") Outage.objects.filter(object=o.id).delete() # Wipe uptimes log.debug("Wiping uptimes") Uptime.objects.filter(object=o.id).delete() # Wipe reboots log.debug("Wiping reboots") Reboot.objects.filter(object=o.id).delete() # Delete Managed Object's capabilities log.debug("Wiping capabilitites") ObjectCapabilities.objects.filter(object=o.id).delete() # Delete Managed Object's attributes log.debug("Wiping attributes") ManagedObjectAttribute.objects.filter(managed_object=o).delete() # Finally delete object and config log.debug("Finally wiping object") o.delete() log.debug("Done")