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 }, )
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"])