۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

تجسم Hacker News API با HCL و SQL

از Steampipe و GitHub Actions برای ایجاد «داشبورد به‌عنوان کد» برای کاوش در هزاران داستان Hacker News، تا ساعت فعلی استفاده کنید.

از Steampipe و GitHub Actions برای ایجاد «داشبورد به‌عنوان کد» برای کاوش در هزاران داستان Hacker News، تا ساعت فعلی استفاده کنید.

در آخرین قسمت به داشبورد Steampipe نگاه کردیم که به نتایج جستجو در میان APIهای مختلف می پیوندد. داشبورد متاجستجو کاملاً در کد تعریف شده است که دو زبان را با هم ترکیب می کند: SQL برای پرس و جو از APIها، و HCL (زبان پیکربندی HashiCorp) برای جریان دادن نتایج به یک جدول داشبورد.

این رویکرد داشبورد به‌عنوان کد به فلسفه زیرساخت به‌عنوان کد متمایل است. ما معتقدیم که داشبوردها نوع دیگری از زیرساخت‌ها هستند که باید در نرم‌افزار تعریف شوند، در مخازن تحت کنترل نسخه مدیریت شوند و از مخازن مستقر شوند.

در این قسمت به داشبوردی نگاه خواهیم کرد که موارد ارسال شده در اخبار هکر را بررسی می کند. این روش‌های مختلفی را نشان می‌دهد که Steampipe می‌تواند در گردش‌های کاری تعریف‌شده توسط نرم‌افزار شرکت کند.

این داشبورد در حال عمل است.

و اینجا شروع سریع برای خودتان اجرا کنید.

تجسم‌ها بیش از ۱۵۰۰۰ داستان را از ۲۱ ژوئن پوشش می‌دهند. این تاریخچه بسیار بیشتر از آن چیزی است که می‌توانید به راحتی از API اخبار Hacker در یک جرعه برداشت کنید. بنابراین داده های تاریخی از کجا می آیند؟ در مخزن است!

تاریخچه

به صورت ساعتی یک GitHub Action مخزن را بررسی می‌کند، Steampipe را اجرا می‌کند، موارد جدید را جست‌وجو می‌کند، آنها را به یک فایل CSV صادر می‌کند، آن فایل را متعهد می‌کند و به مبدا فشار می‌دهد. بنابراین وقتی مخزن را شبیه‌سازی یا به‌روزرسانی می‌کنید، داده‌های جدیدی دریافت می‌کنید. با نصب Steampipe و افزونه CSV، در اینجا نحوه مشاهده داشبورد آمده است.

cd ~/steampipe-samples/all/hackernews
./update.sh
steampipe dashboard

و سپس از https://localhost:9194 دیدن کنید. ./update.sh را در هر نقطه ای تکرار کنید تا داده های به روز را جمع آوری و ترکیب کنید. اقدام GitHub، برنامه‌ریزی شده برای اجرا به صورت ساعتی ، موارد زیر را انجام می دهد.

  • مخزن را بررسی کنید
  • Steampipe را در رانر GitHub نصب کنید
  • افزونه اخبار هکر
  • را نصب کنید

  • آخرین داستان ها را پرس و جو کنید و خروجی را به یک فایل CSV ارسال کنید
  • فایل CSV جدید را ارسال کنید و تغییرات را فشار دهید
لینکدین منبع باز چارچوب بهره وری و شادی توسعه دهندگان خود است

من دیر به مهمانی GitHub Actions رفتم اما اکنون آنجا هستم. این روش بسیار خوبی برای جمع آوری بادوام عکس های فوری کوچک است!

برای کسانی که امتیاز را حفظ می کنند، سه نمونه از Steampipe در این گردش کار وجود دارد:

#۱ با استفاده از Hacker News.
#۲ جدول را در پایگاه داده محلی Steampipe شما با استفاده از CSV.
#۳ سرور داشبورد محلی را راه اندازی می کند که مرورگر شما به آن متصل می شود.

HCL + SQL

پانل منابع فهرستی از دامنه‌ها را ارائه می‌دهد و داستان‌هایی را پیدا می‌کند که URL آنها با دامنه انتخابی مطابقت دارد. در اینجا کوئری SQL است که همه URL ها را می خواند و دامنه آنها را استخراج می کند. مشکل ترین قسمت عبارت منظم است، اما این برای regexe ها در همه زبان ها صادق است. خود SQL ساده و قابل درک است.

with domains as (
  select distinct
    substring(url from 'http[s]*://([^/$]+)') as domain
  from
    hn_items_all
)
select
  domain as label,
  domain as value
from
  domains
order by
  domain

HCL که لیست انتخابی را ایجاد می کند نیز ساده و قابل درک است.

input "domain" {
  width = 3
  sql = <<EOQ
    -- as above
  EOQ    
}

این الگو در همه جا است: SQL برای دریافت داده‌ها، یک لفاف نازک HCL برای جریان دادن به یک ویجت. این دو نوع کد، که با هم داشبورد را تعریف می کنند، در یک مخزن متولد می شوند، در آنجا تکامل می یابند و از آنجا مستقر می شوند. در سیستم‌های کم یا بدون کد، تمام اطلاعات مشابه در یک فروشگاه داده که توسط یک برنامه مدیریت می‌شود، زندگی می‌کنند. ممکن است (من یک بار انجام دادم) مجبور شوید آن اطلاعات را صادر کنید تا تکامل سیستم را در یک مخزن ثبت کنید. بهتر است همیشه آن را داشته باشید.

