انتقل إلى المحتوى الرئيسي

دليل تكوين وقت التشغيل لمراقبة RAN

فهم config/runtime.exs


جدول المحتويات

  1. نظرة عامة
  2. تكوين قاعدة البيانات
  3. نقاط نهاية الويب
  4. تكوين السجل
  5. تكامل نوكيا
  6. تكوين InfluxDB
  7. أفضل الممارسات للتكوين

نظرة عامة

ملف config/runtime.exs هو الملف الرئيسي لتكوين مراقبة RAN. يتم تقييمه في وقت التشغيل (عند بدء التطبيق)، مما يتيح لك تكوين جميع جوانب سلوك النظام.

ما الذي يتم تكوينه:

  • اتصالات قاعدة البيانات (MySQL)
  • نقاط نهاية خادم الويب والمنافذ
  • تفاصيل محطة قاعدة نوكيا
  • قاعدة بيانات InfluxDB الزمنية
  • سلوك السجل
  • بيانات الاعتماد الأمنية

موقع الملف:

config/runtime.exs

من يجب أن يستخدم هذا الدليل

مهم: يتم إجراء جميع تكوينات مراقبة RAN بواسطة Omnitouch كجزء من النشر الأولي والدعم المستمر. يتم توفير هذا الدليل لـ:

  • المستخدمين المتقدمين الذين يرغبون في فهم تكوين النظام
  • النشر الذاتي الإدارة حيث يقوم العملاء بالحفاظ على تكويناتهم الخاصة
  • استكشاف الأخطاء وإصلاحها وفهم كيفية تكوين النظام
  • النشر المخصص مع متطلبات محددة

إذا كنت عميلاً مُدارًا بواسطة Omnitouch، فاتصل بدعم Omnitouch لأي تغييرات في التكوين.

لفهم البيانات التي يتم جمعها، راجع مرجع عداد نوكيا. لإنشاء لوحة المعلومات، راجع تكامل Grafana.


تكوين قاعدة البيانات

اتصال MySQL/MariaDB

config :ran_monitor, RanMonitor.Repo,
username: "omnitouch",
password: "omnitouch2024",
hostname: "localhost",
database: "ran_monitor",
stacktrace: true,
show_sensitive_data_on_connection_error: true,
pool_size: 10

الغرض: يقوم بتكوين الاتصال بقاعدة بيانات MySQL المستخدمة لإدارة حالة الجلسة والبيانات التشغيلية.

شرح المعلمات

username (String)

  • حساب مستخدم قاعدة البيانات
  • القيمة الحالية: "omnitouch"
  • الاستخدام: يجب أن يكون لديه امتيازات CREATE وSELECT وINSERT وUPDATE وDELETE
  • الأمان: يُفضل استخدام مستخدم مخصص بأقل الامتيازات المطلوبة

password (String)

  • كلمة مرور قاعدة البيانات للمصادقة
  • القيمة الحالية: "omnitouch2024"
  • الأمان: يجب تخزينها في متغيرات البيئة في الإنتاج
  • التوصية: استخدم كلمات مرور قوية وفريدة

hostname (String)

  • عنوان خادم قاعدة البيانات
  • القيمة الحالية: "localhost"
  • الخيارات:
    • "localhost" - قاعدة البيانات على نفس الجهاز
    • "127.0.0.1" - اتصال TCP بالجهاز المحلي
    • "10.179.2.135" - عنوان IP لخادم قاعدة البيانات البعيد
    • "db.example.com" - اسم مضيف قاعدة البيانات البعيد

database (String)

  • اسم قاعدة البيانات للاستخدام
  • القيمة الحالية: "ran_monitor"
  • ملاحظة: يجب أن تكون قاعدة البيانات موجودة قبل بدء مراقبة RAN
  • الإنشاء: CREATE DATABASE ran_monitor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

