Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# slack_reporter/app.py – med
|
| 2 |
import os
|
| 3 |
import time
|
| 4 |
import schedule
|
|
@@ -8,7 +8,7 @@ import requests
|
|
| 8 |
import logging
|
| 9 |
import re
|
| 10 |
from datetime import datetime, timedelta
|
| 11 |
-
from huggingface_hub import
|
| 12 |
import gradio as gr
|
| 13 |
|
| 14 |
# --- Loggning ---
|
|
@@ -23,6 +23,7 @@ REPO_ID = "ChargeNodeEurope/logfiles"
|
|
| 23 |
LOG_FILENAME = "logs/conversation_log.txt"
|
| 24 |
WEBHOOK_URL = os.environ.get("SLACK_WEBHOOK_URL")
|
| 25 |
HF_TOKEN = os.environ.get("HF_TOKEN")
|
|
|
|
| 26 |
|
| 27 |
# --- Funktion: Skapa grafer ---
|
| 28 |
def generate_graphs(df):
|
|
@@ -62,31 +63,18 @@ def generate_graphs(df):
|
|
| 62 |
|
| 63 |
return user_graph_path, hourly_graph_path
|
| 64 |
|
| 65 |
-
# --- Funktion: Ladda upp
|
| 66 |
-
def
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
api.upload_file(
|
| 78 |
-
path_or_fileobj=hourly_graph_path,
|
| 79 |
-
path_in_repo="graphs/hourly_msgs.png",
|
| 80 |
-
repo_id=REPO_ID,
|
| 81 |
-
repo_type="dataset",
|
| 82 |
-
token=HF_TOKEN
|
| 83 |
-
)
|
| 84 |
-
logging.info("Uploader lyckades: hourly_msgs.png")
|
| 85 |
-
|
| 86 |
-
return (
|
| 87 |
-
f"https://huggingface.co/datasets/{REPO_ID}/resolve/main/graphs/daily_users.png",
|
| 88 |
-
f"https://huggingface.co/datasets/{REPO_ID}/resolve/main/graphs/hourly_msgs.png"
|
| 89 |
-
)
|
| 90 |
|
| 91 |
# --- Funktion: Skicka Slack-meddelande ---
|
| 92 |
def send_to_slack(user_url, hourly_url):
|
|
@@ -151,7 +139,6 @@ def run_report():
|
|
| 151 |
logging.info("Loggfil läst som JSONL.")
|
| 152 |
except Exception as e:
|
| 153 |
logging.warning(f"Kunde inte läsa logg som JSONL: {e}")
|
| 154 |
-
logging.info("Försöker läsa som textlogg istället...")
|
| 155 |
df = parse_legacy_log(log_path)
|
| 156 |
|
| 157 |
if df.empty:
|
|
@@ -163,10 +150,14 @@ def run_report():
|
|
| 163 |
logging.warning("Grafer kunde inte skapas.")
|
| 164 |
return "⚠️ Inga data att rapportera."
|
| 165 |
|
| 166 |
-
user_url
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
|
| 171 |
except Exception as e:
|
| 172 |
logging.error(f"Fel vid körning: {e}", exc_info=True)
|
|
@@ -183,14 +174,20 @@ def run_schedule():
|
|
| 183 |
import threading
|
| 184 |
threading.Thread(target=run_schedule, daemon=True).start()
|
| 185 |
|
| 186 |
-
# --- Gradio
|
| 187 |
with gr.Blocks() as app:
|
| 188 |
gr.Markdown("# Slack Reporter - ChargeNode")
|
| 189 |
gr.Markdown("Tryck på knappen för att generera dagens rapport och posta till Slack.")
|
| 190 |
btn = gr.Button("Skicka nu")
|
| 191 |
output = gr.Textbox()
|
| 192 |
-
|
|
|
|
| 193 |
|
| 194 |
-
|
| 195 |
-
|
|
|
|
| 196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# slack_reporter/app.py – med Imgur och lokal visning av grafer
|
| 2 |
import os
|
| 3 |
import time
|
| 4 |
import schedule
|
|
|
|
| 8 |
import logging
|
| 9 |
import re
|
| 10 |
from datetime import datetime, timedelta
|
| 11 |
+
from huggingface_hub import hf_hub_download
|
| 12 |
import gradio as gr
|
| 13 |
|
| 14 |
# --- Loggning ---
|
|
|
|
| 23 |
LOG_FILENAME = "logs/conversation_log.txt"
|
| 24 |
WEBHOOK_URL = os.environ.get("SLACK_WEBHOOK_URL")
|
| 25 |
HF_TOKEN = os.environ.get("HF_TOKEN")
|
| 26 |
+
IMGUR_CLIENT_ID = os.environ.get("IMGUR_CLIENT_ID") # Du måste lägga till denna i dina Secrets
|
| 27 |
|
| 28 |
# --- Funktion: Skapa grafer ---
|
| 29 |
def generate_graphs(df):
|
|
|
|
| 63 |
|
| 64 |
return user_graph_path, hourly_graph_path
|
| 65 |
|
| 66 |
+
# --- Funktion: Ladda upp bilder till Imgur ---
|
| 67 |
+
def upload_to_imgur(image_path):
|
| 68 |
+
headers = {"Authorization": f"Client-ID {IMGUR_CLIENT_ID}"}
|
| 69 |
+
with open(image_path, 'rb') as img:
|
| 70 |
+
response = requests.post("https://api.imgur.com/3/image", headers=headers, files={"image": img})
|
| 71 |
+
if response.status_code == 200:
|
| 72 |
+
link = response.json()["data"]["link"]
|
| 73 |
+
logging.info(f"Imgur upload success: {link}")
|
| 74 |
+
return link
|
| 75 |
+
else:
|
| 76 |
+
logging.error(f"Imgur upload failed: {response.text}")
|
| 77 |
+
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
|
| 79 |
# --- Funktion: Skicka Slack-meddelande ---
|
| 80 |
def send_to_slack(user_url, hourly_url):
|
|
|
|
| 139 |
logging.info("Loggfil läst som JSONL.")
|
| 140 |
except Exception as e:
|
| 141 |
logging.warning(f"Kunde inte läsa logg som JSONL: {e}")
|
|
|
|
| 142 |
df = parse_legacy_log(log_path)
|
| 143 |
|
| 144 |
if df.empty:
|
|
|
|
| 150 |
logging.warning("Grafer kunde inte skapas.")
|
| 151 |
return "⚠️ Inga data att rapportera."
|
| 152 |
|
| 153 |
+
user_url = upload_to_imgur(user_graph)
|
| 154 |
+
hourly_url = upload_to_imgur(hourly_graph)
|
| 155 |
+
|
| 156 |
+
if user_url and hourly_url:
|
| 157 |
+
send_to_slack(user_url, hourly_url)
|
| 158 |
+
return "✅ Slack-meddelande skickat med grafer."
|
| 159 |
+
else:
|
| 160 |
+
return "⚠️ Kunde inte ladda upp grafer till Imgur."
|
| 161 |
|
| 162 |
except Exception as e:
|
| 163 |
logging.error(f"Fel vid körning: {e}", exc_info=True)
|
|
|
|
| 174 |
import threading
|
| 175 |
threading.Thread(target=run_schedule, daemon=True).start()
|
| 176 |
|
| 177 |
+
# --- Gradio UI ---
|
| 178 |
with gr.Blocks() as app:
|
| 179 |
gr.Markdown("# Slack Reporter - ChargeNode")
|
| 180 |
gr.Markdown("Tryck på knappen för att generera dagens rapport och posta till Slack.")
|
| 181 |
btn = gr.Button("Skicka nu")
|
| 182 |
output = gr.Textbox()
|
| 183 |
+
image1 = gr.Image(label="Unika användare (14 dagar)")
|
| 184 |
+
image2 = gr.Image(label="Meddelanden per timme (72h)")
|
| 185 |
|
| 186 |
+
def manual_run():
|
| 187 |
+
result = run_report()
|
| 188 |
+
return result, "daily_users.png", "hourly_msgs.png"
|
| 189 |
|
| 190 |
+
btn.click(fn=manual_run, outputs=[output, image1, image2])
|
| 191 |
+
|
| 192 |
+
if __name__ == "__main__":
|
| 193 |
+
app.launch()
|