আপডেট 3/29/21: https://coronavirusapi.com/ সম্প্রতি ফ্রি অ্যাক্সেস বন্ধ করলো, শুধু রেজিস্টার্ড ফার্স্ট-রেসপন্ডারদের জন্য উপলব্ধ। এতে দুর্ভাগ্যক্রমে করোনাভাইরাস কেস ভিজ্যুয়ালাইজেশন প্রজেক্ট ডেমো আর কাজ করবে না, কিন্তু আমাদের হিন্টগুলো অন্যান্য অনেক ইমপ্লিমেন্টেশনের জন্য এখনও উপযোগী থাকবে যখন আপনাকে RedisTimeSeries ডেটা Grafana Worldmap প্যানেলে ডিসপ্লে করতে হবে।
পূর্ববর্তী পোস্টগুলোর মাধ্যমে, আমরা নতুন Redis Data Source for Grafana পরিচয় করিয়েছিলাম এবং কীভাবে ব্যবহার করবেন সেটি দেখিয়েছিলাম:
- Introducing the Redis Data Source Plug-in for Grafana
- How to Use the New Redis Data Source for Grafana Plug-in
এই পোস্টে, আমরা কিছু রিয়েল-লাইফ উদাহরণ এক্সপ্লোর করব যাতে আপনি আইডিয়া পান Redis-এ কী কী আকর্ষণীয় ডেটাসেট স্টোর করা যায় এবং Grafana-এ ভিজ্যুয়ালাইজ করা যায়। আমরা তিনটি ভিন্ন অ্যাপ্লিকেশন কভার করব:
- Weather dashboard
- Coronavirus cases visualization
- Pop-up store demo
১. Weather dashboard
আমি কি সত্যি মনে করি দুনিয়াকে আরেকটা weather dashboard দরকার? হ্যাঁ, করি!
বেশিরভাগ সময় আমি আপেক্ষিকভাবে weather geek নই। আমি প্রায়শই আসলেই কেয়ার করি না আবহাওয়া কেমন। এবং যখন কেয়ার করি, সেরা weather dashboard সাধারণত আমার বাড়ির জানালা যা বাইরে তাকিয়ে থাকে। কিন্তু কখনও কখনও, হয়তো যখন আমি কিছু সময় পাই ছবি তোলার বা ড্রোন উড়ানোর জন্য বাইরে যেতে, আমার অন্তর্নিহিত weather geek জেগে ওঠে।
বড় প্রশ্ন, অবশ্যই, কোথায় যাব? আমার নিউ জার্সির বাড়ি থেকে কয়েক ঘণ্টার ড্রাইভের মধ্যে অনেক আকর্ষণীয় লোকেশন আছে, এবং আবহাওয়া একে অপরের থেকে খুব ভিন্ন হতে পারে। আমি আসলে চাই এমন একটি ড্যাশবোর্ড যেটি এক স্ক্রিনে একাদশ লোকেশনের আবহাওয়া দেখাবে, যাতে আমি এক নজরে কন্ডিশন তুলনা করতে পারি। সমালোচনামূলকভাবে, আমি শুধু নিকটবর্তী লোকেশনগুলো তুলনা করতে চাই না।

একইভাবে গুরুত্বপূর্ণ, আমি সংখ্যা দিয়ে কাজ করা পছন্দ করি। আমি জানিแลন্ডস্কেপ ফটোগ্রাফি সেরা কাজ করে যখন মেঘের কভারেজ ২০% - ৫০% এর মধ্যে থাকে। ড্রোন উড়ানোর জন্য, ১০ mph-এর নিচে হাওয়ার গতি আদর্শ, ১০ - ২০ mph কঠিন, এবং ২০ mph-এর উপরে যেকোনো কিছু खতরনাক। তাই এমন একটি চমৎকার weather icon আমার অনেক কাজে আসে না:
এটি মনে রেখে, এখানে কীভাবে আমি Redis ব্যবহার করে একটি weather dashboard বানালাম।
সৌভাগ্যবশত, কাঁচা আবহাওয়া ডেটা এখন ব্যাপকভাবে উপলব্ধ বিভিন্ন weather APIs-এর মাধ্যমে, অধিকাংশ ফ্রি (কিছু লিমিটেশনের সাথে)। আমি OpenWeatherMap API বেছে নিলাম, কারণ এর ফ্রি প্ল্যান আমার সব কিছু দিয়ে দেয়: ৪৮-ঘণ্টা হাওরারি ফোরকাস্ট, ৭-দিন ডেইলি ফোরকাস্ট, এবং কারেন্ট কন্ডিশন।
আমি একটি সিম্পল Python স্ক্রিপ্ট লিখলাম API-থেকে ডেটা পুল করতে এবং হাওরারি/ডেইলি ফোরকাস্ট Redis ডাটাবেসে রাখতে RedisTimeSeries মডিউল ব্যবহার করে এবং কারেন্ট কন্ডিশন অন্য সেট টাইম সিরিজে হিস্টোরির জন্য।
আমার weather dashboard আমার দুটি ماندেটরি ড্যাশবোর্ড নিয়ম মেনে চলে:
- সকল ডেটা এক স্ক্রিনে প্রদর্শিত হবে, স্ক্রোলিং দরকার নেই।
- একজন ব্যক্তি ড্যাশবোর্ডে প্রদর্শিত পরিস্থিতি যতটা সম্ভব দ্রুত বুঝতে পারবেন।