stacktrace (Boolean)

  • تضمين تتبع المكدس في رسائل الخطأ
  • القيمة الحالية: true
  • التطوير: true - يساعد في تصحيح الأخطاء
  • الإنتاج: false - يقلل من ضوضاء السجل

show_sensitive_data_on_connection_error (Boolean)

  • عرض بيانات الاعتماد في رسائل خطأ الاتصال
  • القيمة الحالية: true
  • التطوير: true - يسهل استكشاف الأخطاء
  • الإنتاج: false - يمنع كشف بيانات الاعتماد في السجلات

pool_size (Integer)

  • عدد اتصالات قاعدة البيانات للحفاظ عليها
  • القيمة الحالية: 10
  • دليل الحجم:
    • 1-5 أجهزة: pool_size: 5
    • 6-20 جهاز: pool_size: 10
    • 21-50 جهاز: pool_size: 15
    • 50+ جهاز: pool_size: 20
  • الصيغة: حوالي 2 اتصالات لكل محطة قاعدة + 5 لواجهة الويب

نقاط نهاية الويب

تعمل مراقبة RAN على تشغيل عدة خوادم ويب لأغراض مختلفة.

نقطة نهاية SOAP/API الرئيسية

config :ran_monitor, RanMonitor.Web.Endpoint,
http: [ip: {0, 0, 0, 0}, port: 8080],
check_origin: false,
secret_key_base: "v5tOS1/QRonjwOky7adGGfkBbrJmiJyXhpesJy/jvSZhqLZkREV+rlo1/pR8lkbu",
server: true

الغرض: نقطة النهاية الرئيسية للتواصل مع محطة القاعدة (واجهة SOAP لبروتوكول Nokia NE3S).

ip (Tuple)

  • الواجهة التي سيتم الربط بها
  • القيمة الحالية: {0, 0, 0, 0} (جميع الواجهات)
  • الخيارات:
    • {0, 0, 0, 0} - الاستماع على جميع واجهات الشبكة
    • {127, 0, 0, 1} - الاستماع فقط على localhost
    • {10, 179, 2, 135} - الاستماع على عنوان IP محدد

port (Integer)

  • رقم منفذ TCP
  • القيمة الحالية: 8080
  • ملاحظة: يجب تكوين محطات القاعدة لإرسال البيانات إلى هذا المنفذ
  • جدار الحماية: تأكد من فتح المنفذ لعنوان IP الخاص بمحطات القاعدة

check_origin (Boolean)

  • تحقق من رؤوس الأصل WebSocket/HTTP
  • القيمة الحالية: false
  • الشرح: تم تعيينه إلى false لواجهة API SOAP (غير واجهة ويب موجهة للمستخدم)

secret_key_base (String)

  • مفتاح التوقيع التشفيري للجلسات
  • القيمة الحالية: سلسلة عشوائية مكونة من 64 حرفًا
  • الإنشاء: mix phx.gen.secret
  • الأمان: احتفظ بهذا سريًا، ولا تقم بالتزامه في المستودعات العامة
  • التأثير: تغيير هذا يبطل جميع الجلسات الحالية

server (Boolean)

  • بدء نقطة النهاية عند بدء التطبيق
  • القيمة الحالية: true
  • دائمًا: يجب أن تكون true في runtime.exs

واجهة المستخدم الخاصة بلوحة التحكم

# احصل على منفذ HTTPS من متغير البيئة، افتراضيًا إلى 9443
https_port = String.to_integer(System.get_env("CONTROL_PANEL_HTTPS_PORT") || "9443")

config :control_panel, ControlPanelWeb.Endpoint,
url: [host: "0.0.0.0", port: https_port, scheme: "https"],
https: [
ip: {0, 0, 0, 0},
port: https_port,
keyfile: "priv/cert/omnitouch.pem",
certfile: "priv/cert/omnitouch.crt"
]

الغرض: نقطة نهاية HTTPS لواجهة المستخدم الخاصة بلوحة التحكم المستندة إلى الويب.

