prometheusデータ生成レポートdocxへ出力
3302 ワード
1.環境依存
まず
筆者python 2.7.15の環境、requirements.txtは以下の通りである.
2.docxの構造を理解する
2つの記事をお勧めします. https://www.cnblogs.com/zhanghongfeng/p/7043412.html https://blog.csdn.net/qwe125698420/article/details/70622289?locationNum=3&fps=1
docxはxmlと密接な関係があることが分かったので、xmlをテンプレートとして、最後にxmlからdocxファイルに変換しました.
3.マイテンプレート
docxファイルを使用してテンプレートを作成しxmlファイルとして保存
4.prometheusデータの取得
Prometheusが提供するhttpクエリー方式を使用して、分析対象のデータのセットを取得します.
4.データ製図
pyechartsを使用してprometheusから取得したデータをシティグラフィックに作成し、適切なグラフィックを選択して自分のデータを表現します.ここでは、円グラフを使用して「リンク遅延レベル分布」を表現します.
5.ピクチャ情報ストリームの生成
画像をbytesで読み取り、base 64を使用して暗号化します.
6.画像をテンプレートに入れる
前回生成したピクチャ情報ストリームをテンプレートに入れる難点は符号化問題である.Pythonを知っている人はpython 2のコードの問題を知っていて、出会ったことがある人はほとんど血を吐いています.
6.レポートの完了
上で生成したxmlファイルをdocx形式として保存すればよい
まず
npm install -g phantomjs-prebuilt
筆者python 2.7.15の環境、requirements.txtは以下の通りである.
jinja2>=2.8
future
lml>=0.0.2
jupyter-echarts-pypkg>=0.1.1
pyecharts-javascripthon
pyecharts-snapshot==0.1.10 # > 0.1.10 python 3+
pyecharts==0.5.10 # pyecharts v1 python 3.6+
2.docxの構造を理解する
2つの記事をお勧めします.
docxはxmlと密接な関係があることが分かったので、xmlをテンプレートとして、最後にxmlからdocxファイルに変換しました.
3.マイテンプレート
docxファイルを使用してテンプレートを作成しxmlファイルとして保存
4.prometheusデータの取得
Prometheusが提供するhttpクエリー方式を使用して、分析対象のデータのセットを取得します.
def get_prom_data():
url = ("http://{host}:{port}/api/v1/query_range?query=ping_delay&start={start_time}&end={end_time}&step=14")
end_time = time.time()
start_time = end_time - 3600 # 1
qyery_url = url.format(host="xx", port="xx", peer="xx", source="xx",
start_time=start_time, end_time=end_time)
status_url = qyery_url.replace("", "}")
data = {}
rsp = do_request(status_url)
if rsp.get("status", "") == "success" and rsp.get("data", {}).get("result", []):
data = rsp["data"]["result"][0]["values"]
if not data:
raise Exception("prometheus data not found"
return data
4.データ製図
pyechartsを使用してprometheusから取得したデータをシティグラフィックに作成し、適切なグラフィックを選択して自分のデータを表現します.ここでは、円グラフを使用して「リンク遅延レベル分布」を表現します.
from pyecharts import Bar, Pie, Grid, Line, Overlap
def create_a_pic():
prom_data = get_prom_data()
attr = [" ", " ", " ", " "]
good, nomal, warn, cri = parse_data(prom_data)
pie = Pie(" ")
pie.add("delay", attr, [good, nomal, warn, cri], is_random=True, radius=[30, 75])
pie.render(path="test.png")
5.ピクチャ情報ストリームの生成
画像をbytesで読み取り、base 64を使用して暗号化します.
def get_encoded_pic(path):
"""
:param path:
:return:
"""
if not os.path.exists(path):
raise Exception("{} not exists".format(path))
with open(path, "rb") as f:
data = base64.standard_b64encode(f.read())
return data
6.画像をテンプレートに入れる
前回生成したピクチャ情報ストリームをテンプレートに入れる難点は符号化問題である.Pythonを知っている人はpython 2のコードの問題を知っていて、出会ったことがある人はほとんど血を吐いています.
def writeback_xml(data):
"""
data bytes ,
data.decode("utf-8") bytes unicode,
render str , f.write() unicode ,
encode("utf-8")
:param data:
:return:
"""
env = Environment(loader=FileSystemLoader(PWD))
template = env.get_template("test.xml")
with open(NEW_XML_PATH, "wb") as f:
f.write(template.render(pic=data.decode("utf-8")).encode("utf-8"))
6.レポートの完了
上で生成したxmlファイルをdocx形式として保存すればよい