پیامهای موتور قواعد #
پیام موتور قواعد یک داده به فرمت سریال (serializable) و ساختار یافته است که نشان دهنده پیامهای متفاوت در سیستم است مانند:
- دادههای ورودی تلهمتری، صفتها یا فراخوانی RPC از دستگاهها
- رویدادهای چرخه عمر موجودیتها: created, updated, deleted, assigned, unassigned, attributes updated
- رویدادهای وضعیت دستگاه: connected, disconnected, active, inactive و غیره
- دیگر رویداد های سیستم
پیام موتور قواعد شامل اطلاعات زیر است
- شناسه پیام (Message ID): آیدی واحد برای هر پیام
- مولد پیام (Originator of the message): دستگاه، دارایی یا دیگر موجودیتهایی پیام را ایجاد کرده اند
- نوع پیام (Type of the message): نوع پیام که میتواند Post Telemetry یا Inactivity Event و یا غیر باشد
- محتوای پیام (Payload of the message): محتوای پیام که به صورت یک داده JSON است
- فراداده (Metadata): لیستی از کلید-مقدارهایی که دادههای اضافی درباره پیام را دربر دارد
گره قاعده (Rule Node) #
گره قاعده اولین مؤلفه موتور قواعد است که یک داده ورودی (در یک لحظه) را پردازش و یک یا چند پیام خروجی را تولید میکند. گره قاعده اصلیترین واحد منطق موتور قاعده است. یک گره قاعده میتواند عملیاتی همچون فیلتراسیون، تبدیل، اعمال یک عملیات خاص یا ارتباط با سیستمهای خارجی انجام دهد.
روابط گره قاعده (Rule Engine Relation) #
گرههای قواعد میتوانند با چندین گره قاعده در ارتباط باشد. هر رابطه دارای نوع رابطه (relation type)، یک برچسب (label) که مشخص کننده منطق رابطه است. زمانیکه گره قاعده پیامهای خروجی خود را تولید میکند همیشه مشخص کننده نوع رابطهای است که برا ارسال پیام به دیگر گرههای قاعده استفاده میشود.
معمولا روابط گرههای قاعده موفق آمیز (Success) و ناموفق (Failure) هستند. گرههای قاعدهای که نمایانگر عملیات منطقی هستند درست (True) و غلط (False) هستند. دیگر گرههای قاعده میتوانند از روابط دیگری همچون Post Telemetry، Attributes Updated، Entity Created استفاده نمایند.
زنجیره قواعد (Rule Chain) #
زنجیره قواعد مجموعهای منطقی متشکل از چندین گره قاعده و روابط بین آنهاست. برای مثال زنجیره قاعده زیر عملیات زیر را انجام خواهد داد:
- ذخیره سازی تمام دادههای تلهمتری در پایگاه دادههای ویرالینک
- ایجاد هشدار (High Temperature Alarm) در صورتی که دما در پیام بیشتر از 50 درجه سانتی گراد شود
- ایجاد هشدار (Low Temperature Alarm) در صورتی که دما در پیام کمتر از 40- درجه سانتی گراد شود
- لاگ عدم موفقیت (failure) در اجرای اسکریپت چک کردن دما در صورتی که در اسکریپت ایراد منطقی (logical) یا دستوری (syntax) وجود داشته باشد.

شما به عنوان مدیر (Tenant) میتوانید یک زنجیره قواعد ریشه (Root Rule Chain) و چندین زنجیره قواعد اختیاری دیگر ایجاد کنید. زنجیره قواعد ریشه تمام پیامهای ورودی را کنترل مینماید و میتواند آنها را برای پردازش بیشتر به دیگر زنجیرههای قواعد ارسال نماید. همچنین زنجیرههای قواعد غیر ریشه میتوانند پیامها را به یکدیگر ارسال نمایند.
برای مثال زنجیره قاعده زیر عملیات زیر را انجام دهد:
- ایجاد هشدار (High Temperature Alarm) در صورتی که دما در پیام بیشتر از 50 درجه سانتی گراد شود.
- حذف هشدار (High Temperature Alarm) در صورتی که دما در پیام کمتر از 50 درجه سانتی گراد شود
- ارسال رویداد های Created و Cleared هشدارها به دیگر زنجیره قواعد برای کنترل هشدارهای متناظر با کاربران

نتیجه پردازش پیام #
سه حالت ممکن برای نتیجه پردازش پیام وجود دارد: موفق آمیز (Success)، ناموفق (Failure) و پایان مهلت اجرا (Timeout). در صورتی که پردازش آخرین گره در زنجیره قواعد با موفقیت پردازش شود نتیجه پردازش پیام با برچسب Success علامت گذری میشود. در صورتی که پردازش پیام در یکی از گرههای زنجیره قواعد با عدم موفقیت مواجه شود و هیچ گرهای نتواند آن عدم موفقیت را کنترل کند، پیام با برچسب Failure برچسب گذاری میشود. در صورتی که زمان پردازش پیام از حداکثر مهلت زمان تعیین شده عبور کند پیام با برچسب Timeout علامت گذاری میشود.
بیایید تا حالت های ممکن برای دیاگرام زیر را باهم بررسی کنیم:

