لماذا توقّف Ok Goldy؟ الدرس الهندسي خلف العطل — والبديل المجاني

تشريح العطل الذي أوقف Ok Goldy، شكرٌ لمطوّرها، ودليل استخدام كامل لبديلها المجاني مفتوح المصدر من ارتكاز.

لسنوات، اعتمد آلاف مدراء Google Workspace حول العالم على أداة مجانية اسمها Ok Goldy لإنجاز ما كان يستغرق أسابيع من العمل اليدوي. اليوم توقّفت. في هذا المقال نشرّح ما حدث بالضبط، ونشكر من يستحق الشكر، ونعرض البديل المجاني الذي بنيناه في ارتكاز — مع دليل استخدام كامل.

🙏 أولاً: شكر واجب لـ Goldy Arora

قبل أي كلام تقني، يجب أن يُقال هذا بوضوح: Goldy Arora قدّم للمجتمع التقني أداةً مجانيةً بالكامل، صانها بوقته الخاص، ووفّر على آلاف المؤسسات حول العالم سنواتٍ مجمّعة من العمل اليدوي المرهق — دون أن يطلب مقابلاً.

مَن أدار يوماً إنشاء ثلاثة آلاف حساب طالب واحداً واحداً من لوحة تحكم Google يعرف حجم ما قدّمه. Ok Goldy لم يكن مجرد أداة، بل كان الحل الوحيد المجاني في مساحةٍ كل بدائلها مدفوعة.

وحين اعتذر صاحبها عن الاستمرار لظروف شخصية، فعل ذلك بصراحة وأعلنها بوضوح بدلاً من تركها تتعفّن بصمت. هذا سلوك محترم يستحق التقدير لا اللوم.

هذا المشروع ليس منافساً لعمله، بل امتداد له. الفكرة الأصلية — إدارة Google Workspace من جدول بيانات — فكرته هو. ما فعلناه أننا أعدنا بناءها بمعمارية مختلفة، بعد أن كشف توقّفها درساً هندسياً يستحق أن يُروى.

ما الذي حدث بالضبط؟

بدأ المستخدمون يواجهون رسالة واحدة متكررة عند أي عملية:

Resource has been exhausted (e.g. check quota)

الرسالة تبدو غامضة، لكنها في الحقيقة دقيقة جداً: حصة واجهة برمجة التطبيقات (API quota) قد نفدت. والسؤال المهم ليس «ما معناها» بل: حصة مَن نفدت بالضبط؟

الجواب هو جوهر القصة

حين تُنشر أداة على Google Workspace Marketplace، تعمل استدعاءات الواجهات البرمجية لكل مستخدميها عبر مشروع Google Cloud واحد يملكه المطوّر — لا عبر مشروع كل مؤسسة على حدة.

لكل مشروع سحابي سقف يومي من الطلبات. وحين استُخدمت الأداة من آلاف المؤسسات حول العالم في الوقت نفسه، كانت كلها تستهلك من الدلو ذاته. جامعة تنشئ خمسة آلاف حساب طالب في الصباح كانت تستهلك حصةً يحتاجها مستشفى في قارة أخرى بعد ساعات.

فحين نفد ذلك السقف، لم تتعطّل الأداة عند مستخدم أو اثنين — بل عند الجميع دفعةً واحدة. ولا يملك أي مستخدم أن يفعل شيئاً حيال ذلك، لأن المشكلة ليست في حسابه أصلاً.

لم يكن العطل إهمالاً في الصيانة بقدر ما كان نتيجةً حتميةً لقرار معماري: نجاح الأداة نفسه هو ما قتلها. كلما زاد مستخدموها، اقترب موعد انهيارها. والمطوّر يتحمّل كلفة وحصة كل مستخدم مجاناً — وهو نموذج لا يصمد رياضياً.

ما الذي يميّز Uruk Workspace؟

بنينا الأداة من الصفر، وعالجنا كل نقطة انكسار بعينها.

١. حصتك لك وحدك — هذا هو الفرق الجوهري

لا نشرها على Marketplace كخدمة مركزية. بدلاً من ذلك، تنسخ نسختك الخاصة. النسخة تحصل تلقائياً على مشروع Google Cloud مستقل تابع لمؤسستك أنت.

