def main(is_user: bool = False): """ """ global LOG_WRITER if is_user: LOG_WRITER = LogWriter( ensure_existence(PROJECT_APP_PATH.user_log) / f"{PROJECT_NAME}_publisher.log" ) else: LOG_WRITER = LogWriter( ensure_existence(PROJECT_APP_PATH.site_log) / f"{PROJECT_NAME}_publisher.log" ) LOG_WRITER.open() client = mqtt.Client() client.on_publish = on_publish client.on_disconnect = on_disconnect HEIMDALLR_SETTINGS = HeimdallrSettings() # TODO input scope client.username_pw_set( HEIMDALLR_SETTINGS.mqtt_username, HEIMDALLR_SETTINGS.mqtt_password ) try: client.connect( HEIMDALLR_SETTINGS.mqtt_broker, HEIMDALLR_SETTINGS.mqtt_port, keepalive=60 ) except ValueError as ve: raise ValueError( f"{HEIMDALLR_SETTINGS._mqtt_settings_path}," f"{HEIMDALLR_SETTINGS.mqtt_broker}," f"{HEIMDALLR_SETTINGS.mqtt_port}," f"{ve}" ) client.loop_start() sensor_data = NOD({HOSTNAME: pull_gpu_info()}) next_reading = time.time() with IgnoreInterruptSignal(): print("Publisher started") for _ in busy_indicator(): sensor_data[HOSTNAME] = pull_gpu_info() s = sensor_data.as_dict() s = json.dumps(s) client.publish(ALL_CONSTANTS.MQTT_TOPIC, s, ALL_CONSTANTS.MQTT_QOS) next_reading += ALL_CONSTANTS.MQTT_PUBLISH_INTERVAL_SEC sleep_time = next_reading - time.time() if sleep_time > 0: time.sleep(sleep_time) # noinspection PyUnreachableCode LOG_WRITER.close() client.loop_stop() client.disconnect()
def pull_gpu_info(include_graphics_processes: bool = True) -> dict: """Get all information about all your graphics cards. Returns: dict: The returned result is a dict with 3 keys: count, driver_version and devices: count: Number of gpus found driver_version: The version of the system’s graphics driver devices: It's a list and every item is a namedtuple Device which has 10 fields, for exzample id, name and fan_speed etc. It should be noted that the Process field is also a namedtuple which has 11 fields.""" driver_version, devices = get_nv_info(include_graphics_processes) info = NOD() info["count"] = len(devices) info["driver_version"] = driver_version info["devices"] = devices return info.as_dict()