اگر اسکریپت موجود در گره Transformation (وظیفه این گره تبدیل پیام ها است) با عدم موفقیت مواجه شود، پیام با برچسب Failed علامت گذاری نخواهد شد، چون با رابطه Failure به گره Save to DB وصل است که این گره یعنی گره Save to DB که پیام Failure را کنترل میکند. اما در صورتی که اسکریپت موجود در گره Transformation با موفقیت اجرا شود، پیام توسط گره Rest API Call به سیستم خارجی فرستاده میشود. در مواقعی سیستم خارجی به دلایلی مثل بار کاری زیاد باعث هنگ کردن درخواست Rest میشود. فرض می کنیم که حداکثر مهلت تعیین شده برای هر پیام ۲۰ ثانیه است. زمان اجرای پردازش گره Transformation را در نظر نمیگیریم زیرا زمان پردازش این گره کمتر از ۱ میلی ثانیه است. بنابراین در صورتی که گره Rest API Call بتواند در زمان کمتر از ۲۰ ثانیه به درخواست پاسخ دهد پیام با برچسب Success علامت گذاری می شود. و به همان صورت اگر گره Save to DB در زمان کمتر از ۲۰ ثانیه بتواند پیام را پردازش کند پیام با برچسب Success علامت گذاری میشود. اما در صورتی که هر کدام از گرههای Rest API Call یا گره Save to DB نتواند در مدت زمان ۲۰ ثانیه پردازش خود را انجام دهند و به اصطلاح هنگ کند پیام با برچسب Timed-out علامت گذاری می شود.
پیامهای از پیش تعریف شده #
برای مشاهده جدول لیست پیامهای تعریف شده اینجا کلیک کنید.
انواع گره قاعده (Rule Node Types) #
تمام گرههای قاعده بر اساس ماهیتهای آنها گروه بندی می شوند:
- گرههای فیلتراسیون (Filter Nodes) – برای فیلتر کردن و مسیر یابی پیامهای ورودی
- گرههای غنی سازی (Enrichment Nodes) – برای بروز رسانی دادههای meta-data در پیامهای ورودی
- گرههای تبدیل کننده (Transformation Nodes) – برای تغییر فیلدهای پیامهای ورودی مانند Originator، Type، Payload، Metadata
- گرههای عملیاتی (Action Nodes) – برای انجام عملیات متفاوت بر اساس پیامهای ورودی
- گرههای جانبی (Extra Nodes) – برای ارتباط با سیستمهای خارجی
پیکربندی #
هر گره میتواند پیکربندی منحصر به فردی داشته باشد. برای مثال گره Filter-script به وسیله توابع JS برای پردازش دادههای ورودی پیکربندی میشوند. پیکربندی گره External – send email به شما اجازه می دهد تا پارامتر های ایمیل سرور خود را وارد نمایید.
صفحه پیکربندی گره قاعده با دو بار کلیک روی گره در ویرایشگر زنجیره قواعد باز می شود.

تست توابع جاوا اسکریپت (JavaScript) #
برخی از گرههای قاعده رابط کاربری (UI) منحصر به فردی دارد که به کاربران اجازه تست کردن توابع JS را میدهد. زمانی که روی دکمه تست کردن تابع (Test Filter Function) کلیک کردین، شما صفحه ویرایشگر JS را خواهید دید که به شما اجازه میدهد تا پارامترهای خود را به صورت ورودی وارد کرده و نتایج تابع خود را مشاهده نمایید.

شما میتوانید فیلدهای زیر را تعریف نمایید
- Message Type در فیلد سمت بالا چپ
- Message Payload در سمت چپ قسمت پیام
- Metadata در سمت راست قسمت Metadata
- اسکریپت JS در قسمت فیلتر
بعد از فشردن دکمه تست خروجی در سمت راست در قسمت خروجی (Output) نمایش داده خواهد شد
ایراد یابی (Debugging) #
ویرالینک به شما امکان مشاهده پیام های ورودی و خروجی به ازای هر گره قاعده را میدهد. برای فعال سازی حالت ایراد یابی (Debugging)، گزینه Debug Mode را در صفحه پیکربندی اصلی گره قاعده انتخاب نمایید. به قسمت پیکربندی مراجعه نمایید.
بعد از اینکه گزینه Debug را فعال کردین، کاربر میتواند تمام پیامهای ورودی و خروجی را مشاهده نماید. عکس زیر نمونه ای از پیام های debug است.

درونریزی / برونریزی #
شما میتوانید زنجیره قواعد خود را به فرمت JSON خروجی (Export) بگیرید و در آن هر زمان که بخواهید درونریزی (Import) نمایید.
برای خروجی گرفتن از زنجیره قواعد به صفحه زنجیره قواعد رفته و روی دکمه برونریزی(Export) روی زنجیره قواعد مد نظر خود کلیک نمایید.
برای وارد کردن زنجیره قواعد در همان صفحه روی دکمه “+” در پایین صفحه کلیک کرده و دکمه درونریزی(Import) را فشار دهید.