متغيرات البيئة:

  • CONTROL_PANEL_HTTPS_PORT - رقم منفذ HTTPS (افتراضي: 9443)
    • قم بتعيين هذا المتغير البيئي لتغيير منفذ HTTPS في وقت التشغيل
    • مثال: export CONTROL_PANEL_HTTPS_PORT=8443

url (قائمة الكلمات الرئيسية)

  • تكوين URL الخارجي
  • host: "0.0.0.0" - قبول الاتصالات من أي مضيف
  • port: يستخدم متغير https_port (قابل للتكوين عبر CONTROL_PANEL_HTTPS_PORT)
  • scheme: "https" - استخدام بروتوكول HTTPS

https (قائمة الكلمات الرئيسية)

  • تكوين خادم HTTPS
  • ip: {0, 0, 0, 0} - الربط بجميع الواجهات
  • port: يستخدم متغير https_port (يجب أن يتطابق مع منفذ url)
  • keyfile: مسار المفتاح الخاص SSL
  • certfile: مسار شهادة SSL

ملفات شهادة SSL:

  • يجب أن تكون شهادات SSL/TLS صالحة
  • تعمل الشهادات الموقعة ذاتيًا في بيئات المختبر
  • يجب أن تستخدم الإنتاج شهادات موقعة من CA
  • لإنشاء شهادة موقعة ذاتيًا:
    openssl req -newkey rsa:2048 -nodes -keyout omnitouch.pem -x509 -days 365 -out omnitouch.crt

نقطة نهاية Webhook لنوكيا AirScale

config :ran_monitor, RanMonitor.Web.Nokia.Airscale.Endpoint,
url: [host: "0.0.0.0"],
http: [ip: {0, 0, 0, 0}, port: 9076],
server: true

الغرض: يستقبل بيانات الأداء في الوقت الحقيقي من محطات قاعدة نوكيا AirScale.

port (Integer)

  • القيمة الحالية: 9076
  • ملاحظة: يجب أن يتطابق مع المنفذ المكون في محطة القاعدة PMCADM (rTpmCollEntityPortNum)
  • التنسيق: يجب أن يتطابق هذا المنفذ مع ما قمت بتكوينه في محرر معلمات Nokia WebLM

تكوين السجل

config :logger,
level: :info

config :logger, :console,
format: "$time $metadata[$level] $message\n",
metadata: [:request_id]

مستوى السجل

level (Atom)

  • يتحكم في وضوح السجل
  • القيمة الحالية: :info
  • الخيارات:
    • :debug - مفصل للغاية، جميع التفاصيل
    • :info - العمليات العادية، موصى به للإنتاج
    • :warning - فقط التحذيرات والأخطاء
    • :error - فقط الأخطاء

متى تستخدم كل مستوى:

  • التطوير: :debug - رؤية جميع العمليات الداخلية
  • الإنتاج: :info - توازن بين الرؤية والضوضاء
  • استكشاف الأخطاء: تعيين مؤقتًا إلى :debug، ثم العودة
  • الإنتاج الهادئ: :warning - تنبيه فقط عند وجود مشكلات

تنسيق وحدة التحكم

format (String)

  • كيف تظهر رسائل السجل
  • القيمة الحالية: "$time $metadata[$level] $message\n"
  • المتغيرات:
    • $time - الطابع الزمني
    • $metadata - معلومات سياقية
    • $level - مستوى السجل (معلومات، خطأ، إلخ.)
    • $message - رسالة السجل الفعلية

metadata (قائمة من الذرات)

  • سياق إضافي للتضمين
  • القيمة الحالية: [:request_id]
  • request_id: تتبع طلبات HTTP الفردية عبر النظام

تكامل نوكيا

تقوم هذه القسم بتكوين كيفية تواصل مراقبة RAN مع محطات قاعدة نوكيا.