نکته سیستم‌های کم یا بدون کد، البته، قرار دادن کد در ابزارهایی است که خلاقیت افرادی را که کد نمی‌نویسند باز می‌کند. هنوز چنین ابزاری برای این ترکیب HCL + SQL وجود ندارد، اما می تواند وجود داشته باشد. سیستم های تعریف شده در کد ذاتاً برای ابزارهایی که آن کد را می خوانند و می نویسند دوست دارند. به عنوان مثال، مخزن Hacker News شامل یک مثال عجیب و غریب است که با ویرایش برنامه‌ای یک فایل داشبورد و تغییر مقادیر خاص HCL، نمودار را متحرک می‌کند.

Steampipe unbundled: از APIهای ابری تا پایگاه داده شما

اگرچه من برای آن مثال از تجزیه کننده استفاده نکردم، البته تجزیه کننده های HCL و SQL وجود دارند که کد را به عنوان داده ارائه می کنند. در یک قسمت قبلی نشان دادیم که چگونه افزونه دیگر Steampipe Terraform را تبدیل می کند فایل‌ها در جداول Steampipe، بنابراین بررسی‌کننده انطباق را فعال می‌کند که تعاریف Terraform را تأیید می‌کند. همانطور که داشبوردها را می‌سازید و تکامل می‌دهید، آیا نمی‌خواهید آنها را به همان روش اعتبارسنجی کنید؟ معماری به عنوان کد تضمین می کند که این امکان پذیر است.

گفته شد، کدنویسی داشبوردهای Steampipe در HCL + SQL خالص آسان، سرگرم کننده و بسیار سازنده است. در اینجا دو مورد از چیزهای مورد علاقه من وجود دارد که باعث شده است.

ویرایش زنده

وقتی کد داشبورد را در ویرایشگری که به صورت خودکار ذخیره می‌شود ویرایش می‌کنید، داشبورد فوراً واکنش نشان می‌دهد. همانطور که در اینجا نشان داده شده است، این برای تغییرات در کد HCL که داده ها را هماهنگ می کند و کد SQL که آن را واکشی می کند صادق است.

این یک نوع رابط دستکاری مستقیم است: “رویکردی به رابط‌ها که شامل نمایش مداوم است. اشیاء مورد علاقه همراه با اقدامات و بازخورد سریع، برگشت پذیر و افزایشی. (ویکی پدیا)

برت ویکتور قهرمان بزرگ این رویکرد است. در این بخش از اختراع بر روی اصل، او مشکلی را که دستکاری مستقیم به آن می‌پردازد، حل می‌کند.< /p>

هر چه مدت زمان بیشتری برای مشاهده نتایج تغییرات کد نیاز باشد، حفظ آن نگاشت سخت‌تر می‌شود. بازخورد فوری قیمتی ندارد و اغلب در دسترس نیست. ما هنگام کدنویسی وب اولیه آن را بدیهی می دانستیم، اما اکنون اغلب یک مرحله ساخت وجود دارد که دستکاری مستقیم را خنثی می کند.

هنگام کدنویسی داشبورد Steampipe، بازخورد فوری از HCL و SQL دریافت می کنید. من در سال های اخیر پرس و جوهای Postgres زیادی نوشته ام. نوشتن آنها در محیطی که نتایج پرس و جو را هنگام تایپ من تازه می کند، یا پیام های خطای Postgres را در هنگام اشتباه نمایش می دهد، تحول آفرین بوده است.

Kotlin 1.9.0 دارای نسخه بتا کامپایلر پیشرفته K2 است

حساسیت وب

کدنویسی داشبوردهای Steampipe به روش‌های دیگر نیز مرا به یاد وب اولیه می‌اندازد. به عنوان مثال، پیوندها شهروندان درجه یک داشبوردهای Steampipe هستند، و امروزه این همیشه صادق نیست. پانل ارسال‌ها نام‌های کاربری را به داشبورد دیگری پیوند می‌دهد که همه ارسال‌های یک کاربر انتخاب‌شده را بررسی می‌کند. همه اینها درست همانطور که یک توسعه دهنده وب انتظار دارد کار می کند.

یک دکمه مشاهده منبع نیز وجود دارد. مشاهده منبع را به خاطر بسپارید؟ قبلاً در وب اهمیت داشت. امروزه معمولاً فقط نویز خط را به حداقل می رساند. اما ترکیب HCL + SQL من را به یاد ترکیب اولیه HTML + JS می اندازد – به روشی خوب! در اینجا نگاهی به منابع پشت یکی از پانل های داشبورد می اندازیم.

همراه با بازخورد مستقیم، این نوع مشاهده‌پذیری به گسترش وب اولیه کمک کرد. شما چیزی را می‌بینید، تعجب می‌کنید که چگونه انجام شده است، منبع را مشاهده می‌کنید، یاد می‌گیرید و تقلید می‌کنید. وب سازان تازه کار دیگر نمی توانند در آن نوع چرخه با فضیلت شرکت کنند. سازندگان داشبورد Steampipe تازه کار می توانند، و این نویدبخش یک اکوسیستم پر رونق است.

داده ها را با سرعت فکر تجسم کنید

از آنجایی که Steampipe Postgres را گسترش می دهد، می توانید از هر ابزاری برای ایجاد داشبوردهایی که توسط داده های Steampipe پشتیبانی می شوند استفاده کنید. اگر با Metabase، Tableau یا ابزار دیگری که به Postgres متصل می شود، مهارت دارید، ابرقدرت جدول API به پایگاه داده Steampipe توانایی شما را برای تجسم داده ها از منابع مختلف در آن محیط ها تسریع می کند. اما اگر داشبورد را به روش Steampipe امتحان کردید، به من اطلاع دهید که چگونه پیش می‌رود. در تجربه شخصی من، این سریع ترین و لذت بخش ترین راه برای تبدیل یک ایده به داشبورد مفید است.