Visualització de l’API Hacker News amb HCL i SQL

A l’últim episodi vam analitzar un tauler de control de Steammpipe que uneix els resultats de la cerca de diverses API. Aquest tauler de metacerca es defineix completament en codi que combina dos idiomes: SQL per consultar les API i HCL (HashiCorp Configuration Language) per transmetre els resultats a una taula de tauler.

Aquest enfocament de taulers com a codi es basa en la filosofia d’infraestructura com a codi. Creiem que els taulers són un altre tipus d’infraestructura que s’hauria de definir al programari, gestionar-se en repositoris controlats per versions i desplegar-se des de repositoris.

En aquest episodi veurem un tauler que explora els elements publicats a Hacker News. Il·lustra diverses maneres en què Steampipe pot participar en fluxos de treball definits per programari.

Aquí teniu el tauler en acció.

I aquí teniu el començament ràpid per executar-lo per vosaltres mateixos.

Les visualitzacions cobreixen més de 15.000 històries des del 21 de juny. Això és molt més història del que podeu agafar convenientment de l’API Hacker News d’un sol glop. Llavors, d’on provenen les dades històriques? Està al repo!

Història

Cada hora, una acció de GitHub consulta el repo, executa Steammpipe, consulta nous elements, els exporta a un fitxer CSV, envia aquest fitxer i envia a l’origen. Així, quan cloneu o actualitzeu el repositori, obteniu dades noves. Amb Steammpipe i el connector CSV instal·lats, aquí teniu com visualitzeu el tauler.

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

I després visita https://localhost:9194. Repetiu ./update.sh en qualsevol moment per extreure i incorporar dades actualitzades. L’acció de GitHub, programada per executar-se cada hora, fa el següent.

  • Consulteu el repo
  • Instal·leu Steammpipe al corredor de GitHub
  • Instal·leu el connector Hacker News
  • Consulteu les últimes històries i envieu la sortida a un fitxer CSV
  • Envia el nou fitxer CSV i envia els canvis

Vaig arribar tard a la festa de GitHub Actions, però ara hi sóc. Aquesta és una manera tan agradable d’acumular petites instantànies de manera duradora!

Per a aquells que mantenen la puntuació, hi ha tres exemples de Steammpipe en aquest flux de treball:

#1 fa les instantànies en una acció de GitHub mitjançant el connector Hacker News.
#2 crea la taula a la vostra base de dades local de Steammpipe, utilitzant el connector CSV.
#3 llança el servidor de tauler local al qual es connecta el vostre navegador.

HCL+SQL

El tauler Fonts ofereix una llista de selecció de dominis i troba històries els URL de les quals coincideixen amb un domini seleccionat. Aquí teniu la consulta SQL que llegeix tots els URL i extreu els seus dominis. La part més complicada és l’expressió regular, però això és cert per a les expressions regulars en tots els idiomes. L’SQL en si és senzill i fàcil d’entendre.

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

L’HCL que crea la llista de selecció també és senzill i fàcil d’entendre.