config :ran_monitor,
general: %{
mcc: "505",
mnc: "57"
},
nokia: %{
ne3s: %{
webhook_url: "http://10.5.198.200:9076/webhook",
private_key: Path.join(Application.app_dir(:ran_monitor, "priv"), "external/nokia/ne.key.pem"),
public_key: Path.join(Application.app_dir(:ran_monitor, "priv"), "external/nokia/ne.cert.der"),
reregister_interval: 30
},
airscales: [
%{
address: "10.7.15.67",
name: "ONS-Lab-Airscale",
port: "8080",
web_username: "Nemuadmin",
web_password: "nemuuser"
}
]
}

الإعدادات العامة

mcc (String)

  • رمز الدولة المحمول
  • القيمة الحالية: "505"
  • الاستخدام: يحدد الدولة لشبكات 3GPP
  • التنسيق: 3 أرقام
  • المرجع: ITU-T E.212

mnc (String)

  • رمز الشبكة المحمولة
  • القيمة الحالية: "57"
  • الاستخدام: يحدد مشغل الشبكة المحدد
  • التنسيق: 2 أو 3 أرقام

تكوين NE3S (بروتوكول Nokia NE3S)

webhook_url (String)

  • URL حيث ترسل محطات القاعدة الإشعارات
  • القيمة الحالية: "http://10.5.198.200:9076/webhook"
  • التنسيق: http://<ran-monitor-ip>:<port>/webhook
  • عنوان IP: يجب أن يكون عنوان IP حيث تعمل مراقبة RAN
  • المنفذ: يجب أن يتطابق مع منفذ RanMonitor.Web.Nokia.Airscale.Endpoint (9076)
  • المسار: دائمًا /webhook

private_key (String - مسار الملف)

  • المفتاح الخاص لمصادقة المدير
  • القيمة الحالية: priv/external/nokia/ne.key.pem
  • التنسيق: مفتاح خاص مشفر بتنسيق PEM
  • الأمان: احتفظ بهذا الملف آمنًا، ولا تشاركه أبدًا
  • الإنشاء: مقدمة من نوكيا أو تم إنشاؤها باستخدام OpenSSL

public_key (String - مسار الملف)

  • الشهادة العامة لهوية المدير
  • القيمة الحالية: priv/external/nokia/ne.cert.der
  • التنسيق: شهادة مشفرة بتنسيق DER
  • الاستخدام: تُرسل إلى محطة القاعدة أثناء التسجيل
  • الزوج: يجب أن تتوافق مع private_key

reregister_interval (Integer)

  • مدى تكرار إعادة التسجيل مع محطات القاعدة (بالثواني)
  • القيمة الحالية: 30
  • الشرح: تنتهي الجلسات، وتساعد إعادة التسجيل الدورية في الحفاظ على الاتصال
  • النطاق: 30-300 ثانية
  • التوصية: 30 ثانية لمراقبة موثوقة

مح��ات قاعدة AirScale

airscales (قائمة من الخرائط)

  • قائمة بمحطات قاعدة Nokia AirScale للمراقبة
  • القيمة الحالية: محطة قاعدة واحدة مكونة

يتطلب كل إدخال محطة قاعدة:

address (String)

  • عنوان IP لمحطة القاعدة
  • القيمة الحالية: "10.7.15.66"
  • التنسيق: عنوان IPv4 كسلسلة
  • الشبكة: يجب أن تكون قابلة للوصول من خادم مراقبة RAN
  • التحقق: ping 10.7.15.66 يجب أن ينجح

name (String)

  • الاسم الودي للتعريف
  • القيمة الحالية: "ONS-Lab-Airscale"
  • الاستخدام: يظهر في واجهة الويب، السجلات، ووسوم InfluxDB
  • التوصية: استخدم أسماء وصفية (رموز المواقع، المواقع، إلخ.)
  • أمثلة:
    • "NYC-Site-A-BS1"
    • "LAX-Tower-Main"
    • "TestLab-Airscale-01"

