আপনি ড্রিলটি জানেন: আপনি যে শব্দগুলি খুঁজছেন তা স্ল্যাক, বা গিটহাব, বা গুগল ড্রাইভ, বা গুগল শীট, বা জেনডেস্ক, বা … তালিকাটি চলতে পারে। এই সাইলো জুড়ে অনুসন্ধান করা একটি সাধারণ হতাশা। এটা ঘর্ষণহীন হওয়া উচিত, এবং এই Steampipe ড্যাশবোর্ড এটি তাই করে তোলে.
এটি আমার প্রথম রোডিও ছিল না। আমি 1996 সালে এই যাত্রা শুরু করেছি এবং পর্যায়ক্রমে ধারণাটি পুনর্বিবেচনা করেছি। 2018 সালে আমি এমন একটি সংস্করণ সম্পর্কে লিখেছিলাম যেটি ছিল The Simplest Thing That Could Posibly Work এর ক্লাসিক উদাহরণ: একটি ওয়েব পৃষ্ঠা যা বিভিন্ন পরিষেবার সার্চ ইউআরএলগুলিকে কোরাল করে এবং প্রতিটিকে নিজস্ব ট্যাবে ভিজিট করে৷ যতটা মূর্খ মনে হয়, এটি কিছুটা ব্যবহার করার জন্য যথেষ্ট সহায়ক ছিল, এবং শুধু আমার দ্বারা নয়।
অবশ্যই আমি অন্তর্নিহিত APIগুলি ব্যবহার করতে, ফলাফলগুলিকে স্বাভাবিক করতে এবং সেগুলিকে একটি সাধারণ ভিউতে মার্জ করতে চেয়েছিলাম। কিন্তু সমস্ত API গুলিকে বিভ্রান্ত করার জন্য প্রয়োজনীয় প্রচেষ্টা সেই প্রকল্পটিকে মূল্যের চেয়ে বেশি সমস্যা করে তুলেছে। আপনি যদি এই ধরণের কাজটি করে থাকেন তবে আপনি জানেন যে বেশিরভাগ পরিষেবাগুলি আপনার পছন্দের প্রোগ্রামিং ভাষার জন্য অ্যাডাপ্টারের সাথে অনুসন্ধান API সরবরাহ করে। তবে প্রতিটি পরিষেবার API কল করার, ফলাফলগুলি পেজিন করা এবং সেগুলি ফর্ম্যাট করার নিজস্ব উপায় থাকবে৷ এই পার্থক্যগুলি একটি সামঞ্জস্যপূর্ণ উপায়ে ফলাফলের সাথে কাজ করার জন্য আপনাকে কাটিয়ে উঠতে হবে এমন ঘর্ষণ তৈরি করে।
এপিআই র্যাংলিং যখন ঘর্ষণহীন হয়ে যায়, যদিও অনেক কিছুই সম্ভব হয়ে ওঠে। কার্যকরী মেটাসার্চ তাদের মধ্যে একটি। Steampipe আপনাকে API কল করার, ফলাফলের পৃষ্ঠা নির্ধারণ এবং JSON অবজেক্ট আনপ্যাক করার ব্যবসা থেকে বের করে দেয়। এটি আপনার জন্য API কল করে এবং ফলাফলগুলিকে ডাটাবেস টেবিলে স্ট্রিম করে যাতে আপনি ডেটা নিয়ে কাজ করার উপর সম্পূর্ণ মনোযোগ দিতে পারেন। এটি একটি মেটাসার্চ ড্যাশবোর্ড তৈরি করার সময় আপনার মুখোমুখি হওয়া সবচেয়ে বড় সমস্যার সমাধান করে।
একটি স্কিমা উপর রূপান্তর
পরবর্তী চ্যালেঞ্জ হল সার্চ ফলাফলকে একটি সাধারণ স্কিমার সাথে আবদ্ধ করা। এসকিউএল একটি দুর্দান্ত পরিবেশ যেখানে এটি করা যায়। যে ক্যোয়ারীটি স্ক্রিনকাস্টে দেখানো ড্যাশবোর্ডটিকে চালিত করে তাতে তিনটি স্তবক রয়েছে যা লিখতে আপনাকে SQL উইজার্ড হতে হবে না। তারা সবাই গিটহাব সমস্যাগুলি অনুসন্ধানের জন্য এইটির মতো একই প্যাটার্ন অনুসরণ করে।
select 'github_issue' as type, repository_full_name || ' ' || title as source, to_char(created_at, 'YYYY-MM-DD') as date, html_url as link, substring(body from 1 for 200) || '...' as content from github_search_issue where $1 ~ 'github_issue' and query = 'in:body in:comments org:github ' || $2 limit $3
নীল রঙের আইটেমগুলি একটি ডাটাবেস টেবিলের কলামের নাম – এই ক্ষেত্রে github_search_issue, Steampipe এর GitHub প্লাগইন দ্বারা তৈরি টেবিলগুলির মধ্যে একটি। Steampipe হাব টেবিলের কলামগুলির নাম এবং বিবরণ পরিদর্শন করা সহজ করে এবং টেবিলে তথ্যগুলি কীভাবে ব্যবহার করতে হয় তার উদাহরণগুলি দেখায়৷
যেহেতু ডেটা আনার জন্য API কল করা এবং JSON আনপ্যাক করার প্রয়োজন নেই, আপনি উচ্চ-ক্রম অনুসন্ধান সিনট্যাক্সের উপর ফোকাস করতে পারেন, যা একটি সাধারণ স্কিমাতে উত্স কলামগুলি ম্যাপ করার আকর্ষণীয় (এবং মজাদার!) চ্যালেঞ্জের সাথে চিন্তা করার জন্য যথেষ্ট।
লাল রঙের আইটেমগুলি হল সেই কলামগুলির নাম যা ড্যাশবোর্ডে প্রদর্শিত হয়৷ এই ড্যাশবোর্ডের জন্য আমরা সিদ্ধান্ত নিয়েছি যে প্রতিটি অনুসন্ধান ফলাফল এই পাঁচটি কলামে ম্যাপ করবে: প্রকার, সূত্র, তারিখ, লিঙ্কএবং বিষয়বস্তু. এসকিউএল-এর AS ক্লজ প্রতিটি স্তবকের জন্য স্কিমার সাথে মেলে তার কলামগুলির নাম পরিবর্তন করা সহজ করে তোলে।
সম্পূর্ণ প্রশ্ন
এখানে ড্যাশবোর্ড চালিত সম্পূর্ণ ক্যোয়ারী আছে. উপরেরটির মতো তিনটি স্তবক রয়েছে, প্রতিটি ইনপুট ভেরিয়েবলের সাথে সম্পর্কিত পরামিতি সহ একটি CTE (সাধারণ টেবিলের অভিব্যক্তি) হিসাবে লেখা। এবং প্রায় কিছুই নেই! প্রতিটি স্তবক একটি API-ভিত্তিক সারণী (slack_search, github_search_issue, googleworkspace_drive_my_file) জিজ্ঞাসা করে, কলামগুলি নির্বাচন করে (এবং হয়তো রূপান্তরিত করে), তারপর স্কিমার সাথে মেলে ফলাফলগুলি উপনাম করে। যা বাকি আছে তা হল তিনটি CTE-কে UNION করা, যেগুলি অস্থায়ী টেবিলের মতো কাজ করে এবং ফলাফলগুলি অর্ডার করে৷
with slack as ( select 'slack' as type, user_name || ' in #' || (channel ->> 'name')::text as source, to_char(timestamp, 'YYYY-MM-DD') as date, permalink as link, substring(text from 1 for 200) as content from slack_search where $1 ~ 'slack' and query = 'in:#steampipe after:${local.config.slack_date} ' || $2 limit $3 ), github_issue as ( select 'github_issue' as type, repository_full_name || ' ' || title as source, to_char(created_at, 'YYYY-MM-DD') as date, html_url as link, substring(body from 1 for 200) || '...' as content from github_search_issue where $1 ~ 'github_issue' and query = ' in:body in:comments org:${local.config.github_org} ' || $2 limit $3 ), gdrive as ( select 'gdrive' as type, replace(mime_type,'application/vnd.google-apps.','') as source, to_char(created_time, 'YYYY-MM-DD') as date, 'https://docs.google.com/document/d/' || id as link, name as content from googleworkspace_drive_my_file where $1 ~ 'gdrive' and query = 'fullText contains ' || '''' || $2 || '''' limit $3 ) select * from slack union select * from github_issue union select * from gdrive order by date desc
কোড হিসাবে ড্যাশবোর্ড
অনেক ড্যাশবোর্ড সিস্টেম এই প্রশ্নের সাথে কাজ করতে পারে। আপনি, উদাহরণস্বরূপ, মেটাবেস, বা মূক, বা অন্য পোস্টগ্রেস ক্লায়েন্টকে স্টিম্পাইপের সাথে সংযুক্ত করতে পারেন এবং এখানে দেখানো মত একই ধরণের ইন্টারেক্টিভ ড্যাশবোর্ড তৈরি করতে পারেন। আপনি সেই কাজটি একটি কম-কোড পরিবেশে করবেন যেখানে উইজেট এবং সেটিংস একটি ব্যবহারকারী ইন্টারফেসে পরিচালনা করা হয়। Steampipe এর ড্যাশবোর্ড সাবসিস্টেম তার অবকাঠামো-এ-কোড (IaC) শিকড় দ্বারা জানানো একটি ভিন্ন পদ্ধতি গ্রহণ করে। API-এর বিরুদ্ধে ক্যোয়ারীগুলি সংস্করণ-নিয়ন্ত্রিত সংগ্রহস্থলগুলিতে অন্যান্য সমস্ত কোডের মতো পরিচালিত SQL কোডে প্রকাশ করা উচিত। ড্যাশবোর্ড উইজেটগুলি যেগুলি এই প্রশ্নের ফলাফলগুলি প্রদর্শন করে একইভাবে কোডে প্রকাশ করা উচিত এবং এই ক্ষেত্রে ভাষাটি হল Terraform-এর HCL৷
এখানে মেটাসার্চ ড্যাশবোর্ডের HCL সংজ্ঞা। এটি তিন ধরণের ঘোষণা করে ইনপুট ব্লক: সূত্র (মাল্টি-সিলেক্ট), অনুসন্ধানের শর্ত (পাঠ্য), এবং সর্বোচ্চ_প্রতি_উৎস (একক-নির্বাচন, যা ডিফল্ট)। আপনি এর সাথে আরও অনেক কিছু করতে পারেন ইনপুট ব্লক—উল্লেখ্যভাবে, আপনি একটি SQL কোয়েরি থেকে ফলাফল দিয়ে এটি পূরণ করতে পারেন, যেমন ডকুমেন্টেশনে দেখানো হয়েছে। যে এখানে প্রয়োজন নেই, যদিও.
দ্য টেবিল ব্লক উপরে সংজ্ঞায়িত ক্যোয়ারী ব্যবহার করে, এবং এটিতে পাস করা পরামিতিগুলিকে সংজ্ঞায়িত করে। দ্য মোড়ানো যুক্তি নিশ্চিত করে যে প্রচুর পাঠ্য সহ কলামগুলি পাঠযোগ্য হবে।
dashboard "metasearch" { input "sources" { title = "sources" type = "multiselect" width = 2 option "slack" {} option "github_issue" {} option "gdrive" {} } input "search_term" { type = "text" width = 2 title = "search term" } input "max_per_source" { title = "max per source" width = 2 option "2" {} option "5" {} option "10" {} option "20" {} } table { title = "search slack + github + gdrive" query = query.metasearch args = [ self.input.sources, self.input.search_term, self.input.max_per_source ] column "source" { wrap = "all" } column "link" { wrap = "all" } column "content" { wrap = "all" } } }
আবার এখানে দেখার মতো অনেক কিছুই নেই, বা থাকা উচিতও নয়। কোড হিসাবে ড্যাশবোর্ড তৈরি করার জন্য প্রচুর জটিল কোডের প্রয়োজন হয় না, এবং তা হয় না।
কোন জাদুকর প্রয়োজন নেই
নতুন সাবকোয়ারি তৈরি করার জন্য যেমন আপনার SQL উইজার্ড হওয়ার দরকার নেই, তেমনি ড্যাশবোর্ডে সেগুলি যুক্ত করার জন্য আপনাকে HCL উইজার্ড হতে হবে না। আপনি উৎস যোগ করতে চান? প্রতি মাসে আরও যোগ করার সাথে বেছে নেওয়ার জন্য কয়েক ডজন অন্যান্য প্লাগইন রয়েছে। তারা সবাই অনুসন্ধানের অফার করে না কিন্তু অনেকেই করে, এবং (অবশ্যই!) একটি Steampipe ক্যোয়ারী দিয়ে তাদের খুঁজে পাওয়া সহজ।
select name html_url from github_search_code where query = 'search org:turbot org:francois2metz org:ellisvalentiner org:theapsgroup' and name ~ 'table' and name ~ 'search' order by name
স্টিম্পাইপ-নমুনা রেপোতে আমরা এখানে দেখানো ড্যাশবোর্ডের কোডটি অন্তর্ভুক্ত করেছি, সাথে Zendesk-এর জন্য একটি অতিরিক্ত অনুসন্ধান স্তবক যা আমাদের ট্রায়াল অ্যাকাউন্টের মেয়াদ শেষ হয়ে গেলে আমরা সরিয়ে দিয়েছি। এই ড্যাশবোর্ড প্রসারিত মজা আছে! যদি আপনার প্রয়োজনীয় একটি অনুসন্ধান API ইতিমধ্যেই উপলব্ধ না থাকে, তাহলে আমাদের স্ল্যাক সম্প্রদায়ের মাধ্যমে ড্রপ করুন এবং আমাদের জানান। কেউ হয়তো ইতিমধ্যেই আপনার প্রয়োজনীয় প্লাগইন লিখছে—অথবা হয়তো আপনি নিজেই এটি মোকাবেলা করতে চান। প্রতিটি নতুন প্লাগইন এটিকে সম্ভব করে তোলে যারা মৌলিক এইচসিএল প্লাস এসকিউএল-এর সাথে কাজ করতে পারে একজন প্রো-এর মতো এপিআই ব্যবহার করতে পারে এবং বাস্তব সমস্যার সমাধান করতে পারে।
কপিরাইট © 2022 IDG Communications, Inc.