ja·ne·la
gem, Ruby. Uma janela, é claro.
Declare medidas e dimensões nos seus modelos ActiveRecord. Clique em qualquer valor e o dashboard inteiro se ajusta em volta dele. Sem data warehouse, sem front-end separado, sem painel administrativo remendado ao lado.
Abrir o dashboard ao vivo Ler o código
gem "janela", "~> 0.16"
Livre e de código aberto, rodando a versão 0.16.1 aqui mesmo.
Alguns painéis sobre um ano de pedidos de demonstração. Clicar num valor filtra os outros e põe o filtro na URL, então um dashboard filtrado é um link que você pode enviar. Segure Ctrl, ou Cmd no Mac, para selecionar mais de um valor. Esc limpa. Nada aqui é um vídeo.
Ou aperte Esc. O filtro está na URL, então o link é tudo de que você precisa.
Revenue $660.823,69
| $277.451,70 | |
| $213.135,26 | |
| $170.236,73 |
| 410 | |
| 103 | |
| 63 | |
| 24 |
Esse dashboard são algumas linhas numa tabela do banco de dados. Ninguém fez deploy para criá-lo, e você pode editá-lo agora mesmo.
O dashboard completo tem nove painéis, incluindo uma série temporal e um top cinco. As páginas do próprio Janela oferecem um índice e um editor que não precisam de JavaScript nenhum.
Toda opção de business intelligence para Rails hoje é uma de duas coisas.
Nenhuma das duas deixa você clicar num gráfico e reajustar todos os outros da página. É essa a parte pela qual as pessoas compram uma ferramenta comercial, e é a parte que o Janela faz.
Declaradas no modelo, num bloco que quem programa Rails lê de uma só vez. Não é uma nova linguagem de consulta.
Turbo Frames e um único controlador Stimulus. Você não escreve JavaScript, e não há sockets nem streams para manter rodando.
/dashboards/orders/revenue/status?as=bar é um painel inteiro. Dá para abrir, linkar e cachear.
Componha em ERB, ou deixe quem analisa e não faz deploy montar um a partir de registros, só com HTML.
Congele os números num instante para que o público veja exatamente o que foi aprovado, enquanto o dashboard ao vivo segue se movendo.
Toda consulta passa pelo seu próprio policy_scope. O Janela não traz tenancy própria e pergunta antes de ler.
Declare uma vez no modelo, depois ponha painéis onde quiser.
class Order < ApplicationRecord
belongs_to :customer
janela do
measure :revenue, sum: :amount, prefix: "$"
measure :orders, count: true
dimension :status
dimension :region, through: :customer
dimension :placed_on, granularity: :month
end
end
<%= janela_frame do %>
<%= janela_pane Order, :revenue %>
<%= janela_pane Order, :revenue, by: :status, as: :bar %>
<%= janela_pane Order, :revenue, by: :region %>
<% end %>
Adicione a gem, monte o engine, registre dois controladores Stimulus. Essa é a instalação.
Licença MIT e pequeno de propósito. O Janela entrega a parte que sustenta uma ferramenta de business intelligence e para por aí. Os cinco por cento restantes de cada pessoa são diferentes, então o projeto fica legível o bastante para que desmontá-lo seja um jeito normal de usá-lo, e não último recurso. Cada decisão está registrada como um ADR, para você ler por que uma peça existe antes de mudá-la.
Não. O Janela consulta o seu banco de dados pelo ActiveRecord e não guarda dados por conta própria. Se depois você colocar os dados de relatório num armazenamento colunar, uma medida continua sendo uma medida.
Sim, e sem configuração. Se o seu controller define policy_scope, todo painel é calculado por ele, inclusive os que alguém compôs. Há um guia para aplicações multi tenant.
Não. Com importmap, o engine fixa o que precisa. Com esbuild ou bun há um pacote npm com os mesmos dois controladores. Os gráficos usam Chart.js e mais nada.
Consegue. Um dashboard é um registro, então as páginas do próprio engine deixam a pessoa adicionar painéis, reordená-los e definir a grade, só com HTML simples. Ela só escolhe medidas e dimensões que os seus modelos já declararam.
É um alfa na versão 0.16.1, usado em aplicações reais e coberto por testes unitários e de navegador real. Mudanças que quebram são comunicadas num guia de atualização e numa tarefa janela:doctor que lê a sua aplicação e diz o que mudar.
Porque uma janela tem frames e panes, quadros e painéis, e é daí que vem o resto do vocabulário da gem. Nenhuma dessas palavras é algo que a sua aplicação provavelmente vá querer para si, e é esse o ponto.