pythonの勉強中で、作りたいものが無いためとりあえず
CPU使用率、memory使用率を取得しDBへ保存するプログラムを作成してみました。
目的
- DBの学習
- sqlalchemyの使い方
Package Version
------------------------- -----------
altair 5.3.0
pip 24.0
psutil 6.0.0
pytz 2024.1
SQLAlchemy 2.0.31
streamlit 1.36.0
moniter.py
# pip install psutil
# pip install sqlalchemy
# pip install pytz
import psutil
import datetime
import pytz
import time
import os
from sqlalchemy import create_engine, Column, Integer, Float, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Moniter(Base):
__tablename__ = 'moniter'
id = Column(Integer, primary_key=True, autoincrement=True)
# timestamp = Column(DateTime, default=datetime.datetime.now(pytz.timezone('Asia/Tokyo')))
timestamp = Column(DateTime, default=lambda: datetime.datetime.now(pytz.timezone('Asia/Tokyo')).replace(microsecond=0))
usage_percent = Column(Float)
memory_usage = Column(Float)
def __repr__(self):
return f"Moniter(id={self.id}, timestamp={self.timestamp}, usage_percent={self.usage_percent}, memory_usage={self.memory_usage})"
# データベースファイルのパス
db_path = 'sqlite:///moniter.db'
# データベースファイルが存在しない場合のみ新しいデータベースを作成
if not os.path.exists('moniter.db'):
# log無効
engine = create_engine(db_path, echo=False)
Base.metadata.create_all(engine)
else:
engine = create_engine(db_path, echo=False)
Session = sessionmaker(bind=engine)
session = Session()
try:
while True:
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
print(f"CPU Usage: {cpu_usage}%")
print(f"Memory Usage: {memory_usage}%")
print("-----------------")
session.add(Moniter(usage_percent=cpu_usage, memory_usage=memory_usage))
session.commit()
time.sleep(60)
except KeyboardInterrupt:
print("プログラムを終了します。")
finally:
session.close()