以下のように表示されます。 #!/usr/bin/env python3.5 psutilをインポートする mysql.connectorをインポートする argparseをインポートする jsonをインポート 日時をインポート def get_cpu_info(詳細): CPU情報={} 詳細度 >0 の場合: print("[cpu] CPU情報の収集を開始します...") データ = psutil.cpu_times_percent(3) cpu_info['ユーザー'] = データ[0] cpu_info['システム']=データ[2] cpu_info['アイドル']=データ[3] cpu_info['iowait']=データ[4] cpu_info['hardirq']=データ[5] cpu_info['softirq']=データ[6] cpu_info['cpu_cores'] = psutil.cpu_count() 詳細度 >0 の場合: print("{0}".format(json.dumps(cpu_info,ensure_ascii=False,indent=4))) print("[cpu] コレクションが完了しました...") cpu_infoを返す def get_mem_info(詳細): メモリ情報={} 詳細度 >0 の場合: print("[mem] メモリ情報の収集を開始します...") データ = psutil.virtual_memory() mem_info['total'] = データ[0]/1024/1024/1024 mem_info['変数']=データ[1]/1024/1024/1024 詳細>0の場合: print("{0}".format(json.dumps(mem_info,ensure_ascii=False,indent=4))) print("[mem] コレクションが完了しました...") mem_infoを返す def get_disk_info(詳細): ディスク情報={} 詳細度 >0 の場合: print("[ディスク] ディスク情報の収集を開始します...") パーティション = psutil.disk_partitions() パーティション=[(パーティション[1],パーティション[2])パーティション内のパーティションの場合、パーティション[2]!='iso9660'の場合] ディスク情報={} パーティション内のパーティションの場合: ディスク情報[パーティション[0]]={} disk_info[パーティション[0]]['fstype']=パーティション[1] disk_info.keys() の mount_point の場合: データ = psutil.disk_usage(マウントポイント) disk_info[マウントポイント]['合計']=データ[0]/1024/1024/1024 disk_info[マウントポイント]['使用率']=データ[3] 詳細度 >0 の場合: print("{0}".format(json.dumps(disk_info,ensure_ascii=False,indent=4))) print("[ディスク] コレクションが完了しました....") ディスク情報を返す def get_mysql_info(cnx_args, status_list): 設定={ 'ユーザー':cnx_args.ユーザー、 'パスワード':cnx_args.パスワード、 'ホスト':cnx_args.ホスト、 'ポート':cnx_args.ポート} cnx=なし カーソル=なし mysql_info={} 試す: cnx = mysql.connector.connect(**config) カーソル = cnx.cursor(準備済み = True) 範囲(len(status_list))内のインデックスの場合: status_list[インデックス].get_status(カーソル) ステータス=ステータスリスト[インデックス] mysql_info[ステータス名]=ステータス値 mysql_info['ポート'] = config['ポート'] mysql.connector.Error を err として除く: 印刷(エラー) ついに: カーソル!= Noneの場合: カーソルを閉じる() cnx != None の場合: cnx.close() mysql_infoを返す クラス Status(オブジェクト): def __init__(自分自身、名前): 自己.name = 名前 self._value=なし def get_status(self, カーソル): stmt="'{0}' のようなグローバル ステータスを表示します。"format(self.name) カーソル.execute(stmt) 値 = cursor.fetchone()[1].decode('utf8') self._value = int(値) @財産 定義値(自己): self._value==Noneの場合: 例外が発生します("get_status 関数を実行する前に値を取得できません") それ以外: self._value を返す IntStatus=ステータス クラス diskResource(オブジェクト): def __init__(self, マウントポイント, ステータス): self.mount_point=マウントポイント self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="stage-list"> <div class="stage-title"><span>{0}</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">フォーマットを区別する</span> <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">合計スペースサイズ</span> {2:8.2f}G </p> <p class="詳細リスト"> <span class="detail-title">空き容量 (%)</span> {3:8.2f} </p> <p class="詳細リスト"> </p> </div> </div>\n'''.format(self.mount_point,self.status['fstype'],self.status['total'],self.status['used_percent']) 結果を返す クラス diskResources(オブジェクト): def __init__(自分自身、ステータス): 自己ディスク = [] status.keys() の mount_point の場合: self.disks.append(ディスクリソース(マウントポイント、ステータス[マウントポイント])) __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>ディスク</span> </div> <div class="second-stage">\n''' 範囲(len(self.disks))内のインデックスの場合: 結果 = 結果 + self.disks[index].__str__() 結果=結果+''' </div> </div>\n''' 結果を返す クラス cpuResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>CPU</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>グローバル</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">ユーザースペースの使用率 (%)</span> <span class="detail-describe">{0}</span> </p> <p class="詳細リスト"> <span class="detail-title">カーネルスペースの使用率 (%)</span> <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">アイドル (%)</span> <span class="detail-describe">{2}</span> </p> <p class="詳細リスト"> <span class="detail-title">ハード割り込み (%)</span> <span class="detail-describe">{3}</span> </p> <p class="詳細リスト"> <span class="detail-title">ソフト割り込み (%)</span> <span class="detail-describe">{4}</span> </p> <p class="詳細リスト"> <span class="detail-title">io 待機時間 (%)</span> {5} </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>\n'''.format(self.status['user'],self.status['system'],self.status['idle'],self.status['hardirq'],self.status['softirq'],self.status['iowait']) 結果を返す クラス memResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>メモリ</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>グローバル</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">合計サイズ</span> {0:8.2f}G </p> <p class="詳細リスト"> <span class="detail-title">フリーサイズ</span> {1:8.2f}G </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>'''.format(self.status['total'],self.status['avariable']) 結果を返す クラスmysqlResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>MySQL</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>{0}</span></div> <div class="詳細"> <p class="詳細リスト"> ログ待機 <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">binlog_cache_use</span> <span class="detail-describe">{2}</span> </p> <p class="詳細リスト"> <span class="detail-title">temp_disk_table を作成します</span> <span class="detail-describe">{3}</span> </p> <p class="詳細リスト"> <span class="detail-title">遅いクエリ</span> <span class="detail-describe">{4}</span> </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>'''.format(self.status['port'],self.status['Innodb_log_waits'],self.status['Binlog_cache_use'], self.status['Created_tmp_disk_tables']、self.status['Slow_queries']) 結果を返す クラスhostResources(オブジェクト): def __init__(self,cpu_info,mem_info,disk_info,mysql_info,report_title='MySQL 検査レポート'): self.cpu = cpuResources(cpu_info) 自己.mem = memResources(mem_info) self.disk = ディスクリソース(disk_info) self.mysql = mysqlResources(mysql_info) self.report_title = レポートタイトル __str__(自分)を定義します: 結果='''<!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <title>検査報告書</title> <スタイル> *{ マージン: 0; パディング: 0; } 。コンテンツ{ 幅:1000ピクセル; 高さ: 自動; マージン: 30px 自動; ボーダー下部:1px 実線 #b2b2b2; } .リスト項目{ 境界線:1px 実線 #b2b2b2; 下部境界線: なし; 移行: すべて .35; オーバーフロー: 非表示; ディスプレイ: フレックス; } .リスト項目:空{ 表示: なし; } .トップタイトル{ 行の高さ: 32px; フォントサイズ: 16px; 色: #333; テキストインデント: 10px; フォントの太さ: 600; } 。カテゴリ{ 幅:97px; 高さ: 自動; 右境界線: 1px 実線 #b2b2b2; フロート: 左; テキスト配置: 中央; 位置: 相対的; } .stage-title>スパン、 .カテゴリ>span{ 表示: ブロック; 高さ: 20px; 幅:100%; テキスト配置: 中央; 行の高さ: 20px; 位置: 絶対; 上位: 50%; 上マージン: -10px;左: 0; } .第2段階{ 幅:900ピクセル; フロート: 左; } .ステージリスト{ 下境界線: 1px 実線 #b2b2b2; ディスプレイ: フレックス; } .ステージリスト:最後の子{ 下境界線: 0; } .ステージタイトル{ 幅:99px; 右境界線: 1px 実線 #b2b2b2; 位置: 相対的; } 。詳細{ フレックス: 1; } .詳細リスト{ 下境界線: 1px 実線 #b2b2b2; 高さ: 40px; ディスプレイ: フレックス; 移行: すべて .35; } .詳細タイトル{ パディング: 10px; 高さ: 20px; 行の高さ: 20px; 右境界線: 1px 実線 #b2b2b2; 幅:200px; } .詳細説明{ フレックス: 1; パディング: 10px;行の高さ: 20px; } .詳細リスト:最後の子{ 下境界線: 0; } .list-item:hover{ 背景色: #eee; } .detail-list:hover{ 背景色: #d1d1d1; } </スタイル> </head> <本文> <div class="content"> <div class="リスト項目"> <p class="top-title">レポートタイトル</p> </div>\n''' 結果 = result.replace('report_title', self.report_title) 結果 = 結果 + self.cpu.__str__() 結果 = 結果 + self.mem.__str__() 結果 = 結果 + self.disk.__str__() 結果 = 結果 + self.mysql.__str__() 結果=結果+''' </div> </本文> </html>''' 結果を返す __name__=="__main__"の場合: パーサー = argparse.ArgumentParser() parser.add_argument('--verbose',type=int,default=1,help='出力の詳細') parser.add_argument('--user',default='chkuser',help='mysqlに接続するためのユーザー名') parser.add_argument('--password',default='123456',help='mysql に接続するためのユーザーパスワード') parser.add_argument('--host',default='127.0.0.1',help='mysql ホスト IP') parser.add_argument('--port'、デフォルト=3306、タイプ=int、ヘルプ='mysql ポート') parser.add_argument('--int-status',default=('Com_select,Com_insert,Com_update,Com_delete,Innodb_log_waits,' 'Binlog_cache_disk_use、Binlog_cache_use、作成されたtmp_disk_tables、' 'Slow_queries') 、help = 'mysql ステータスの値は int のように') parser.add_argument('--report-title',default='MySQL 検査レポート',help='レポートのタイトル') parser.add_argument('--output-dir',default='/tmp/',help='デフォルトのレポートファイル出力パス') 引数 = パーサー.parse_args() cpu_info = get_cpu_info(args.verbose) mem_info = get_mem_info(args.verbose) disk_info = get_disk_info(args.verbose) status_list=[IntStatus(name=item) args.int_status.split(',')] 内のアイテム mysql_info = get_mysql_info(引数、ステータスリスト) #dr=ディスクリソース(ディスク情報) #cr=cpuリソース(cpu_info) #mr=memResources(mem_info) #msr=mysqlリソース(mysql_info) hr = ホストリソース(cpu_info、mem_info、disk_info、mysql_info、args.report_title) now = str(datetime.datetime.now()).replace(' ','^') args.output_dir.endswith('/') != True の場合: args.output_dir = args.output_dir + '/' ファイル名=args.output_dir+'mysql_inspection_{0}.html'.format(現在) 出力としてopen(filename,'w')を使用します: 出力を書き込みます(hr.__str__()) print('[レポート] レポートが {0} に保存されました。OK.... ....'.format(filename)) 上記のMySQL検査スクリプト(必読)は、編集者が皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。 |
>>: サブメニューをクリックする効果を実現するJavaScript
CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...
序文私が使用しているパソコンはMacで、OSはmacOS Mojaveです。コンピュータに仮想マシン...
効果画像: 実装コード: <テンプレート> <div id="map&q...
目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...
Nginx は、わずか数年で Web サーバー市場の大部分を占めるようになりました。周知のとおり、N...
<iframe src=”test.jsp” width=”100″ height=”50″ ...
ハイパーリンク <a> タグはリンク ポイントを表します。これは英語の単語「anchor...
目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...
画像リンク <img src="" /> jsを使用してURLが有効...
目次概要問題の説明循環リンクリスト順序付き配列数学的再帰要約する概要ジョセフ・リング問題は、ジョセフ...
背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...
目次1. 簡単な紹介2. 間隔を設定する2.1 説明2.2 パラメータ2.3 戻り値2.4 使用法3...
1. left(name,4)は左の4文字をインターセプトしますリスト: SELECT LEFT(2...
img 要素を使用すると、HTML ドキュメントに画像を埋め込むことができます。画像を埋め込むには、...
目次1. プロキシとは何ですか? 2. 使い方は? 1. プロキシを使用する簡単な例2. 対象オブジ...