def get_sensor_metrics(self): metrics = [] o = Object.get_managed(self.object).values_list("id") for s in (Sensor._get_collection().with_options( read_preference=ReadPreference.SECONDARY_PREFERRED).find( { "object": { "$in": list(o) }, "snmp_oid": { "$exists": True } }, { "local_id": 1, "profile": 1, "state": 1, "snmp_oid": 1, "labels": 1, "bi_id": 1 }, )): if not s.get("profile"): self.logger.debug("[%s] Sensor has no profile. Skipping", s["name"]) continue pm: "SensorProfile" = SensorProfile.get_by_id(s["profile"]) if not pm.enable_collect: continue state = State.get_by_id(s["state"]) if not state.is_productive: self.logger.debug( "[%s] Sensor is not productive state. Skipping", s["name"]) continue for mtype in ["Sensor | Value", "Sensor | Status"]: m_id = next(self.id_count) metric = MetricType.get_by_name(mtype) labels = [f'noc::sensor::{s["local_id"]}'] + s.get( "labels", []) metrics += [{ "id": m_id, "metric": metric.name, "labels": labels, "oid": s["snmp_oid"], }] self.id_metrics[m_id] = MetricConfig(metric, False, True, True, None) self.sensors_metrics[m_id] = int(s["bi_id"]) return metrics
def get_linked_pops(self): linked = set() self_objects = set(self.get_pop_objects()) self_interfaces = set(i.id for i in Interface.objects.filter(managed_object__in=self_objects)) for l in Link.objects.filter(interfaces__in=self_interfaces): ri = (i for i in l.interfaces if i.id not in self_interfaces) if ri: # Remote link ro = set() for i in ri: ro.add(i.managed_object.id) if len(ro) == 1 and ro: for o in Object.get_managed(ro.pop()): pop = o.get_pop() if pop and pop not in linked: linked.add(pop) return linked