ড্যাশবোর্ডের টপ সেকশন একটি লোকেশনের কারেন্ট কন্ডিশন দেখায়, যা প্রাইমারি বা ফেভারিট বা উপলব্ধ জায়গার তালিকা থেকে সিলেক্টেড হতে পারে (ড্যাশবোর্ডের টপ লেফ্ট কোণে একটি Grafana টেমপ্লেট ভেরিয়েবল সিলেকশন লিস্ট আছে)। এটি সেই লোকেশনে নির্দিষ্ট এক্টিভিটির জন্য ভালো টাইম পিরিয়ডও ডিসপ্লে করে। Grafana আমাকে টেম্পারেচারের জন্য low/high zone হাইলাইট করতে, উইন্ড স্পিডের জন্য ডেঞ্জারাস zone, মেঘলার ডিগ্রী ডিসপ্লে করতে, এবং ডেটাইম ও নাইটটাইম পিরিয়ড মার্ক করতে দেয়।
বটম সেকশন লোকেশনগুলো এক্টিভিটি অনুযায়ী গ্রুপ করে, যাতে সেগুলো তুলনা করা সহজ হয়। সার্কেল যত বড়, একটি নির্দিষ্ট লোকেশনে একটি নির্দিষ্ট এক্টিভিটির জন্য তত বেশি ঘণ্টা ভালো।

২. করোনাভাইরাস কেস ভিজ্যুয়ালাইজেশন
আমি ভ্রমণ পছন্দ করি, কিন্তু ২০২০ লাখ লাখ মানুষকে মাস পর মাস বাসায় বন্দি করে দিয়েছিল (আশা করি চিরকাল নয়!)। এখন, যেহেতু অনেক রাজ্য ধীরে ধীরে রি-ওপেন করছে, স্মার্টলি ভ্রমণ করা এবং আপনার ওরিজিন ও ডেস্টিনেশন লোকেশনের COVID-19 সিচুয়েশন বুঝতে হয় খুব গুরুত্বপূর্ণ। এর মানে শুধু কারেন্ট ছবি নয়, বরং লং-টার্ম ট্রেন্ডও।
এটিই আমার Grafana U.S. States Coronavirus Dashboard দেখায়। এটি Coronavirus API ডেটার ওপর ভিত্তি করে, RedisTimeSeries মডিউলে লোড করা।

স্ট্যান্ডার্ড গ্রাফ রিপ্রেজেন্টেশনের বাইরে, ডেটা ম্যাপে ও ড্র করা হয়েছে। Redis Data Source plug-in অফিসিয়ালি Grafana Worldmap প্যানেল দ্বারা সাপোর্টেড নয়, কিন্তু আপনি দুটি সিম্পল স্টেপে এটিকে কাজ করতে পারেন:
Step 1: টাইম-সিরিজ আউটপুট রেজাল্টে "Labels to fields" ট্রান্সফর্মেশন অ্যাপ্লাই করুন:

Step 2: ম্যাপ প্যারামিটার "Location Data" টেবিল মোডে চেঞ্জ করুন এবং প্রাসঙ্গিক ফিল্ডগুলো ম্যাপ করুন:

