コード例 #1
0
    def update_storage_temperature(self, old_ambient, new_ambient):

        with self._graph_ref.get_session() as db_s:

            hd_elements = GraphReference.get_all_hd_thermal_elements(
                db_s, self.key)

            for hd_e in hd_elements:

                if "DID" in hd_e["component"]:
                    target_attr = "DID"
                    target_value = hd_e["component"]["DID"]
                    target_type = "PhysicalDrive"
                else:
                    target_attr = "serialNumber"
                    target_value = '"{}"'.format(
                        hd_e["component"]["serialNumber"])
                    target_type = "CacheVault"

                updated, new_temp = GraphReference.add_to_hd_component_temperature(
                    db_s,
                    target={
                        "server_key": self.key,
                        "controller": hd_e["controller"]["controllerNum"],
                        "attribute": target_attr,
                        "value": target_value,
                        "hd_type": target_type,
                    },
                    temp_change=new_ambient - old_ambient,
                    limit={
                        "lower": new_ambient,
                        "upper": None
                    },
                )
コード例 #2
0
ファイル: sensor.py プロジェクト: Seneca-CDOT/simengine
    def _target_storage(self, controller, target, hd_type, event):
        with self._graph_ref.get_session() as session:
            while True:

                self._s_thermal_event.wait()

                # target
                if hd_type == HDComponents.CacheVault:
                    target_attr = "serialNumber"
                    target_value = '"{}"'.format(target)
                elif hd_type == HDComponents.PhysicalDrive:
                    target_attr = "DID"
                    target_value = target
                else:
                    raise ValueError("Unknown hardware component!")

                rel_details = GraphReference.get_sensor_thermal_rel(
                    session,
                    self._server_key,
                    relationship={
                        "source": self._s_name,
                        "target": {
                            "attribute": target_attr,
                            "value": target_value
                        },
                        "event": event,
                    },
                )

                if not rel_details:
                    del self._th_storage_t[target][event]
                    return

                rel = rel_details["rel"]
                causes_heating = rel["action"] == "increase"
                source_sensor_status = (operator.eq if rel["event"] == "down"
                                        else operator.ne)

                # if model is specified -> use the runtime mappings
                if "model" in rel and rel["model"]:
                    rel["degrees"] = self._calc_approx_value(
                        json.loads(rel["model"]),
                        int(self.sensor_value) * 10)

                    source_sensor_status = operator.ne

                if source_sensor_status(int(self.sensor_value), 0):
                    updated, new_temp = GraphReference.add_to_hd_component_temperature(
                        session,
                        target={
                            "server_key": self._server_key,
                            "controller": controller,
                            "attribute": target_attr,
                            "value": target_value,
                            "hd_type": hd_type.name,
                        },
                        temp_change=rel["degrees"] *
                        1 if causes_heating else -1,
                        limit={
                            "lower": ISystemEnvironment.get_ambient(),
                            "upper":
                            rel["pauseAt"] if causes_heating else None,
                        },
                    )

                    if updated:
                        logger.info("temperature sensor was updated to %s°",
                                    new_temp)

                time.sleep(rel["rate"])