diff --git a/n8n/configmaps.yaml b/n8n/configmaps.yaml new file mode 100644 index 0000000..6389134 --- /dev/null +++ b/n8n/configmaps.yaml @@ -0,0 +1,58 @@ +apiVersion: v1 +data: + summary.py: "#!/usr/bin/env python3\nimport requests\nimport sys\nfrom datetime\ + \ import datetime, timedelta\n\nAPI_KEY = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMTMwZDE0MS00MDU0LTQwZmEtODhkNi1lZjQ0NWM0YzlkMjIiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwianRpIjoiNTg2N2RjODktNTNkNy00MmEzLTk2NjktZGI4YzViYWY3YTkxIiwiaWF0IjoxNzczMTY1ODgyfQ.cLZTEex_W5idjYxSu8u7UxYK_xHDND_-Ldxd-2yM9VM\"\ + \nN8N_URL = \"http://n8n-service.n8n.svc.cluster.local:5678/api/v1\"\nTELEGRAM_BOT_TOKEN\ + \ = \"8611913802:AAFlrFtc0vYISOliO_W8B4c-W1ue0hG9Fio\"\nCHAT_ID = \"5138407666\"\ + \n\nWORKFLOW_NAMES = {\n 'FlPdQPfb3rHlsI0-7MKu7': 'Real Madrid RSS -> Twitter',\n\ + \ 'JZTwKS4Klj96elzO': 'Tweets Reply V2',\n 'df95uRUbi40dAes9': 'Quote Tweet\ + \ Bot',\n 'X0kzp6DUkJONjKUy': 'Real Madrid Efem\xE9rides',\n '9e5aD80l3ADmZrmWRyqBI':\ + \ 'Auto Follow & Engagement'\n}\n\ndef get_last_monday_00():\n today = datetime.utcnow()\n\ + \ days_since_monday = (today.weekday() - 0) % 7\n if days_since_monday ==\ + \ 0:\n days_since_monday = 7\n last_monday = today - timedelta(days=days_since_monday)\n\ + \ return last_monday.replace(hour=0, minute=0, second=0, microsecond=0)\n\n\ + def get_last_sunday_2359():\n last_monday = get_last_monday_00()\n return\ + \ last_monday + timedelta(days=6, hours=23, minutes=59, seconds=59)\n\ndef count_followers_gained(week_start,\ + \ week_end):\n try:\n resp = requests.get(f\"{N8N_URL}/executions?status=success&limit=100\"\ + , headers={\"X-N8N-API-KEY\": API_KEY}, timeout=10)\n resp.raise_for_status()\n\ + \ data = resp.json()\n ws, we = week_start.isoformat()+'Z', week_end.isoformat()+'Z'\n\ + \ return sum(1 for e in data.get('data',[]) if e.get('workflowId')=='9e5aD80l3ADmZrmWRyqBI'\ + \ and ws<=e.get('startedAt','')<=we)\n except:\n return 0\n\ndef count_tweets_published(week_start,\ + \ week_end):\n try:\n resp = requests.get(f\"{N8N_URL}/executions?status=success&limit=100\"\ + , headers={\"X-N8N-API-KEY\": API_KEY}, timeout=10)\n resp.raise_for_status()\n\ + \ data = resp.json()\n ws, we = week_start.isoformat()+'Z', week_end.isoformat()+'Z'\n\ + \ return sum(1 for e in data.get('data',[]) if e.get('workflowId')=='FlPdQPfb3rHlsI0-7MKu7'\ + \ and ws<=e.get('startedAt','')<=we)\n except:\n return 0\n\ndef count_total_errors(week_start,\ + \ week_end):\n try:\n resp = requests.get(f\"{N8N_URL}/executions?status=error&limit=100\"\ + , headers={\"X-N8N-API-KEY\": API_KEY}, timeout=10)\n resp.raise_for_status()\n\ + \ data = resp.json()\n ws, we = week_start.isoformat()+'Z', week_end.isoformat()+'Z'\n\ + \ return sum(1 for e in data.get('data',[]) if ws<=e.get('startedAt','')<=we)\n\ + \ except:\n return 0\n\ndef find_problematic_workflow(week_start, week_end):\n\ + \ try:\n resp = requests.get(f\"{N8N_URL}/executions?status=error&limit=100\"\ + , headers={\"X-N8N-API-KEY\": API_KEY}, timeout=10)\n resp.raise_for_status()\n\ + \ data = resp.json()\n ws, we = week_start.isoformat()+'Z', week_end.isoformat()+'Z'\n\ + \ wf_errors = {}\n for e in data.get('data',[]):\n if\ + \ ws<=e.get('startedAt','')<=we:\n wid = e.get('workflowId','unknown')\n\ + \ wf_errors[wid] = wf_errors.get(wid,0)+1\n if not wf_errors:\n\ + \ return \"Ninguno\", 0\n best = max(wf_errors.items(), key=lambda\ + \ x: x[1])\n return WORKFLOW_NAMES.get(best[0], best[0][:20]), best[1]\n\ + \ except:\n return \"Unknown\", 0\n\ndef send_telegram(message):\n \ + \ try:\n resp = requests.post(f\"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage\"\ + , json={\"chat_id\": CHAT_ID, \"text\": message, \"parse_mode\": \"HTML\"}, timeout=10)\n\ + \ resp.raise_for_status()\n return True\n except:\n return\ + \ False\n\ndef main():\n week_start = get_last_monday_00()\n week_end =\ + \ get_last_sunday_2359()\n display_week = f\"{week_start.strftime('%d/%m')}\ + \ - {week_end.strftime('%d/%m')}\"\n followers = count_followers_gained(week_start,\ + \ week_end)\n tweets = count_tweets_published(week_start, week_end)\n errors\ + \ = count_total_errors(week_start, week_end)\n wf_name, wf_errors = find_problematic_workflow(week_start,\ + \ week_end)\n message = f\"\"\"\U0001F4CA Resumen semanal ({display_week})\n\ + \n\u2705 Seguidores ganados: {followers}\n\U0001F4DD Tweets publicados:\ + \ {tweets}\n\u26A0\uFE0F Errores: {errors}\n\U0001F534\ + \ Workflow m\xE1s problem\xE1tico: {wf_name} ({wf_errors}\ + \ fallos)\"\"\"\n sys.exit(0 if send_telegram(message) else 1)\n\nif __name__\ + \ == \"__main__\":\n main()\n" +kind: ConfigMap +metadata: + name: weekly-summary-script + namespace: n8n +