مقدمة في مراقبة نظام الملفات
في تطوير البرمجيات الحديثة، تُعد مراقبة التغييرات في نظام الملفات مهمة بالغة الأهمية. تتبع إنشاء الملفات وتعديلها وحذفها ونقلها ضروري في سيناريوهات متعددة: بدءًا من تشغيل الاختبارات تلقائيًا عند تغيير الكود وصولاً إلى مراقبة سجلات النظام في بيئة الإنتاج.
مكتبة Watchdog هي حل متعدد المنصات للغة Python، يوفر مراقبة فعالة وموثوقة لنظام الملفات بأقل تكلفة إضافية. تستخدم المكتبة آليات النظام الأصلية وتوفر واجهة برمجة تطبيقات (API) موحدة للتعامل مع أحداث نظام الملفات.
ما هي Watchdog
Watchdog هي مكتبة Python لمراقبة نظام الملفات في الوقت الفعلي. تضمن التوافق عبر المنصات المختلفة باستخدام آليات مراقبة نظامية متنوعة حسب نظام التشغيل: inotify في Linux، FSEvents في macOS، وReadDirectoryChangesW في Windows.
المزايا الرئيسية
توفر المكتبة عدة مزايا مهمة مقارنة بالحلول المبرمجة يدويًا أو الأدوات البديلة. أولاً، تضمن أداءً عاليًا بفضل استخدام واجهات برمجة التطبيقات النظامية الأصلية بدلاً من الاستقصاء الدوري لنظام الملفات. ثانيًا، توفر Watchdog واجهة موحدة لجميع المنصات المدعومة، مما يبسط تطوير التطبيقات متعددة المنصات.
التثبيت والإعداد
يتم تثبيت المكتبة بالطريقة القياسية عبر pip:
pip install watchdog
للحصول على ميزات إضافية، بما في ذلك أداة سطر الأوامر watchmedo، يمكن تثبيت النسخة الموسعة:
pip install watchdog[watchmedo]
لا تتطلب المكتبة أي إعدادات إضافية وهي جاهزة للاستخدام فور التثبيت.
الهيكل والمكونات الأساسية
تم بناء Watchdog حول عدة مكونات رئيسية تعمل معًا لضمان مراقبة نظام الملفات.
Observer (المراقب)
المراقب هو المكون المركزي لنظام المراقبة. يقوم بتشغيل وإدارة عملية المراقبة، ويعمل في خيط منفصل لضمان عدم حظر تنفيذ البرنامج الرئيسي. يمكن للمراقب تتبع مسارات متعددة في وقت واحد مع معالجات أحداث مختلفة.
EventHandler (معالج الأحداث)
يحدد معالج الأحداث كيفية استجابة البرنامج للأحداث المختلفة في نظام الملفات. يقوم المطورون بإنشاء معالجاتهم الخاصة عن طريق الوراثة من الفئة الأساسية FileSystemEventHandler وإعادة تعريف الطرق المطلوبة.
Event (الأحداث)
الأحداث هي كائنات تحتوي على معلومات حول التغييرات التي حدثت في نظام الملفات. يتضمن كل حدث مسار الملف أو المجلد، ونوع العملية، وبيانات وصفية إضافية.
أمثلة أساسية للاستخدام
مراقبة بسيطة
لنلقِ نظرة على مثال أساسي لإنشاء نظام مراقبة:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class BasicHandler(FileSystemEventHandler):
def on_modified(self, event):
if not event.is_directory:
print(f"تم تعديل الملف: {event.src_path}")
def on_created(self, event):
if not event.is_directory:
print(f"تم إنشاء الملف: {event.src_path}")
observer = Observer()
observer.schedule(BasicHandler(), path="./monitored_folder", recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
مراقبة مع تسجيل الأحداث
لتتبع أكثر تفصيلاً للأحداث، يمكن استخدام التسجيل المدمج: