انتقل إلى المحتوى
use-cases / mute-flaky-job / hero
CRON · MANAGED ENTRIES · PATCH

اكتم المهمة المتقلّبة دون أن تفقدها

تصدير مقاييس كل ساعة يفشل منذ ثلاثة أيام. أنت في المناوبة الليلة. أرسل PATCH إلى مُدخل cron المُدار بـ enabled:false — يبقى الجدول والأمر والتعليق كما هي. المهمة في حالة محدّدة: حاضرة ومكتومة، تنتظر من يُصلحها.

اقرأ توثيق cron

التبديل ليس سوى PATCH · المُدخل لا يغادر القائمة أبداً

use-cases / mute-flaky-job / mechanism

الكتم هو PATCH واحد

مُدخلات Hoody Cron المُدارة هي مورد JSON: لكل صف معرّف، وجدول، وأمر، وتعليق، وعَلَم enabled. قلب enabled إلى false هو PATCH واحد. يبقى المُدخل في crontab ليقرأه الشخص التالي ويُقرّر ما يفعل.

تيرمنال · حاسوب المناوبة
PATCH · كتم
# mute the flaky entry — entry stays in the crontab
curl -X PATCH \
  https://cron.containers.hoody.com/users/me/entries/e7d3 \
  -H "Content-Type: application/json" \
  -d '["enabled": false, "comment": "flaking on monday with prod-db — انظر #pager"]'

# response
HTTP/1.1 200 OK
{ "id":"e7d3", "enabled":false, "schedule":"0 * * * *",
  "command":"/srv/cron/metrics-export.sh", ... }
تيرمنال · في صباح اليوم التالي
GET · تحقّق
# the entry is still on the list — just not running
curl GET https://cron.containers.hoody.com/users/me/entries

HTTP/1.1 200 OK
[
  { "id":"a1f2", "enabled":true,  ... },
  { "id":"e7d3", "enabled":false, "comment":"flaking — see #pager" },
  { "id":"9b21", "enabled":true,  ... }
]
# present and muted — the on-call hand-off has somewhere to point

PATCH لا يحذف ولا يُعيد كتابة ولا يُحرّك المُدخل — يقلب قيمة منطقية واحدة. التسليم سطر واحد: 'مُدخل metrics-export رقم e7d3 مكتوم، انظر hoody-cron، ألقِ نظرة من فضلك.'

use-cases / mute-flaky-job / states

ثلاث حالات، مُدخل واحد

أيّ مُدخل في crontab على Hoody يكون دائماً في واحدة من ثلاث حالات حصراً. لكل حالة عواقب مختلفة على مَن يعرف ماذا في صباح الغد.

ENTRY · e7d3 · /srv/cron/metrics-export.shPATCH يُبدّل بين الحالات — غير تدميري أبداً
ENABLED

يعمل وفق الجدول، يُرسل تنبيهاً عند الفشل

المُدخل في crontab وعفريت cron في النواة يلتقطه كل ساعة. الإخفاقات توقظ المناوب. هذه الحالة الافتراضية للمهام السليمة.

MUTED

حاضر، مُتوقَّف، موسوم

enabled:false. يبقى المُدخل في crontab فيستطيع الفريق قراءة جدوله وأمره وتعليقه. عفريت cron يتخطّاه. لا تنبيه في الثانية صباحاً غداً، ولا أحد ينسى أنه موجود.

DELETED

اختفى — واختفى السياق معه

حين تُجري DELETE، يغادر الجدول والأمر والتعليق والسبب جميعاً crontab. المناوب التالي ليس لديه ما يبحث فيه بـ grep. الكتم هو الخيار الذي يحفظ الذاكرة.

الكتم هو الحالة الوسطى التي لا تملك معظم المجدوِلات اسماً لها. Hoody Cron يملك واحداً، لأن enabled حقل من الدرجة الأولى في المُدخل المُدار.

use-cases / mute-flaky-job / powers

لماذا تهمّ حالة كتم محدّدة

حين لا يمكنك إصلاح مهمة الليلة، السؤال هو ما هو شكل غيابها بحلول الغد. الكتم يجعل ذلك الشكل قابلاً للقراءة.

