From personal-assistant
Diji b2c basket'inin tum yasam dongusunu prod loglarindan cikarir, sorunu raporlar.
How this skill is triggered — by the user, by Claude, or both
Slash command
/personal-assistant:diji-log-searchWhen to use
Trigger — "su hata alindi son loglara bak", "bu hata mesajini arastir", "<ref> sepetini incele", "basket lifecycle", "odeme neden basarisiz", "provider loglari", "/diji-log-search". Hata mesaji/ekran goruntusu verilince find modu ilgili basket'i bulur. Diji tabanli b2c Django projelerde (CLAUDE.local.md'de prod SSH/path tanimli) AppLog/basket log analizi gerektiginde.
referencemodeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Bir diji-tabanli b2c Django projesinde (b2c travel platformlari) bir **basket reference**'in
Bir diji-tabanli b2c Django projesinde (b2c travel platformlari) bir basket reference'in
tum yasam dongusunu prod AppLog tablosundan cikarir, ozetler ve sorunu teshis eder.
Kullanici ref vermeden "su hata, son loglara bak" derse, ilgili islemi kendisi bulur.
Marka/proje adi kullanma: Cikti ve kodda proje markasi (sirket/urun adi) GECMEZ. Domain bilgisi her zaman calisilan projenin
CLAUDE.local.md'sinden okunur — hardcode etme.
scripts/diji_log_search.py icinde. Inline manage.py shell -c quoting
$ ^ ~ ve girinti yuzunden kirilgan → script scp edilir, manage.py shell < dosya ile calisir.Calisilan projenin CLAUDE.local.md'sindeki "Sunucu Ortamlari" tablosundan al:
ssh -i ~/.ssh/<key>.pem ubuntu@<ip>).../server ust dizini — manage.py'nin oldugu yer)AskUserQuestion ile ortami teyit et (Production/Stage/Dev) — yanlis ortamda log aramak bos doner.
venv her zaman .venv/bin/python.
| Kullanici ne der | BL_MODE | gerekli env |
|---|---|---|
| " sepetini incele", "yasam dongusu" | lifecycle | BL_REF |
| "provider/tedarikci loglari", "paximum request" | provider | BL_REF |
| "odeme loglari", "3D neden basarisiz" | payment | BL_REF |
| "ham loglar", "her seyi dok" | raw | BL_REF |
| "su hata mesaji geldi" / ekran goruntusu (ref YOK) | find | BL_QUERY |
| "son loglarda genel hata var mi" (ref YOK) | diagnose | — |
Kullanici bir hata mesaji (ekran goruntusu/metin) veya hata kodu (COMxxx) verdiginde:
grep -rn "<TR metin>" locale/*/LC_MESSAGES/*.po veya
core/messages/messages.py ile bul (msgid). find modu hem TR metni hem kodu hem data kolonunu arar.BL_MODE=find BL_QUERY='<mesaj veya COMxxx>' calistir. Kod verilirse otomatik Ingilizce
metnine cozulup onunla da aranir; eslesen basket reference'lari listelenir.BL_MODE=lifecycle BL_REF=<ref> ile incele.Bu, "mesaj → kod → basket → trace" zincirini tek komuta indirir (elle script yazma).
Kurallar:
BL_DAYS=2 (dun+bugun).
Daha geriye: BL_DAYS=<n>. "Son X dk" istenirse BL_SCOPE=since BL_SINCE_MIN=<dk>./otel/odeme/o-4972/... → otel, offer id;
ama o-4972 basket reference DEGIL — UserBookingBasket PK'si reference alanidir).Marka adi (ekrandaki logo) ortami BELIRLEMEZ — dev/stage de ayni markayi gosterir. "API'den gelen ... sayfasi", "test", staging URL gibi ipuclari non-prod sinyalidir. find/diagnose bir ortamda 0 donduyse:
BL_LOG_DIR set edip tekrar calistir (ayni SSH host, farkli dizin):# Ayni sunucuda 3 ortam — her birinin server/logs'unu BL_LOG_DIR ile dene
for ENVDIR in \
/home/ubuntu/git/production/<prod-dir> \
/home/ubuntu/git/dev/<dev-dir> \
/home/ubuntu/git/dev/<stage-dir>; do
$SSH "cd $ENVDIR && BL_MODE=find BL_QUERY='<kod/mesaj>' BL_DAYS=3 \
BL_LOG_DIR=$ENVDIR/server/logs .venv/bin/python manage.py shell < /tmp/diji_log_search.py 2>/dev/null \
| grep -E 'eslesen|ham CSV|basket ref|Incele'"
done
$SSH 'grep -rl -F \"<KOD>\" /home/ubuntu/git/*/*/server/logs 2>/dev/null' →
hangi ortamda gectigini gosterir, sonra o ortamda lifecycle calistir.# Degiskenleri CLAUDE.local.md'den doldur:
SSH="ssh -i ~/.ssh/<key>.pem ubuntu@<ip>"
SCP="scp -i ~/.ssh/<key>.pem"
PROD="/home/ubuntu/git/<env>/<dir>" # manage.py dizini
REF="<basket-ref>"; MODE="lifecycle" # veya diagnose (REF bos)
$SCP -o StrictHostKeyChecking=no \
"$CLAUDE_PLUGIN_ROOT/skills/diji-log-search/scripts/diji_log_search.py" \
ubuntu@<ip>:/tmp/diji_log_search.py
OUT="/tmp/diji_${REF:-diagnose}_${MODE}.txt"
$SSH -o StrictHostKeyChecking=no \
"cd $PROD && BL_REF='$REF' BL_MODE='$MODE' .venv/bin/python manage.py shell < /tmp/diji_log_search.py 2>/dev/null" \
> "$OUT"
Uzun surebilir →
run_in_background: trueile calistir,task-notificationbekle. Cikti BUYUK olabilir (raw/provider) →wc -l+headile kontrol et, tamamini Read etme.
Script ciktisinin basinda # LOGREADER SAGLIK KONTROLU blogu var. Kontrol et:
LogReaderTask tetiklemeyi oner
(async_to_sync(LogReaderTask().task)() ya da basket detay sayfasini acmak import'u tetikler).Loglar okunmadiysa arastirma zor/eksik olur — once bunu cozmeden sonuca varma.
lifecycle modunda ikinci kez incele, kok nedeni acikla./tmp/...txt) ve ozet istatistigini ver;
kullanici isterse ilgili bolumu Read ile ac.| Var | Anlam | Default |
|---|---|---|
BL_REF | basket reference | (find/diagnose'da bos) |
BL_MODE | lifecycle|provider|payment|raw|find|diagnose | lifecycle |
BL_QUERY | find modu: hata mesaji metni veya COMxxx kodu | — |
BL_WINDOW_H | usersession +/- saat penceresi | 3 |
BL_SCOPE | find/diagnose: today(=DAYS gun)|since | today |
BL_DAYS | find/diagnose: kac gun geriye tara | 2 |
BL_SINCE_MIN | scope=since: son N dk | 120 |
BL_LIMIT | find/diagnose: max satir | 50 |
BL_LOG_DIR | ham CSV fallback/ortam: server/logs dizini | (otomatik tespit) |
CLAUDE.local.md'den.diji.common.api.frontend) HER ZAMAN exclude (lifecycle).Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub omert11/personal-assistant --plugin personal-assistant