CLI și cURL
Comanda honk-me trimite din scripturi shell, cron joburi și CI, cu aceleași reîncercări și aceeași idempotență ca bibliotecile. Sau sari peste instalare și folosește o singură cerere cURL.
- Pachet
-
github.com/honk-me/honk-goPublicat - Cod sursă
- github.com/honk-me/honk-go · Licență MIT
- Cerințe
- Linux, macOS sau Windows (amd64 sau arm64). Go 1.22+ dacă vrei să-l compilezi singur.
Instalare
CLI-ul face parte din modulul Go.
go install github.com/honk-me/honk-go/cmd/honk-me@latest
# or download a prebuilt binary (Linux, macOS, Windows; amd64 and arm64):
# https://github.com/honk-me/honk-go/releases Oricine are o cheie API (honk_…) poate trimite mesaje în proiectul ei. Ține-o pe servere, în joburi și în secretele din CI, niciodată într-o aplicație de browser, de mobil sau de desktop.
Trimite un eveniment
Citește HONK_URL și HONK_KEY din mediu; cheia nu e niciodată un flag, așa că nu ajunge niciodată în istoricul shellului sau în lista de procese.
export HONK_URL=https://honk-me.app HONK_KEY=honk_… # better: your secret store
honk-me beep "Backup finished" "nightly pg_dump took 42 s"
honk-me loud "Disk 91%" --group-key "disk/$(hostname)/var" Comenzi
Comenzile scurte light, beep, loud, long și blast stabilesc nivelul și primesc textul ca argumente. send, problem și recovery primesc flaguri. honk-me send -h le listează pe toate.
honk-me loud "Disk 91%" # shortcut: light, beep, loud, long, blast
honk-me beep "Backup finished" "nightly pg_dump took 42 s" # [TITLE] MESSAGE, flags anywhere
honk-me send --title "Disk almost full" --message "/var at 91%" --severity loud \
--group-key "disk/$(hostname)/var" --source "$(hostname)" --meta host="$(hostname)" --meta used:=91
honk-me problem --group-key db/backup --title "Backup failed" --message "pg_dump exited with 1"
honk-me recovery --group-key db/backup --title "Backup OK" --message "pg_dump finished"
tail -c 8000 /var/log/backup.log | honk-me send --title "Backup log" --message - # message from stdin
honk-me send --message "Front door" --image-url https://cam.example.com/snap.jpg --priority high
honk-me light "New request from Emily" "Wants a quote for an online shop" \
--action "Reply by email=mailto:[email protected]" --action "Call=tel:+12025550147" # buttons, up to 3 În cron: alertă doar la eșec
Trimite o revenire doar când ceva chiar a fost stricat. O revenire fără o problemă deschisă tot deschide un episod „revenit” și trimite o notificare, așa că o revenire după fiecare rulare reușită ți-ar suna telefonul în fiecare noapte.
0 3 * * * pg_dump app > /backup/app.sql || honk-me problem --group-key db/backup --source "$(hostname)" --title "Backup failed" --message "pg_dump exited with $?" În CI
O cheie de idempotență pentru fiecare încercare de rulare, ca reîncercările CLI-ului să nu creeze duplicate, și || true, ca o notificare să nu poată pica niciodată buildul.
- name: Notify
if: failure()
env:
HONK_URL: ${{ secrets.HONK_URL }}
HONK_KEY: ${{ secrets.HONK_KEY }}
run: |
honk-me problem --group-key "ci/${{ github.repository }}/${{ github.ref_name }}" \
--title "CI failed: ${{ github.workflow }}" --message "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--source github-actions --category deployments \
--idempotency-key "gh-${{ github.run_id }}-${{ github.run_attempt }}" || true Coduri de ieșire
Adaugă || true acolo unde o notificare eșuată nu trebuie să pice scriptul.
| 0 | Acceptat sau duplicat al unui eveniment acceptat |
|---|---|
| 1 | Răspuns neașteptat: un HONK_URL greșit, o redirecționare, un răspuns malformat |
| 2 | Eroare de utilizare sau lipsește HONK_URL ori HONK_KEY |
| 3 | Mesaj invalid: corectează flagurile |
| 4 | Autentificare: cheie invalidă sau revocată, prioritate urgentă nepermisă, proiect suspendat |
| 5 | Cotă sau limită de cereri (429); stderr arată Retry-After |
| 6 | Conflict de idempotență (409): aceeași cheie, alt conținut |
| 7 | Eșec temporar după reîncercări: rulează din nou cu același --idempotency-key |
Cu cURL
Fără nicio instalare. Adaugă un Idempotency-Key, ca reîncercările cURL să nu poată crea duplicate.
curl -sS https://honk-me.app/v1/messages \
-H "Authorization: Bearer $HONK_KEY" \
-H "Idempotency-Key: backup-$(date +%Y%m%d)" \
-H "Content-Type: application/json" \
-d '{
"title": "Backup failed",
"message": "pg_dump exited with 1",
"severity": "long",
"group_key": "db/backup",
"event_type": "problem"
}'
# → 202 {"id":"msg_…","status":"accepted","duplicate":false,"received_at":"…"} curl --fail-with-body -sS --max-time 10 --retry 3 --retry-all-errors \
-X POST "$HONK_URL/v1/messages" \
-H "Authorization: Bearer $HONK_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: request-42" \
-d '{"title":"New request from Ana Pop","message":"Wants a quote for an online shop, budget €4,000.","severity":"light","priority":"high","category":"customers","group_key":"requests/42"}' Reîncercări care nu trimit nimic de două ori
- Fiecare trimitere are un
Idempotency-Key: al tău sau un UUIDv7 nou. Aceeași cheie e refolosită la fiecare reîncercare, iar timp de 24 de ore Honk răspunde la o repetare cu id-ul original șiduplicate: true, așa că un răspuns pierdut nu creează niciodată un al doilea mesaj. - Se reîncearcă doar erorile de rețea, cererile care expiră,
429și5xx, cu backoff exponențial și jitter complet, niciodată mai devreme decâtRetry-Afterde la server. Celelalte răspunsuri4xxnu se reîncearcă niciodată: corectează cererea. - Fiecare încercare expiră după 5 secunde, iar totul se oprește după 30. Dacă ar trebui să aștepte mai mult, de exemplu până se resetează cota zilnică la miezul nopții, eșuează imediat și îți spune când să reîncerci.
- Câmpurile sunt verificate înainte de trimitere, iar toate câmpurile invalide sunt raportate deodată.