port (String)

  • منفذ واجهة الإدارة على محطة القاعدة
  • القيمة الحالية: "8080"
  • المعيار: تستخدم نوكيا AirScale عادةً 8080
  • التحقق: تحقق من وثائق محطة القاعدة
  • ملاحظة: القيمة هي سلسلة، وليست عدد صحيح

web_username (String)

  • اسم المستخدم لمصادقة WebLM
  • القيمة الحالية: "Nemuadmin"
  • الاستخدام: يُستخدم لاستدعاءات API لإدارة محطة القاعدة
  • الامتيازات: يجب أن يكون لديه حق الوصول للقراءة/الكتابة للتكوين
  • ملاحظة: حساسة لحالة الأحرف

web_password (String)

  • كلمة المرور لمصادقة WebLM
  • القيمة الحالية: "nemuuser"
  • الأمان: يجب تخزينها في متغيرات البيئة في الإنتاج
  • الدوران: تغييرها بانتظام وفقًا لسياسة الأمان

إضافة محطات قاعدة متعددة

لمراقبة محطات قاعدة متعددة، أضف إدخالات إضافية إلى قائمة airscales:

airscales: [
%{
address: "10.7.15.66",
name: "ONS-Lab-Airscale",
port: "8080",
web_username: "Nemuadmin",
web_password: "nemuuser"
},
%{
address: "10.7.15.67",
name: "Site-A-Tower-1",
port: "8080",
web_username: "admin",
web_password: "password123"
},
%{
address: "192.168.100.50",
name: "Site-B-Indoor",
port: "8080",
web_username: "admin",
web_password: "different_password"
}
]

تكوين InfluxDB

config :ran_monitor, RanMonitor.InfluxDbConnection,
auth: [
username: "monitor",
password: "sideunderTexasgalaxyview_61"
],
database: "nokia-monitor",
host: "10.179.2.135"

الغرض: يقوم بتكوين الاتصال بقاعدة بيانات InfluxDB الزمنية لتخزين المقاييس، والتنبيهات، وبيانات التكوين.

شرح المعلمات

auth (قائمة الكلمات الرئيسية)

  • بيانات الاعتماد للمصادقة على InfluxDB
  • username: حساب مستخدم InfluxDB ("monitor")
  • password: كلمة مرور InfluxDB ("sideunderTexasgalaxyview_61")
  • ملاحظة: بالنسبة لـ InfluxDB 2.x، قد يكون هذا رمز API بدلاً من ذلك

database (String)

  • اسم الدلو/قاعدة البيانات في InfluxDB
  • القيمة الحالية: "nokia-monitor"
  • InfluxDB 1.x: اسم قاعدة البيانات
  • InfluxDB 2.x: اسم الدلو
  • الإنشاء: يجب إنشاؤه قبل بدء مراقبة RAN
    # InfluxDB 1.x
    influx -execute 'CREATE DATABASE "nokia-monitor"'

    # InfluxDB 2.x
    influx bucket create -n nokia-monitor -o your-org

host (String)

  • عنوان خادم InfluxDB
  • القيمة الحالية: "10.179.2.135"
  • التنسيق: عنوان IP أو اسم المضيف
  • المنفذ: يُفترض استخدام المنفذ الافتراضي InfluxDB (8086)
  • أمثلة:
    • "localhost" - نفس الخادم مثل مراقبة RAN
    • "10.179.2.135" - خادم InfluxDB البعيد
    • "influxdb.example.com" - اسم المضيف

ملاحظات اتصال InfluxDB

الوصول الشبكي:

  • يجب أن تكون مراقبة RAN قادرة على الوصول إلى خادم InfluxDB على المنفذ 8086
  • تحقق: curl http://10.179.2.135:8086/ping

سياسات الاحتفاظ:

  • يتم تعيينها عبر واجهة المستخدم الخاصة بصفحة الاحتفاظ بالبيانات
  • الافتراضي: 30 يومًا (720 ساعة)
  • يمكن تخصيصها لكل محطة قاعدة