input "domain" {
  width = 3
  sql = <

Aquest és el patró a tot arreu: SQL per obtenir les dades, un embolcall prim HCL per fluir els resultats en un giny. Aquests dos tipus de codi, que conjuntament defineixen el tauler, neixen en un repo, hi evolucionen i es despleguen a partir d'aquí. En els sistemes de codi baix o sense codi, tota la mateixa informació es troba en un magatzem de dades gestionat per una aplicació. És possible que (una vegada ho vaig fer) hàgiu d'exportar aquesta informació per registrar l'evolució del sistema en un repo. És millor tenir-lo sempre allà.

L'objectiu dels sistemes de codi baix o sense codi és, per descomptat, embolicar el codi en eines que desenvolupin la creativitat de les persones que no codifiquen. Encara no hi ha aquesta eina per a aquesta combinació HCL + SQL, però hi pot haver-hi. Els sistemes definits en codi són inherentment amigables amb les eines que llegeixen i escriuen aquest codi. El repositori de Hacker News, per exemple, inclou un exemple capritxos que anima un gràfic editant amb programació un fitxer de tauler i canviant certs valors HCL.

Tot i que no vaig utilitzar un analitzador per a aquest exemple, per descomptat hi ha analitzadors HCL i SQL que representen el codi com a dades. En un episodi anterior vam mostrar com un altre connector de Steampipe converteix els fitxers de Terraform en taules de Steampipe, habilitant així un verificador de compliment que valida les definicions de Terraform. A mesura que creeu i evolucioneu els taulers de control, no voldríeu validar-los de la mateixa manera? Una arquitectura com a codi garanteix que és possible.

Dit això, codificar taulers de control de Steammpipe en HCL + SQL pur és fàcil, divertit i molt productiu. Aquí hi ha dues de les meves coses preferides que ho fan així.

Edició en directe

Quan editeu el codi del tauler en un editor que desa automàticament, el tauler reacciona immediatament. Com es mostra aquí, això és cert per als canvis tant al codi HCL que orquestra les dades com al codi SQL que l'obté.

Es tracta d'una mena d'interfície de manipulació directa: "un enfocament de les interfícies que implica la representació contínua d'objectes d'interès juntament amb accions i retroalimentació ràpides, reversibles i incrementals". (Viquipèdia)

Bret Victor és un gran campió d'aquest plantejament. En aquest segment d'Inventing on Principle clava el problema que aborda la manipulació directa.

Tinc aquest codi i tinc aquesta imatge aquí, i he de mantenir el mapatge entre els dos al meu cap.

Com més temps es triga a veure els resultats dels canvis de codi, més difícil serà mantenir aquest mapeig. Els comentaris immediats no tenen preu i massa sovint no estan disponibles. Ho vam donar per fet quan vam codificar la web inicial, però ara sovint hi ha un pas de construcció que frustra la manipulació directa.

Quan codifiqueu un tauler de control de Steammpipe, obteniu comentaris immediats tant d'HCL com d'SQL. He escrit moltes consultes de Postgres en els últims anys. Escriure'ls en un entorn que actualitza els resultats de la consulta mentre escric, o mostra missatges d'error de Postgres quan cometo errors, ha estat transformador.

sensibilitat a la web

La codificació dels taulers de control de Steammpipe també em recorda el web inicial d'altres maneres. Els enllaços, per exemple, són ciutadans de primera classe dels taulers de control de Steammpipe, i això no sempre és cert avui dia. El tauler d'Enviaments enllaça els noms d'usuari amb un altre tauler que explora tots els enviaments d'un usuari seleccionat. Tot funciona tal com esperaria un desenvolupador web.

També hi ha un botó Visualitza la font. Recordeu la font de visualització? Abans importava a la xarxa. Avui en dia, normalment només us mostra el soroll de línia reduït. Però la combinació HCL + SQL em recorda la combinació HTML + JS primerenca, en bona manera! Aquí teniu un cop d'ull a les fonts darrere d'un dels panells del tauler.

Juntament amb la retroalimentació directa, aquest tipus d'observabilitat va ajudar a la web primerenca a enlairar. Veieu alguna cosa, us preguntareu com es va fer, veureu la font, aprendreu i imitaríeu. Els creadors web novells ja no poden participar en aquest tipus de cicle virtuós. Els nous constructors de taulers de control de Steammpipe poden, i això és un bon auguri per a un ecosistema pròsper.

Visualitza les dades a la velocitat del pensament

Com que Steampipe amplia Postgres, podeu utilitzar qualsevol eina per crear taulers de control recolzats per dades de Steammpipe. Si teniu coneixements de Metabase, Tableau o una altra eina que es connecti a Postgres, la superpotència de l'API a la taula de base de dades de Steampipe accelerarà la vostra capacitat de visualitzar dades de diverses fonts en aquests entorns. Però si proveu de tauler de control de la manera Steammpipe, feu-me saber com va. Segons la meva pròpia experiència, és la manera més ràpida i divertida de convertir una idea en un tauler útil.

Copyright © 2022 IDG Communications, Inc.

Leave a Comment

Your email address will not be published. Required fields are marked *