Beispiel #1
0
 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
Beispiel #2
0
 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