لوحة معلومات الاحتفاظ بالبيانات

أداء الكتابة:

  • تتلقى InfluxDB الكتابات في كل فترة جمع (60 ثانية افتراضيًا)
  • تولد كل محطة قاعدة مئات نقاط البيانات لكل فترة
  • راقب مساحة القرص الخاصة بـ InfluxDB بانتظام

أفضل الممارسات للتكوين

الأمان

1. حماية البيانات الحساسة

# بدلاً من كلمات المرور المدمجة:
password: "omnitouch2024"

# استخدم متغيرات البيئة:
password: System.get_env("DB_PASSWORD") || "default_password"

2. تقييد أذونات الملفات

chmod 600 config/runtime.exs
chown ran_monitor:ran_monitor config/runtime.exs

3. عدم الالتزام بالأسرار

  • استخدم .gitignore لـ runtime.exs إذا كان يحتوي على أسرار
  • استخدم متغيرات البيئة أو أنظمة إدارة الأسرار
  • قم بتدوير كلمات المرور بانتظام

الأداء

1. حجم مجموعة قاعدة البيانات

  • راقب استخدام الاتصال
  • زيادة pool_size إذا كنت ترى أخطاء انتهاء المهلة في الاتصال
  • تحتاج كل جهاز إلى ~2 اتصالات أثناء الاستطلاع النشط

2. فترات الجمع

  • توازن بين دقة البيانات وحمل النظام
  • تعمل فترات 60 ثانية بشكل جيد لمعظم النشر
  • فترات أقصر (15 ثانية) لاستكشاف الأخطاء

3. تحسين InfluxDB

  • استخدم سياسات الاحتفاظ لإدارة استخدام القرص
  • راقب أداء كتابة InfluxDB
  • اعتبر خادم InfluxDB منفصل للنشر الكبير

الموثوقية

1. تكوين الشبكة

  • استخدم عناوين IP ثابتة لجميع المكونات
  • تحقق من مسارات الشبكة بين مراقبة RAN ومحطات القاعدة
  • اختبر الاتصال قبل إضافة الأجهزة
  • قم بتكوين قواعد جدار الحماية بشكل مناسب

2. استراتيجية السجل

  • التطوير: :debug لاستكشاف الأخطاء بالتفصيل
  • الإنتاج: :info لرؤية العمليات
  • الأنظمة الحرجة: اعتبر تجميع السجلات الخارجية

3. مراقبة مراقبة RAN

  • راقب المراقب (مراقبة المراقب)
  • راقب أخطاء اتصال قاعدة البيانات
  • تتبع معدلات نجاح كتابة InfluxDB
  • تنبيه عند انقطاع الاتصال بمحطات القاعدة

الصيانة

1. تغييرات التكوين

  • دائمًا قم بعمل نسخة احتياطية من runtime.exs قبل التغييرات
  • اختبر التكوين في التطوير أولاً
  • وثق التغي��رات بالتعليقات
  • أعد تشغيل مراقبة RAN بعد تغييرات التكوين

2. إضافة محطات قاعدة

# 1. تحرير runtime.exs
vim config/runtime.exs

# 2. التحقق من بناء جملة Elixir
elixir -c config/runtime.exs

# 3. إعادة تشغيل التطبيق
systemctl restart ran_monitor

3. اعتبارات التوسع

  • راقب استخدام الموارد (CPU، الذاكرة، الشبكة)
  • زيادة حجم مجموعة قاعدة البيانات مع زيادة عدد الأجهزة
  • اعتبر مثيل InfluxDB منفصل عند 50+ جهاز
  • راقب مساحة القرص لكل من MySQL وInfluxDB

مثال: تكوين كامل

إليك مثال كامل مع محطات قاعدة متعددة وأفضل الممارسات المطبقة:

import Config

# =============================================================================
# تكوين قاعدة البيانات
# =============================================================================

