#使用中のPCのシステムハードウェア関連情報の取得
#出典 https://chantastu.hatenablog.com/entry/2023/07/15/114657
#20240312 kabayonが上記出典から引用。出典元に感謝!
#■使用ライブラリの設定
import psutil
import datetime
#■CPU実装
# 物理コア数
n_core_ph = psutil.cpu_count(logical=False)
# 論理コア数(スレッド)
n_core_lg = psutil.cpu_count()
print("This PC has CPU with ",n_core_ph,"コア",n_core_lg,"スレッド")
#■CPU使用状況
#CPU使用率(intervalはCPU時間)
print("CPU使用率",psutil.cpu_percent(interval=1))
#個別CPUの使用率
print("個別CPUの使用率",psutil.cpu_percent(interval=1, percpu=True))
#CPU周波数(現在の周波数、最小周波数、最大周波数をMHzで表示)
print("CPU動作周波数/現在/min/max = ",psutil.cpu_freq())
#CPUの現在の周波数を取得
#print(psutil.cpu_freq().current)
#CPUの待ちタスク数
print("待ちタスク数",psutil.getloadavg())
#■メモリ情報
#システムメモリ使用統計値
print("システムメモリ使用統計値",psutil.virtual_memory())
#即使用可能メモリ
print("即使用可能メモリ",psutil.virtual_memory().available)
#total 物理メモリの合計
#available システムがスワップすることなく、プロセスに即座に与えることができるメモリ
#percent (total - available) / total * 100で計算された使用率
#used 使用されているメモリ
#free 全く利用されていない、すぐ利用できるメモリ
#active 現在使用中またはごく最近使用されたメモリ
#inactive 未使用としてマークされているメモリ
#buffers ファイル システムのメタデータなどのキャッシュ
#cached さまざまなもののためのキャッシュ
#shared 複数のプロセスが同時にアクセスできるメモリ
#lab カーネル内のデータ構造キャッシュ
#スワップメモリ使用統計値
print("スワップメモリ使用統計値",psutil.swap_memory())
#total バイト単位の合計スワップメモリ
#used 使用されたスワップメモリ (バイト単位)
#free 空きスワップメモリ (バイト単位)
#percent (total - available) / total * 100で計算された使用率
#sin システムがディスクからスワップインしたバイト数 (累積)
#sout システムがディスクからスワップアウトしたバイト数 (累積)
#■ディスク・パーティション情報
#マウント済パーティション
print("マウント済パーティション",psutil.disk_partitions())
#device デバイスのパス
#mountpoint マウント ポイントのパス
#free 空きスワップメモリ (バイト単位)
#fstype パーティションのファイルシステム
#opts ドライブ/パーティションのさまざまなマウントオプションを示すカンマ区切りの文字列
#maxfile ファイル名に指定できる最大長
#maxpath パス名 (ディレクトリ名 + ベースファイル名) の最大長
#指定パスを含むパーティションディスク使用統計値
print("ディスク使用統計値",psutil.disk_usage('/'))
#ディスク使用率
disk = psutil.disk_usage('/')
print("ディスク使用率",disk.percent)
#システム全体ディスクI/O統計値
print("ディスクI/O統計値",psutil.disk_io_counters())
#read_count 読み取り数
#write_count 書き込み回数
#read_bytes 読み取られたバイト数
#write_bytes 書き込まれたバイト数
#read_time ディスクからの読み取りに費やした時間 (ミリ秒単位)
#write_time ディスクへの書き込みにかかった時間 (ミリ秒単位)
#read_merged_count マージされた読み取りの数
#write_merged_count マージされた書き込みの数
#busy_time 実際の I/O に費やした時間 (ミリ秒単位)
#全物理ディスクI/O統計値
print("全物理ディスクI/O統計値",psutil.disk_io_counters(perdisk=True))
#■ネットワーク関連情報
#システム全体ソケット接続情報
print("ソケット接続情報",psutil.net_connections())
#fd ソケットファイル記述子
#family アドレスファミリ、AF_INET、AF_INET6またはAF_UNIXのいずれか。
#type アドレスのタイプ ( SOCK_STREAM、SOCK_DGRAM、または SOCK_SEQPACKET )。
#packets_recv 受信したパケット数
#laddr ローカルアドレス(ip, port)
#raddr リモートエンドポイントのアドレス(ip, port)
#status TCP接続のステータス。UDPおよびUNIXソケットの場合、NONE
#pid ソケットを開いたプロセスの PID
#システムインストールNICアドレス、キー
print("NICアドレス、キー",psutil.net_if_addrs())
#family MACアドレスを参照するアドレスファミリ (AF_INET、AF_INET6、psutil.AF_LINK) 。
#address NIC アドレス
#netmask サブネットマスク
#broadcast ブロードキャストアドレス
#ptp ポイントツーポイントを表す。VPN上の宛先アドレス。
#システム全体ネットワークI/O統計値
print("ネットワークI/O統計値",psutil.net_io_counters())
#bytes_sent 送信されたバイト数
#bytes_recv 受信したバイト数
#packets_sent 送信されたパケットの数
#packets_recv 受信したパケット数
#errin 受信中のエラーの総数
#errout 送信中のエラーの総数
#dropin ドロップされた受信パケットの総数
#dropout ドロップされた送信パケットの総数
#■システム接続ユーザー情報
#システム接続ユーザー
print("接続ユーザー",psutil.users())
#name ユーザーの名前
#terminal ユーザーに関連付けられたttyまたは疑似tty
#host エントリに関連付けられたホスト名
#starting UNIXエポックからの経過ミリ秒数での作成時刻
#pid ログインプロセスの PID
#■ハードウェア温度・ファン速度情報 not available on windows10
#ハードウェア温度(今回raspberry piで実施)
#print(psutil.sensors_temperatures())
# ファンの速度(RPM)
#print(psutil.sensors_fans())
#■システム起動日時
#システム起動日時
#print(psutil.boot_time()) # UNIX エポックからの経過ミリ秒数
print("システム起動日時",datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")) # 日時変換後