النتيجة المباشرة: لا يستطيع أي مستخدم آخر في العالم استنفاد حصتك. العطل الذي أصاب Ok Goldy غير قابل للحدوث هنا معمارياً، لا لأننا أكثر انتباهاً بل لأن البنية نفسها مختلفة.

٢. خطأ في صف واحد لا يوقف الباقي

كل صف يُعالَج على حدة. لو كان الصف رقم ٤٧ يحمل بريداً خاطئاً، يُعلَّم بـ ERROR ويُكتب السبب بجانبه، وتكمل الأداة باقي الصفوف الخمسة آلاف دون توقف.

٣. الصفوف الناجحة لا تتكرر أبداً

كل صف ينجح يُعلَّم OK، ويُتجاوَز في أي تشغيل لاحق. أي أن إعادة التشغيل آمنة دائماً — لن تُنشئ الحسابات مرتين، ولن تُرسل الدعوات مجدداً.

٤. استئناف تلقائي للأعداد الكبيرة

يوقف Google Apps Script أي سكربت بعد ست دقائق. الأداة تتوقف قبل ذلك بأمان، تحفظ موضعها، وتستأنف تلقائياً بعد دقيقة — حتى تنتهي من الجدول كاملاً. عشرون ألف مستخدم تُعالَج دون تدخّل منك.

٥. تراجع تدريجي عند حدود المعدل

عند مواجهة rateLimitExceeded أو خطأ خادم مؤقت، تنتظر الأداة وتعيد المحاولة بفواصل متضاعفة بدل أن تفشل فوراً. وإن كان الخطأ حقيقياً في الحصة، تشرحه لك بلغة مفهومة بدل عرض الرسالة الخام.

٦. وضع التجربة قبل أي تغيير

خيار Dry run يتحقق من كل صف ويكتب لك ما كان سيحدث — دون إرسال أي تغيير إلى جوجل. تشغّله، تقرأ النتائج، تصلح أخطاءك، ثم تنفّذ فعلياً.

٧. الحذف يحتاج تأكيداً مكتوباً

عمليات الحذف لا تنفّذ أي صف ما لم تكتب فيه كلمة DELETE صراحةً. نقرة خاطئة على القائمة لا تستطيع إفراغ دليل مؤسستك.

٨. مفتوحة المصدر بالكامل

الشيفرة منشورة كاملةً برخصة MIT على GitHub. يستطيع فريق الأمن لديك مراجعة كل سطر قبل الاعتماد عليها — وهذا ما لا يمكن فعله مع أداة مغلقة تدير حسابات مؤسستك وكلمات مرورها. وإن وجدت خللاً أو أردت ميزةً، افتح issue ونعمل عليه.

ماذا تفعل الأداة؟

٢١ عملية جاهزة موزّعة على خمسة محاور:

  • المستخدمون: إنشاء بالجملة داخل وحدة تنظيمية محددة · تحديث انتقائي للحقول · إعادة تعيين كلمات المرور · النقل بين الوحدات التنظيمية · التعليق والاستعادة · الحذف · التصدير الكامل
  • الوحدات التنظيمية: إنشاء الهيكل · إعادة التسمية والنقل · الحذف · تصدير الشجرة
  • المجموعات: إنشاء · تحديث · حذف · تصدير
  • الأعضاء: إضافة وإزالة بالجملة · تحديد الأدوار وإعدادات التسليم · تصدير العضويات
  • الأسماء البديلة: إضافة · إزالة · تصدير

طريقة الاستخدام — خطوة بخطوة

الخطوة ١: انسخ القالب

اضغط على رابط نسخ القالب. تُنشأ نسخة في حسابك ومعها الأداة مدمجة. لا تثبيت، ولا حساب جديد.

ملاحظة: تحتاج حساباً بصلاحيات Google Workspace Admin. الحساب العادي سيواجه رفضاً عند أول عملية، لأن إدارة المستخدمين تتطلب صلاحيات إدارية أصلاً.

الخطوة ٢: امنح الأذونات وتحقّق

افتح النسخة، وستجد قائمة Uruk Workspace في الأعلى. أول أمر تشغّله يطلب موافقتك على الأذونات.

