Simpleton é uma solução UDP extremamente simples para registro de banco de dados que apenas aceita pacotes UDP e os armazena em um banco de dados SQLite3. Por padrão, ele os armazena em simpleton.db
no diretório atual, mas você pode substituir isso pelas opções de linha de comando.
Isso não é muito útil para nada além de testes realmente simples, mas você pode expandi-lo.
Para construir o simpleton, basta executar make
e o binário aparecerá no diretório bin
. Por padrão, ele será compilado para OSX.
make
Para construir para outras plataformas edite as variáveis GOOS
e GOARCH
no Makefile
. Você também pode inserir esses parâmetros na linha de comando ao executar make
, assim.
GOOS=linux GOARCH=amd64 make
Você pode encontrar os valores dessas variáveis para diferentes plataformas em syslist.go, mas os valores mais comuns são:
SO | GOOS | GOARCH |
---|---|---|
OSX | darwin | amd64 |
Linux | linux | amd64 |
Windows | Windows | amd64 |
Claro, você pode compilar cruzadamente (por exemplo, compilar binários Linux em máquinas OSX) apenas definindo a combinação certa de GOOS e GOARCH, embora no Windows você possa ter problemas. (Eu não construí isso para Windows).
O binário aparecerá em bin
, então você pode executá-lo no diretório principal com:
bin/simpleton
Para listar as opções da linha de comando, você usa o sinalizador -h
:
bin/simpleton -h
Aqui está um exemplo de execução do Simpleton com opções para fazê-lo escutar uma interface específica (10.1.0.3 no exemplo) e porta (7788) e armazenar o banco de dados em /tmp/simpleton.db
:
bin/simpleton -u 10.1.0.3:7788 -d /tmp/simpleton.db
Se quiser vasculhar o banco de dados resultante, você pode instalar o SQLite3 em sua máquina e inspecionar o banco de dados usando o comando sqlite3
. Para abrir o banco de dados do exemplo anterior basta executar:
sqlite3 /tmp/simpleton.db
Digite .schema
para ver o esquema de banco de dados muito simples. Agora você pode executar instruções SQL nos dados.
Nota: não tenho certeza sobre a simultaneidade do SQLite3, então não usaria o banco de dados como ponto de integração (você nunca deveria).
É também por isso que o código possui um bloqueio mutex em torno dos acessos ao banco de dados. O código foi retirado de um projeto que possui várias goroutines acessando o banco de dados. Este programa não tem isso, mas deixei o mutex bloqueado apenas como um lembrete.
Para uso em produção você deve usar um banco de dados PostgreSQL ou similar, que seja construído para simultaneidade. Mas para pequenos experimentos e quando você tem simultaneidade limitada, o SQLite3 é uma fera surpreendentemente capaz.
Observe que a interface HTTP não possui mecanismos de autenticação ou segurança, portanto, não use isso para nada além de testes. O endereço padrão da interface web é:
http://localhost:8008/
A interface web é bastante simples. Você tem dois URLs que acessam dados:
/data
/data/{id}
O primeiro retorna um array JSON, o segundo retorna apenas o payload da entrada de dados fornecida pelo ID. O caminho /data
será limitado apenas às 20 entradas mais recentes no banco de dados, mas você pode percorrer o banco de dados definindo os parâmetros offset
e limit
de URL:
/data?offset=10&limit=10
Simpleton suporta ter um diretório com arquivos estáticos para que você possa criar algumas páginas HTML com links úteis para o conteúdo ou talvez para hospedar aplicativos JS-frontend.
Verifique a ajuda da linha de comando para ver os parâmetros com os quais você pode mexer.