config :ran_monitor, RanMonitor.Repo,
username: System.get_env("DB_USERNAME") || "ran_monitor_user",
password: System.get_env("DB_PASSWORD") || "change_this_password",
hostname: System.get_env("DB_HOST") || "localhost",
database: "ran_monitor",
stacktrace: false, # الإنتاج: إخفاء تتبع المكدس
show_sensitive_data_on_connection_error: false, # الإنتاج: إخفاء بيانات الاعتماد
pool_size: 15 # 6 محطات قاعدة * 2 + 3 زيادة

# =============================================================================
# نقاط نهاية الويب
# =============================================================================

config :ran_monitor, RanMonitor.Web.Endpoint,
http: [ip: {0, 0, 0, 0}, port: 8080],
check_origin: false,
secret_key_base: System.get_env("SECRET_KEY_BASE") || "generate_with_mix_phx_gen_secret",
server: true

config :control_panel, ControlPanelWeb.Endpoint,
url: [host: "0.0.0.0", port: 9443, scheme: "https"],
https: [
ip: {0, 0, 0, 0},
port: 9443,
keyfile: "priv/cert/server.key",
certfile: "priv/cert/server.crt"
]

config :ran_monitor, RanMonitor.Web.Nokia.Airscale.Endpoint,
url: [host: "0.0.0.0"],
http: [ip: {0, 0, 0, 0}, port: 9076],
server: true

# =============================================================================
# تكوين السجل
# =============================================================================

config :logger,
level: :info # إعداد الإنتاج

config :logger, :console,
format: "$time $metadata[$level] $message\n",
metadata: [:request_id]

# =============================================================================
# تكوين نوكيا
# =============================================================================

config :ran_monitor,
general: %{
mcc: "001",
mnc: "001"
},
nokia: %{
ne3s: %{
webhook_url: "http://10.179.2.135:9076/webhook",
private_key: Path.join(Application.app_dir(:ran_monitor, "priv"), "external/nokia/ne.key.pem"),
public_key: Path.join(Application.app_dir(:ran_monitor, "priv"), "external/nokia/ne.cert.der"),
reregister_interval: 30
},
airscales: [
# الموقع A - البرج الرئيسي
%{
address: "10.7.15.66",
name: "Site-A-Main-Tower",
port: "8080",
web_username: "admin",
web_password: System.get_env("BS_SITE_A_PASSWORD") || "password1"
},

# الموقع A - البرج الاحتياطي
%{
address: "10.7.15.67",
name: "Site-A-Backup-Tower",
port: "8080",
web_username: "admin",
web_password: System.get_env("BS_SITE_A_PASSWORD") || "password1"
},

# الموقع B - داخلي
%{
address: "10.7.16.10",
name: "Site-B-Indoor-DAS",
port: "8080",
web_username: "admin",
web_password: System.get_env("BS_SITE_B_PASSWORD") || "password2"
},

# الموقع C - على السطح
%{
address: "192.168.100.50",
name: "Site-C-Rooftop",
port: "8080",
web_username: "admin",
web_password: System.get_env("BS_SITE_C_PASSWORD") || "password3"
},

# المختبر - معدات الاختبار
%{
address: "10.5.198.100",
name: "Lab-Test-Airscale-01",
port: "8080",
web_username: "Nemuadmin",
web_password: "nemuuser"
},

# المختبر - التطوير
%{
address: "10.5.198.101",
name: "Lab-Dev-Airscale-02",
port: "8080",
web_username: "Nemuadmin",
web_password: "nemuuser"
}
]
}

# =============================================================================
# تكوين InfluxDB
# =============================================================================

config :ran_monitor, RanMonitor.InfluxDbConnection,
auth: [
username: System.get_env("INFLUX_USERNAME") || "monitor",
password: System.get_env("INFLUX_PASSWORD") || "change_this_password"
],
database: "nokia-monitor",
host: System.get_env("INFLUX_HOST") || "10.179.2.135"

الوثائق ذات الصلة