iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

1. 準備工具
今天需要的工具有三個:

| 工具                              | 用途              |
| ------------------------------- | --------------- |
| **Grafana API**                 | 取得 Dashboard 畫面 |
| **Python (requests + smtplib)** | 抓圖與寄信           |
| **Cron / Task Scheduler**       | 定期執行自動化任務       |

請先確認你有安裝以下套件:

pip install requests smtplib pillow

2. 用 Grafana API 擷取報告畫面
Grafana 提供 REST API 可將 Dashboard 匯出成圖片或 PDF。
你可以在 Grafana 的設定裡建立 API Token:

(1) 登入 Grafana
(2) 點選左下角 ⚙️ → 「API Keys」
(3) 建立新金鑰
● Name:report-bot
● Role:Viewer
● 有效期限:30 天
(4) 複製 Token(記得妥善保存!)

Python 程式:下載病人報告圖像

import requests

GRAFANA_URL = "http://localhost:3000"
API_KEY = "你的_API_KEY"
DASHBOARD_UID = "你的_dashboard_uid"  # 在 URL 裡可以看到
PATIENT_ID = "001"

# 取得 Grafana 圖片 (PNG)
render_url = f"{GRAFANA_URL}/render/d-solo/{DASHBOARD_UID}/patient-report"
params = {
    "orgId": 1,
    "var-patient_id": PATIENT_ID,
    "panelId": 1,  # 要截哪一個 panel (可以改)
    "width": 1600,
    "height": 900,
    "tz": "Asia/Taipei"
}

headers = {"Authorization": f"Bearer {API_KEY}"}

response = requests.get(render_url, headers=headers, params=params)

with open(f"report_{PATIENT_ID}.png", "wb") as f:
    f.write(response.content)

print("病人報告圖片已生成!")

這樣就能擷取你在 Grafana 上的病人報告畫面。

3. 用 Python 自動寄送報告
接下來我們用 smtplib 將報告寄給醫師或病人。
(你可以使用 Gmail、Outlook 或企業信箱)

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

sender_email = "your_email@gmail.com"
receiver_email = "doctor@hospital.org"
password = "你的應用程式密碼"

msg = MIMEMultipart("related")
msg["Subject"] = "📄 病人健康報告 - AFP/ALT 最新分析"
msg["From"] = sender_email
msg["To"] = receiver_email

# 郵件內文
text = MIMEText("""
您好,

附上本週病人健康報告摘要:
- 病人 ID:001
- AFP 趨勢:上升中 🔴
- ALT 趨勢:穩定 🟡

請參考附加圖檔以了解詳細趨勢。

此報告由癌症健康監測平台自動產生。
""", "plain", "utf-8")

msg.attach(text)

# 加入報告圖片附件
with open("report_001.png", "rb") as f:
    img = MIMEImage(f.read())
    img.add_header("Content-Disposition", "attachment", filename="report_001.png")
    msg.attach(img)

# 寄信
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
    server.login(sender_email, password)
    server.send_message(msg)

print("報告已寄出!")

4. 自動化排程
最後一步:讓這段 Python 程式自動每天執行一次。
在 macOS / Linux:
執行:

crontab -e

加入排程(每天早上 8 點執行):

0 8 * * * /usr/bin/python3 /path/to/send_report.py

在 Windows:
(1) 開啟「排程工作程式 (Task Scheduler)」
(2) 建立新任務
(3) 觸發條件:每日 08:00
(4) 動作:執行 Python,參數為你的腳本位置

5. 成果展示
完成後,整個系統自動運作如下:

[AI 模型更新資料] 
     ↓
[Grafana 自動刷新]
     ↓
[Python 擷取報告圖]
     ↓
[Email 自動寄送醫師]
     ↓
[每日 08:00 自動完成 ]

● 自動產生報告
● 自動通知醫療人員
● 完全不需人工操作


上一篇
建立「癌症病人健康報告」頁面
系列文
用 Grafana 打造癌症資料視覺化平台:從資料清洗到AI預測呈現26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言