💡 لم تظهر القائمة؟ حدّث الصفحة (F5). عند فتح نسخة جديدة لأول مرة، تتأخر جوجل أحياناً في تحميل السكربت المرتبط بالجدول، فلا تظهر القائمة فوراً. تحديث واحد للصفحة يحلّ الأمر، ولن تتكرر المشكلة بعدها. هذا سلوك معروف في Google Apps Script عند نسخ الجداول المرتبطة بسكربت، ولا علاقة له بالأداة نفسها.

ثم شغّل Setup ← Check my access قبل أي شيء آخر. يخبرك بالحساب الذي دخلت به، ويؤكد استجابة واجهات جوجل، ويعدّ الوحدات التنظيمية لديك. إن ظهر خطأ هنا فالمشكلة في الصلاحيات لا في بياناتك — وقد وفّرت على نفسك اكتشاف ذلك بعد ثلاثة آلاف صف.

الخطوة ٣: أنشئ جداول القوالب

شغّل Setup ← Create all template sheets. تُنشأ تبويبة لكل عملية بالأعمدة الصحيحة، ومع ملاحظات على كل عمود توضّح المطلوب وصيغته.

الخطوة ٤: املأ الجدول

مثال على إنشاء المستخدمين — تملأ الأعمدة: البريد الأساسي، الاسم الأول، الاسم الأخير، والوحدة التنظيمية مثل /الطلبة/المرحلة الأولى.

اترك خانة كلمة المرور فارغة وستُولَّد تلقائياً وتُكتب لك في الجدول، مع إجبار المستخدم على تغييرها عند أول دخول.

الخطوة ٥: جرّب أولاً — لا تنفّذ مباشرة

افتح Settings & run options وفعّل Dry run، ثم شغّل العملية. ستقرأ في عمود Status ما كان سيحدث لكل صف، دون أي تغيير فعلي. هذه الخطوة تكشف أخطاء البيانات قبل أن تصبح أخطاءً في دليلك الحقيقي.

الخطوة ٦: نفّذ واقرأ النتيجة

أطفئ Dry run وشغّل العملية. بعد الانتهاء اقرأ العمودين:

الحالة المعنى
OK نُفِّذت. ستُتجاوز في أي تشغيل لاحق.
ERROR فشلت، والسبب مكتوب في عمود Details.
SKIPPED لا شيء لتنفيذه، أو صف حذف غير مؤكَّد.
DRY-RUN تحقّق فقط دون تنفيذ.

الخطوة ٧: أصلح الأخطاء وأعد التشغيل

صحّح صفوف ERROR، ثم فعّل خيار Retry rows marked ERROR وأعد التشغيل. الصفوف الناجحة لن تتكرر، وستُعالَج المصحّحة فقط.

ماذا لا تفعل الأداة؟ (بصراحة)

المصداقية أهم من المبالغة، فهذه حدودها الحالية:

  • لا تدير تراخيص Google Workspace
  • لا تدير أجهزة Chrome
  • لا تدعم الجدولة الزمنية للعمليات
  • لا تدير جهات الاتصال المشتركة أو المخططات المخصصة

إن كنت تحتاج هذه الميزات فهناك أدوات مدفوعة ناضجة مثل GW Manager تستحق كلفتها. أما إن كان ما تريده تنفيذ العمليات الأساسية بالجملة، مجاناً، وبشيفرة تستطيع مراجعتها — فهذه الأداة تكفيك.

Conclusion

قصة Ok Goldy ليست قصة إهمال، بل درس في أن المعمارية قدر. أداة مجانية ممتازة انهارت لأن نجاحها ذاته كان يستنزف المورد الذي تعتمد عليه.

الشكر يبقى لصاحبها الذي أعطى المجتمع سنواتٍ من عمله بلا مقابل. وما فعلناه أننا أخذنا فكرته، وأعدنا بناءها بحيث لا يستطيع نجاحها أن يقتلها.

← جرّب Uruk Workspace مجاناً  ·  الشيفرة المصدرية على GitHub

طوّرتها Erticaz for Technical Solutions ونشرتها مجاناً برخصة MIT. لو احتجت تخصيصاً أو ترحيل بيانات أو تشغيلاً على نطاق أوسع، Contact Us.

Share your love