HAND-OFF

رسالة المناوبة سطر واحد

بدلاً من لصق خيط Slack أو PR محذوف السطور، الرسالة هي معرّف المُدخل. مناوب الغد يفتح رابط cron، يقرأ التعليق، ويعرف من أين يبدأ.

AUDIT

كل عملية كتم صفّ، لا ذاكرة

GET /entries يُعيد enabled:false إلى جانب التعليق. ابنِ لوحة تدقيق بالتصفية. مَن كتمها، ولماذا، ومنذ متى موجود في JSON، لا في رسائل مباشرة لشخص ما.

REVERSIBLE

إلغاء الكتم هو PATCH عكسي

حين تُحلّ المشكلة الأساسية، PATCH واحد آخر بـ enabled:true يُعيد المُدخل إلى الجدول. لا إعادة كتابة لتعبير cron، لا خطر أخطاء طباعية، لا دورة إيداع ونشر.

use-cases / mute-flaky-job / capacity

ما الذي يمنحك إياه cron API

الأرقام تأتي من سطح Hoody Cron للمُدخلات المُدارة، لا من مقاييس مُختلَقة.

  1. طريقة واحدةPATCH

    PATCH /users/[user]/entries/[id] يقبل جسماً جزئياً. أرسل ["enabled":false] وحدها — الجدول والأمر والتعليق دون مساس.

  2. حقول محفوظة5+1

    جدول من خمسة حقول، وأمر، وتعليق، وexpires_at، وid، تستمرّ جميعها عبر الكتم. crontab في النواة لا يزال يعكس المُدخل — مع التعليق عليه فقط من خدمة cron.

  3. إعادة كتابة0

    لا تعديل ملف، لا PR، لا نشر. دورة الكتم هي استدعاء HTTP واحد من أي تيرمنال، بما في ذلك ذاك الذي على هاتفك.

وفقاً لـ Hoody Cron Managed Entries API: كل مُدخل يحمل قيمة منطقية enabled إلى جانب الجدول والأمر والتعليق وexpires_at الاختياري. PATCH يقبل أجساماً جزئية.

use-cases / mute-flaky-job / punchline

المُعطّل ليس محذوفاً — المُدخل ينتظر من يُصلحه.

الليلة · في المناوبة · 23:14غداً · الفريق · 09:00
ما كان يبدو عليه سير العمل القديمvim crontab → علّق على السطر → commit → PR → merge → نشرست خطوات · يفقد سياق التعليق · يخاطر بخطأ طباعي في ليلة مُتعَبة
ما يبدو عليه الآنcurl -X PATCH .../entries/e7d3 -d '["enabled":false]'PATCH واحد · يبقى المُدخل في القائمة · والملاحظة تسافر معه
انظر مواصفات PATCH
use-cases / mute-flaky-job / replaces

ما الذي يحلّ هذا محلّه

الطرق المعتادة التي تُوقف بها الفرق سطر cron متقلّب 'مؤقتاً'. كل واحدة منها إمّا تدميرية، أو فاقدة، أو على بُعد PR-ين من الإنتاج.

  • التعليق على أسطر crontab يدوياًيفقد عَلَم enabled المُهيكل · سهل النسيان
  • حذف المُدخل و'تذكّره'الجدول والأمر والسبب يغادرون كلهم معه
  • تعليقات // FIXME يدوية في الكودتعيش في مستودع، لا في الجدول الذي يعمل
  • خيوط Slack كذاكرة للمناوبةقابلة للبحث لأسبوع · ثم لا تكون مهمّة لأحد
  • قضايا GitHub لمهام مكتومة-غير-محذوفةقضية لشيء لا يزال على crontab — حالة مُكرّرة
  • إعدادات cron مُدارة بـ TerraformPlan، apply، نشر — لحقل منطقي واحد
use-cases / mute-flaky-job / cta

توقّف عن حذف المهام المتقلّبة في الثانية صباحاً. اكتمها، اترك ملاحظة، ودع مناوب الغد يقرأ JSON.

اقرأ توثيق cron
use-cases / mute-flaky-job / related

اقرأ الآخرين