এই দুটি স্টেপ আপনাকে টাইম-সিরিজ ভ্যালুকে ম্যাপে প্রাসঙ্গিক পয়েন্টে ঠিকাতে দেবে, যা RedisTimeSeries-এর "geohash" লেবেল দিয়ে সেট করা হয়েছে। "state" লেবেলটি ম্যাপে লোকেশন নাম ডিসপ্লে করতে ব্যবহৃত হয়।
৩. Pop-up store demo
আমি Redis Streams-এ বড় ফ্যান, Redis 5.0-এ পরিচিত একটি নতুন ডেটা টাইপ, এবং আমি ডেটা প্রসেসিং-এর জন্য কিউ মনিটর করার একটি ফাস্ট ও সিম্পল সমাধান খুঁজছিলাম। Redis Data Source-এ কাজ করার সময়, আমাদের টিম RedisGears—একটি ডাইনামিক ফ্রেমওয়ার্ক যা ডেভেলপারদের ফাংশন লিখতে ও এক্সিকিউট করতে দেয় যেগুলো Redis-এ ডেটা ফ্লো বাস্তবায়ন করে ডেটার ডিস্ট্রিবিউশন ও ডিপ্লয়মেন্টকে অ্যাবস্ট্রাক্ট করে—অন্য একটি প্রজেক্টের জন্য এক্সপ্লোর করা শুরু করল এবং আমরা সেগুলো একসাথে ব্যবহার করলাম এই ডেটা-পাইপলাইন ডেমোর জন্য একটি পপ-আপ স্টোরের।
RedisGears বেশ কয়েকটি রিডার টাইপ সাপোর্ট করে যা ইনপুট ডেটার ভিন্ন টাইপের ওপর অপারেট করে। স্ট্রিম মেসেজ দেখতে, আমরা ইভেন্ট মোডে StreamReader ব্যবহার করলাম। এই মোডে, রিডারটি নতুন মেসেজ স্ট্রিমে যোগ হয়ার ফলে জেনারেটেড ইভেন্টের রেসপন্সে এক্সিকিউট হয়।
# Add Time-Series def tsAdd(x): xlen = execute('XLEN', x['key']) execute('TS.ADD', 'ts:len:'+x['key'], '*', xlen) execute('TS.ADD', 'ts:enqueue:' + x['key'], '*', x['value']) # Stream Reader for any Queue gb = GearsBuilder('StreamReader') gb.countby(lambda x: x['key']).map(tsAdd) gb.register(prefix='queue:*', duration=5000, batch=10000, trimStream=False)
StreamReader একাধিক আর্গুমেন্ট গ্রহণ করে যা কন্ট্রোল করে এটি কীভাবে ট্রিগার হবে। আমাদের কেসে, আমরা চাই রিডারটি প্রতি ৫ সেকেন্ডে একবার বা ১০,০০০ মেসেজ পাওয়ার পর ট্রিগার হোক। লাস্ট অপশন, trimStream, নির্দেশ করে এক্সিকিউশনের পর স্ট্রিম ট রিম না করা।
আমরা ইনকামিং মেসেজের সংখ্যা এবং কিউ-সাইজ স্যাম্পল সংরক্ষণ করতে RedisTimeSeries ব্যবহার করলাম। যেমন ইন্ট্রোডাক্টরি ব্লগ পোস্টে Redis Data Source Plug-in for Grafana-এ ব্যাখ্যা করা হয়েছে, টাইম সিরিজ Grafana-এ সহজে ভিজ্যুয়ালাইজ করা যায়।

Redis Streams, RedisTimeSeries, RedisGears, এবং Redis Data Source কীভাবে একসাথে কাজ করতে পারে সেটি প্রদর্শন করার জন্য, আমরা একটি ডাইনামিক ড্যাশবোর্ড সহ Pop-up store demo তৈরি করলাম:

এই Grafana ড্যাশবোর্ড ডিসপ্লে করে:
- Product Available: প্রোডাক্ট কীটির মান, যা অর্ডার কমপ্লিট হলে কমে যায়
- Customers Ordering, Orders Processing, এবং Orders Completed: queue:customers, queue:orders, এবং queue:complete স্ট্রিমের লেথ
- Customers Overflow: কাস্টমার-সাবমিটেড অর্ডার এবং অর্ডার কমপ্লিটের পার্থক্য
- Customers Ordering: ৫ সেকেন্ডে তৈরি অর্ডার
- Orders In Queue: প্রসেস হওয়ার জন্য অপেক্ষমান অর্ডার
- Completed Flow: ৫ সেকেন্ডে কমপ্লিট হওয়া অর্ডার
দয়া করে এই প্রজেক্টের GitHub রিপোজিটরি দেখুন কীভাবে আমরা লোড জেনারেট করলাম, কোন RedisGears স্ক্রিপ্ট ব্যবহার করলাম, এবং কীভাবে Redis Data Source কনফিগার করতে হয় RedisTimeSeries ডেটা TS.RANGE কমান্ড দিয়ে কোয়েরি করার জন্য।
উপসংহার
এই তিনটি রিয়েল-লাইফ সিনেরিও দেখিয়েছে কীভাবে Redis Data Source for Grafana বিভিন্ন Redis মডিউলের সাথে ব্যবহার করা যায়। আশা করি সেগুলো আপনাকে এই টেকনোলজি ব্যবহার করে আপনার নিজস্ব অ্যাপ্লিকেশন বানাতে অনুপ্রাণিত করবে।
আপনি ভালো কোম্পানিতে থাকবেন। যেহেতু Redis Data Source plug-in Grafana রিপোজিটরিতে পাবলিশ হয়েছে, এটি ইতিমধ্যে ১০,০০০+ বার ডাউনলোড হয়েছে, পপুলার কমিউনিটি প্লাগইনগুলোর মধ্যে অন্তর্ভুক্ত হয়েছে যেগুলো আপনার Grafana ড্যাশবোর্ড উন্নত করতে পারে, Redis ক্লাস্টার, Sentinel, Unix socket, এবং অ্যাক্সেস কন্ট্রোল লিস্ট (ACLs) সাপোর্ট যোগ করা হয়েছে:

এটিই সব নয়। Redis Tech blog-এ tuned থাকুন Grafana স্ট্রিমিং ক্যাপাবিলিটি এবং ইন্টারঅ্যাক্টিভিটির সাথে একটি উদ্বেগনক প্রজেক্ট সম্পর্কে জানতে যা Grafana কে observability-র বাইরে নিয়ে যাবে redis-cli প্যানেল দিয়ে।