
monitor v0.33.0
المراقبة في الوقت الفعلي وتحليل السجلات البطيئة لقواعد بيانات Valkey وRedis مع كشف الشذوذ، وتدقيق ACL، وتصدير مقاييس Prometheus.
مراقب BetterDB
طبقة المراقبة التي يستحقها Valkey.
يحفظ BetterDB ما يتجاهله Valkey - السجلات البطيئة، أنماط الأوامر، نشاط العملاء، إشارات الشذوذ - حتى تتمكن من تصحيح ما حدث في الساعة 3 صباحًا، وليس فقط ما يحدث الآن. مبني لـ Valkey 8.x مع دعم أصلي لـ COMMANDLOG و CLUSTER SLOT-STATS ومقاييس الإدخال/الإخراج لكل خيط. متوافق مع Redis 6+ لكل شيء آخر.
الموقع الإلكتروني | Docker Hub | npm | التوثيق | المدونة
تم بناء BetterDB بواسطة BetterDB Inc.، وهي شركة منفعة عامة تعمل بموجب OCV Open Charter.

بدء سريع (Docker)```bash
docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
وجّه متصفحك إلى `http://localhost:3001`. لمراقبة مثيل معيّن:```bash
docker run -d \
--name betterdb \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
betterdb/monitor:latest
هل تتصل بقاعدة بيانات على جهازك المضيف؟ داخل الحاوية،
localhostيشير إلى الحاوية نفسها وليس جهازك المضيف — لذا استخدمhost.docker.internalكمضيف لقاعدة البيانات. على Docker Desktop (macOS/Windows) يعمل ذلك مباشرة دون إعدادات إضافية؛ أما على Linux فأضف--add-host=host.docker.internal:host-gatewayإلى أمرdocker runحتى يتم حل الاسم. زر "الاتصال بالمثيل المحلي" بنقرة واحدة في لوحة التحكم يكتشف ذلك تلقائيًا ويملأ المضيف الصحيح لك مسبقًا.
يتم نشر نسختين من الصورة، وكلتاهما متعددة البنى (linux/amd64, linux/arm64):
| الوسم | ما هو |
|---|---|
latest, X.Y.Z-no-ai | الصورة الافتراضية - تتضمن كل ميزات المراقبة، دون الاعتماديات الخاصة بمساعد الذكاء الاصطناعي المحلي التجريبي |
X.Y.Z | تضيف مساعد الذكاء الاصطناعي التجريبي (أحضر Ollama الخاص بك؛ معطّل افتراضيًا عبر AI_ENABLED) |
راجع نشر Docker للإنتاج للتخزين الدائم، والمنافذ المخصصة، والترخيص، والإعدادات المعزولة عن الشبكة.
بدء سريع (Kubernetes / Helm)```bash
helm repo add betterdb https://docs.betterdb.com/charts
helm repo update
helm install betterdb-monitor betterdb/betterdb-monitor
--namespace betterdb --create-namespace
--set db.host=my-valkey.default.svc.cluster.local
--set db.password=yourpassword
ثم نفّذ `kubectl port-forward -n betterdb svc/betterdb-monitor 3001:3001` وافتح `http://localhost:3001`، أو فعّل ingress الخاص بالـ chart. سجلّات التاريخ المدعومة بـ PostgreSQL، وSecrets الخاصة بك، والترخيص المعزول عن الشبكة (air-gapped) كلها مغطاة في [دليل Kubernetes](https://docs.betterdb.com/kubernetes) و[README الخاص بالـ chart](https://github.com/betterdb-inc/monitor/blob/master/charts/betterdb-monitor/README.md).
## بدء سريع (CLI)
شغّل BetterDB Monitor بدون Docker:```bash
npx @betterdb/monitor
عند التشغيل الأول، يرشدك معالج الإعداد التفاعلي عبر الاتصال بقاعدة البيانات، ونظام التخزين الخلفي (SQLite أو PostgreSQL أو في الذاكرة)، وإعدادات الخادم. يتم حفظ الإعدادات في ~/.betterdb/config.json.```bash
npm install -g @betterdb/monitor # global install
betterdb --setup # re-run setup wizard
betterdb --port 8080 # override server port
betterdb --db-host 1.2.3.4 # override database host
betterdb --help # all options
يتطلب Node.js >= 20.0.0 ومثيل Valkey أو Redis للمراقبة. للتخزين عبر SQLite، استخدم أيضًا `npm install -g better-sqlite3`.
## ما الذي ستحصل عليه
### شاهد كل شيء، واحتفظ بكل شيء
- **تحليلات تاريخية** - استعلم عن سجلات الاستعلامات البطيئة، وأنماط الأوامر، ونشاط العملاء، وزمن الاستجابة عبر أي نطاق زمني. البيانات التي كانت تختفي بعد تدوير السجلات.
- **دعم COMMANDLOG** - حصري لـ Valkey 8.1+. الطلبات الكبيرة والردود الكبيرة، وليس فقط البطيئة منها.
- **جلسات التقاط MONITOR** - سجّل حركة المرور الفعلية عند الطلب: تتبّع مباشر، تصفية، إعادة تشغيل، تصدير إلى JSON/CSV، ومطابقة مرجعية مع سجل الاتصالات.
- **تتبع المفاتيح الساخنة** - أهم المفاتيح حسب تكرار الوصول مع حركة الترتيب بمرور الوقت. تحليلات المفاتيح (Pro، مجانية في الوصول المبكر) تضيف توزيعات النوع وTTL والحجم من العينات المباشرة.
- **رؤية العناقيد** - رسوم بيانية للطوبولوجيا، وخرائط حرارية لـ SLOT-STATS، وتوزيع وحدة المعالجة المركزية والمفاتيح لكل فتحة.
- **مقاييس وحدة المعالجة المركزية وخيوط الإدخال/الإخراج** - رؤية لكل خيط لا يمكن لأي أداة Redis توفيرها.
- **تحليلات العملاء** - اعرف بالضبط أي خدمة مسؤولة عن ماذا، مع الإسناد حسب اسم العميل والنمط.
- **سجل تدقيق ACL** - تتبّع من وصل إلى ماذا، مع الحفظ للامتثال وتصحيح الأخطاء بعد الحوادث.
### افهم وتصرّف
- **كشف الشذوذ** (Pro، مجاني في الوصول المبكر) - تعلّم تلقائي للخط الأساسي مع أحداث مترابطة وتشخيصات بلغة إنجليزية بسيطة. أكثر من 20 كاشفًا، بدون عتبات يدوية.
- **التنبؤ بالسعة** - إسقاطات زمنية للوصول إلى السقف للذاكرة، والعمليات/الثانية، ووحدة المعالجة المركزية، والتجزئة.
- **Webhooks** - تسليم تنبيهات موقّعة بـ HMAC مع إعادة المحاولة وسجل تسليم كامل.
- **الترحيل المباشر** - الانتقال بين Redis وValkey مع سير عمل من ثلاث مراحل: التحليل والتنفيذ والتحقق.
### مصمم لعصر الذكاء الاصطناعي
- **مراقبة البحث المتجهي** - عمليات FT.SEARCH في الثانية وزمن الاستجابة مع صحة لكل فهرس لـ [valkey-search](https://github.com/valkey-io/valkey-search) وRediSearch. راجع [docs/vector-ai](https://github.com/betterdb-inc/monitor/blob/master/docs/vector-ai/README.md).
- **زمن استجابة الاستدلال** - p50/p95/p99 لكل فهرس، مع تنبيهات خرق اتفاقية مستوى الخدمة (Pro، مجاني في الوصول المبكر).
- **ذكاء التخزين المؤقت الدلالي** (Pro، مجاني في الوصول المبكر) - صحة معدل النجاح، وتوصيات عتبة التشابه، وسير عمل اقتراحات بالموافقة/الرفض. تتضمن مراقبة ذاكرة الوكيل.
- **تتبعات الذكاء الاصطناعي** - مخططات شلالية لـ OTLP من تطبيق الذكاء الاصطناعي الخاص بك، مترابطة مع حالة Valkey المباشرة تحت كل طلب.
### يتكامل مع كل شيء
- **خادم MCP** - 60 أداة لـ Claude Code أو Cursor أو أي عميل MCP عبر [`@betterdb/mcp`](https://github.com/betterdb-inc/monitor/blob/master/packages/mcp).
- **نقطة نهاية Prometheus** - أكثر من 100 مقياس `betterdb_*`. راجع [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md).
- **OpenTelemetry** - عكس المقاييس والأحداث إلى أي خلفية OTLP.
- **REST API** - كل شيء في الواجهة هو استدعاء API، موثّق عبر OpenAPI.
## الوصول إلى بياناتك بطريقتك
| الواجهة | التفاصيل |
|-----------|---------|
| واجهة الويب | `http://localhost:3001` |
| خادم MCP | `npx @betterdb/mcp` (stdio) - أنشئ رمزًا عبر الإعدادات ← رموز MCP |
| Prometheus | `http://localhost:3001/api/prometheus/metrics` |
| REST API (OpenAPI) | `http://localhost:3001/docs` |
| فحص الصحة | `http://localhost:3001/api/health` |
> **ملاحظة**: في الإصدارات الإنتاجية (Docker، CLI) تُقدَّم مسارات API تحت بادئة `/api`. في التطوير المحلي (`pnpm dev`) لا توجد بادئة - على سبيل المثال `http://localhost:3001/health`.
## قواعد البيانات المدعومة
| قاعدة البيانات | الحد الأدنى للإصدار | الميزات المدعومة |
|----------|----------------|-------------------|
| **Valkey** | 8.0+ | جميع الميزات بما في ذلك COMMANDLOG (8.1+) وCLUSTER SLOT-STATS |
| **Redis** | 6+ | جميع الميزات باستثناء COMMANDLOG وCLUSTER SLOT-STATS الحصريين لـ Valkey |
يستخدم الخلفي محوّلًا موحّدًا فوق عميل `iovalkey` المتوافق سلكيًا ويكتشف تلقائيًا Valkey مقابل Redis من استجابة `INFO` (`DB_TYPE=auto`). تُكتشف القدرات مثل COMMANDLOG وSLOT-STATS حسب الإصدار، وتتدهور الواجهة بأمان عندما لا تكون الميزة متاحة.
الخدمات المُدارة مدعومة أيضًا - توجد أدلة لـ AWS ElastiCache وMemoryDB وRedis Cloud وUpstash في [docs/providers](https://github.com/betterdb-inc/monitor/blob/master/docs/providers)، ويصل [`@betterdb/agent`](https://github.com/betterdb-inc/monitor/blob/master/packages/agent) إلى مثيلات VPC فقط عبر WebSocket صادر.
## نشر Docker للإنتاج
تحتوي صورة Docker على تطبيق المراقبة (الخلفي + الواجهة الأمامية). تتطلب:
1. مثيل Valkey/Redis للمراقبة
2. مثيل PostgreSQL لاستمرار البيانات (أو استخدام تخزين الذاكرة)
### التشغيل مع تخزين PostgreSQL```bash
docker run -d \
--name betterdb-monitor \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://user:pass@postgres-host:5432/dbname \
betterdb/monitor
التشغيل على منفذ مخصص
اضبط متغير البيئة PORT وطابِق تعيين -p:```bash
docker run -d
--name betterdb-monitor
-p 8080:8080
-e PORT=8080
-e DB_HOST=your-valkey-host
betterdb/monitor
### التشغيل مع شبكة المضيف (الوصول إلى خدمات localhost)
إذا كانت Valkey و PostgreSQL تعملان على نفس المضيف:```bash
docker run -d \
--name betterdb-monitor \
--network host \
-e DB_HOST=localhost \
-e DB_PORT=6380 \
-e DB_PASSWORD=devpassword \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://dev:devpass@localhost:5432/postgres \
betterdb/monitor
متغيرات البيئة
| المتغير | مطلوب | الافتراضي | الوصف |
|---|---|---|---|
DB_HOST | نعم | localhost | مضيف Valkey/Redis المراد مراقبته |
DB_PORT | لا | 6379 | منفذ Valkey/Redis |
DB_PASSWORD | لا | - | كلمة مرور Valkey/Redis |
DB_USERNAME | لا | default | اسم مستخدم ACL الخاص بـ Valkey/Redis |
DB_TYPE | لا | auto | نوع قاعدة البيانات: auto أو valkey أو redis |
STORAGE_TYPE | لا | memory | الواجهة الخلفية للتخزين: memory أو postgres |
STORAGE_URL | مشروط | - | رابط اتصال PostgreSQL (مطلوب إذا كان STORAGE_TYPE=postgres) |
PORT | لا | 3001 | منفذ HTTP للتطبيق |
NODE_ENV | لا | production | بيئة Node |
ANOMALY_DETECTION_ENABLED | لا | true | تفعيل كشف الحالات الشاذة |
ANOMALY_PROMETHEUS_INTERVAL_MS | لا | 30000 | فترة تحديث ملخص Prometheus (بالمللي ثانية) |
BETTERDB_LICENSE_KEY | لا | - | مفتاح الترخيص عبر الإنترنت (Pro/Enterprise)، يتم التحقق منه عبر الشبكة |
BETTERDB_OFFLINE_LICENSE_FILE | لا | - | مسار ملف ترخيص دون اتصال موقّع بصيغة .jwt للمضيفات المعزولة عن الشبكة (انظر أدناه) |
BETTERDB_OFFLINE_LICENSE | لا | - | رمز الترخيص دون اتصال كسلسلة JWT مضمّنة |
BETTERDB_DATA_DIR | لا | /app/data | دليل حالة الترخيص المحفوظة (قم بتركيب وحدة تخزين قابلة للكتابة) |
ENCRYPTION_KEY | لا | - | مفتاح (16 حرفًا كحد أدنى) يُستخدم لتشفير كلمات مرور الاتصال وأسرار أنفاق SSH المخزنة أثناء الراحة. بدونه، تُخزَّن الأسرار كنص عادي |
BETTERDB_SSH_KEY_DIR | لا | - | الدليل الذي يجب أن توجد فيه مفاتيح SSH الخاصة من جانب الخادم. يتيح مصدر المفتاح "مسار ملف الخادم" لـ أنفاق SSH؛ يجب أن يقع مسار مفتاح الاتصال داخله. تركه غير مضبوط يعطّل المفاتيح المستندة إلى الملفات (المفاتيح الملصقة المضمّنة لا تزال تعمل) |
BETTERDB_TELEMETRY | لا | true | اضبطه على false لتعطيل القياس عن بُعد المجهول |
المرجع الكامل، بما في ذلك تصدير AI وOTLP وضبط webhook وعتبات بوابة الصحة: docs/configuration.md.
أنفاق SSH
يمكن للاتصالات الوصول إلى قاعدة البيانات عبر مضيف حصن/قفزة SSH بدلاً من الاتصال المباشر — وهو مفيد لـ Valkey/Redis في شبكة فرعية خاصة أو ElastiCache أو MemoryDB. فعّل الاتصال عبر نفق SSH عند إضافة اتصال وقدم مضيف SSH والمنفذ واسم المستخدم. يتم دعم قفزة واحدة.
المصادقة إما بكلمة مرور أو بمفتاح خاص. تأتي المفاتيح الخاصة من أحد مصدرين:
- لصق المفتاح (مضمّن): يتم إرسال محتوى مفتاح PEM مع الاتصال. يُخزَّن مشفّرًا أثناء الراحة فقط عند تعيين
ENCRYPTION_KEY(تشفير مغلف)؛ وبدون هذا المفتاح يُخزَّن كنص عادي، مثل كلمات مرور الاتصال. يعمل في كل مكان، بما في ذلك النشر المُدار/السحابي. - مسار ملف الخادم: المفتاح موجود بالفعل على نظام ملفات خادم المراقبة ويُشار إليه بالمسار. يتطلب هذا تعيين متغير البيئة
BETTERDB_SSH_KEY_DIRإلى الدليل الذي يحتوي على المفاتيح المسموح بها، ويجب أن يقع المسار المُشار إليه داخله، بحيث لا يمكن أبدًا إجبار API على قراءة ملفات عشوائية. اتركBETTERDB_SSH_KEY_DIRغير مضبوط لتعطيل هذا الخيار.
اختياريًا، ثبّت بصمة مفتاح مضيف SSH (SHA256:...) على الاتصال؛ عند تعيينها، يُرفض النفق ما لم يقدم الخادم مفتاحًا مطابقًا، مما يمنع هجمات الوسيط على مسار الحصن. إذا تُرك فارغًا، لا يتم التحقق من هوية الخادم (يتم تسجيل تحذير).
يوجّه النفق إلى قاعدة البيانات عبر 127.0.0.1؛ وعند تفعيل TLS، لا يزال الشهادة تُتحقق مقابل اسم مضيف قاعدة البيانات الحقيقي. اضبط ENCRYPTION_KEY بحيث يتم تشفير كلمات مرور SSH وعبارات مرور المفاتيح والمفاتيح المضمّنة أثناء الراحة.
قيد معروف — طوبولوجيات الكتلة/Sentinel: فقط الاتصال الذي تقوم بتكوينه يتم توجيهه عبر النفق. تتفرع مراقبة الكتلة وSentinel إلى العقد الأخرى باستخدام العناوين التي تعلن عنها تلك العقد (CLUSTER NODES / Sentinel)، ويتم إجراء تلك الاتصالات لكل عقدة مباشرة، وليس عبر النفق. إذا كانت العقد الأخرى قابلة للوصول فقط عبر الحصن (مثل ElastiCache/MemoryDB في شبكة فرعية خاصة)، ستكون طرق عرض كل عقدة غير متاحة. استخدم أنفاق SSH لمراقبة العقدة المفردة/الأساسية، أو ضع المراقب حيث يمكنه الوصول إلى عقد الكتلة مباشرة.
الترخيص ودعم البيئات المعزولة عن الشبكة
يفتح BetterDB Monitor ميزات Pro/Enterprise بإحدى طريقتين، اعتمادًا على ما إذا كان المضيف لديه وصول إلى الإنترنت:
- مفتاح الترخيص عبر الإنترنت - اضبط
BETTERDB_LICENSE_KEY. يتحقق المراقب منه مقابلbetterdb.comويخزّن مؤقتًا رمزًا موقّعًا تم التحقق منه محليًا، بحيث تستمر طبقتك في العمل خلال الانقطاعات القصيرة وإعادة التشغيل. - رمز الترخيص دون اتصال / المعزول عن الشبكة - للمضيفات التي لا تملك وصولًا إلى الإنترنت على الإطلاق (انظر أدناه).
كيف يعمل الترخيص المعزول عن الشبكة
كل استحقاق هو JWT موقّع RS256. يتحقق المراقب منه محليًا مقابل المفاتيح العامة المضمّنة في الصورة - لا يحتاج أبدًا إلى الوصول إلى خادم ترخيص للثقة في الرمز. لذا يمكن لمضيف معزول عن الشبكة تشغيل الطبقات المدفوعة بدون أي اتصال:
- على جهاز متصل بالإنترنت، سجّل الدخول في
betterdb.com/account/licenses و
نزّل رمز الترخيص دون اتصال (
.jwt، Pro/Enterprise). لا يحتوي على أسرار ولا يمكن العبث به - أي تعديل يكسر التوقيع. - انقله إلى المضيف المعزول عن الشبكة بالطريقة التي تريدها (USB، إدارة التكوين، تركيب سر Docker/Kubernetes).
- قدمه عبر
BETTERDB_OFFLINE_LICENSE_FILE(مسار)، أوBETTERDB_OFFLINE_LICENSE(سلسلة مضمّنة)، أو الصقه في الواجهة تحت الإعدادات ← الترخيص ← "بيئة معزولة عن الشبكة؟ فعّل ترخيصًا دون اتصال."
عند تكوين رمز دون اتصال وعدم تعيين BETTERDB_LICENSE_KEY، يقوم
المراقب بـ صفر طلبات صادرة - فحوصات الترخيص والقياس عن بُعد
وتنبيهات التحديث كلها معطلة. يشغّل الطبقة الممنوحة حتى انتهاء صلاحية الرمز (التراخيص
الدائمة تُعاد تنزيلها سنويًا)، ثم يعود إلى Community.```bash
fully offline - no network required
docker volume create betterdb-data docker run --rm -v betterdb-data:/d alpine chown 1001:1001 /d # volume writable by UID 1001 (one-time)
docker run -d --name betterdb-monitor -p 3001:3001
-e DB_HOST=your-valkey-host -e DB_PORT=6379 -e DB_PASSWORD=your-password
-v /path/to/betterdb-license.jwt:/run/secrets/betterdb-license.jwt:ro
-e BETTERDB_OFFLINE_LICENSE_FILE=/run/secrets/betterdb-license.jwt
-v betterdb-data:/app/data
betterdb/monitor
تحقق مع `GET /api/license/status` ← `source: offline-token`, `mode: offline`,
`airGapped: true`.
> **الاستمرارية:** قم بتركيب وحدة تخزين قابلة للكتابة في `/app/data` بحيث يبقى الترخيص دون اتصال
> ورمز السماح لفترة انقطاع الاتصال عبر الإنترنت بعد إعادة التشغيل. تعمل الحاوية كمستخدم **UID 1001**،
> لذا يجب تنفيذ `chown` على وحدة تخزين جديدة لتعود ملكيتها له (كما هو موضح أعلاه) - وإلا
> ستفشل الاستمرارية مع `EACCES … license.jwt`.
للحصول على التدفق الكامل، وأولوية التحقق، ودليل تدوير المفاتيح، راجع
**[التراخيص دون اتصال والمنعزلة عن الشبكة](https://github.com/betterdb-inc/monitor/blob/master/docs/offline-licenses.md)** و
**[مرجع الإعدادات](https://github.com/betterdb-inc/monitor/blob/master/docs/configuration.md#license-configuration)**.
### تفاصيل صورة Docker
- **الصورة الأساسية**: `node:20-alpine`
- **الحجم المضغوط**: ~360MB (`latest` / `-no-ai`) / ~640MB (الصورة المنسوخة مع تبعيات نموذج اللغة المحلي للمساعد الذكي التجريبي)
- **المنصات**: `linux/amd64`, `linux/arm64`
- **المحتوى**: واجهة برمجة التطبيقات الخلفية + ملفات الواجهة الأمامية الثابتة (يتم تقديمها بواسطة Fastify)
- **المستبعد**: دعم SQLite (استخدم PostgreSQL أو تخزين الذاكرة)
### عمليات الحاوية```bash
docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
مخازن التخزين
يقوم BetterDB Monitor بحفظ سجل التدقيق والتحليلات والالتقاطات وبيانات الحالات الشاذة في أحد المخازن الثلاثة التالية:
| المخزن | حالة الاستخدام | ملاحظات |
|---|---|---|
memory | الاختبار، البيئات المؤقتة | الافتراضي في Docker؛ تُفقد جميع البيانات عند إعادة التشغيل |
postgres | الإنتاج | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | التطوير المحلي / CLI | غير مضمن في صور Docker للإنتاج؛ STORAGE_SQLITE_FILEPATH اختياري |
مقاييس Prometheus
يتم عرض المقاييس في GET /api/prometheus/metrics بصيغة نص Prometheus: تدقيق ACL، اتصالات العملاء، أنماط السجل البطيء/سجل الأوامر، الذاكرة، الإنتاجية، مساحة المفاتيح، النسخ المتماثل، إحصائيات فتحات الكتلة، ومقاييس وقت تشغيل Node.js - جميعها مسبوقة بـ betterdb_.```yaml
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
مرجع المقاييس الكامل: [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md) و [docs/prometheus-integration.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-integration.md).
## التطوير
### هيكل المشروع```
betterdb-monitor/
├── apps/
│ ├── api/ # NestJS backend (Fastify)
│ └── web/ # React frontend (Vite)
├── packages/ # Published packages (see below)
├── docs/ # Documentation site (Jekyll)
├── docker-compose.yml # Local Valkey (port 6380) and Redis (port 6382) for testing
└── package.json # Workspace root
الحزم
يوفّر هذا المستودع الأحادي عدة حزم مستقلة. راجع packages/ للحصول على القائمة الكاملة.
| الحزمة | اللغة | السجل |
|---|---|---|
@betterdb/monitor | TypeScript | npm |
@betterdb/mcp | TypeScript | npm |
@betterdb/agent | TypeScript | npm |
@betterdb/semantic-cache | TypeScript | npm |
betterdb-semantic-cache | Python | PyPI |
@betterdb/agent-cache | TypeScript | npm |
betterdb-agent-cache | Python | PyPI |
cache-benchmark | Python | أداة إعادة تشغيل لقياس أداء التخزين المؤقت الدلالي |
مجموعة التقنيات
- الواجهة الخلفية: NestJS مع محول Fastify، و
iovalkeyلاتصالات Valkey/Redis، ووضع TypeScript الصارم. المنفذ 3001. - الواجهة الأمامية: React + TypeScript، وVite، وTailwindCSS، وRecharts. خادم التطوير على المنفذ 5173.
- المستودع الأحادي: مساحات عمل pnpm + Turborepo.
الإعداد المحلي
المتطلبات الأساسية: Node.js >= 20.0.0، وpnpm >= 9.0.0، وDocker.```bash pnpm install cp .env.example .env pnpm docker:dev # local Valkey (6380) and Redis (6382) pnpm dev # web on :5173, api on :3001
للاتصال بـ Redis بدلاً من Valkey، قم بتعيين `DB_PORT=6382` في ملف `.env`.```bash
pnpm dev:api # API only
pnpm dev:web # frontend only
pnpm docker:dev:down # stop local databases
pnpm build # production build
pnpm test # API tests
Docker image builds:```bash pnpm docker:build # local build pnpm docker:publish # multi-arch build & push (requires buildx)
### إضافة ميزات جديدة
1. أضف نقاط نهاية جديدة في `apps/api/src/`
2. أضف استدعاءات API المقابلة في `apps/web/src/api/`
3. أضف أنواعًا مشتركة في `packages/shared/src/types/`
### نمط الكود
- وضع TypeScript الصارم، أنواع إرجاع صريحة، بدون `any`
- تم تكوين ESLint + Prettier
## الترخيص
- المحتوى الموجود تحت `docs/` مرخّص بموجب CC BY-SA 4.0.
- المحتوى الموجود تحت `proprietary/` يخضع لترخيص تجاري (انظر `proprietary/LICENSE`). هذه الميزات مجانية خلال الوصول المبكر.
- كل شيء آخر هو [MIT](https://github.com/betterdb-inc/monitor/blob/master/LICENSE).