Published: Oct 17, 2023 by Isaac Johnson
There are a few tools that I’ve been meaning to check. Because they are generally small or special purpose, I tend to gather them up to look together in a fun “Tools Roundup” type of post.
We’ll look at a process monitor, Omniscient. We’ll check out an uptime check, OpenStatus, that can be run locally or at a free tier in the cloud. Resend as an excellent email tool and finally we’ll look at some free Database options.
Omniscient
Omniscient can be best described as a tiny process manager. Eray wrote it mostly as an excuse to “to study Tauri”.
I tried as user and root with the AppImage (having added fuse)
I installed and tried running the deb package as well (and as root)
builder@LuiGi17:~/Workspaces/jekyll-blog$ sudo dpkg -i omniscient_0.1.1_amd64.deb
(Reading database ... 151866 files and directories currently installed.)
Preparing to unpack omniscient_0.1.1_amd64.deb ...
Unpacking omniscient (0.1.1) over (0.1.1) ...
Setting up omniscient (0.1.1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for mailcap (3.70+nmu1ubuntu1) ...
builder@LuiGi17:~/Workspaces/jekyll-blog$ omniscient
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
builder@LuiGi17:~/Workspaces/jekyll-blog$ code .
builder@LuiGi17:~/Workspaces/jekyll-blog$ sudo omniscient
libEGL warning: MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libEGL warning: MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
I’m running Jammy on this Ubuntu with all the updates. I’ll have to circle back and try a different distro next
A quick note, initially I couldn’t get X to run. A quick wsl --update
with a restart (happened automatically, but you can do wsl --shutdown
solved it. see this post)
It seemed my existing Ubuntu’s all lacked the latest GLIBC. I took a whole day just to try and compile from source and link it, but still no avail
builder@DESKTOP-QADGF36:~/Workspaces/jekyll-blog$ omniscient
omniscient: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by omniscient)
omniscient: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by omniscient)
omniscient: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by omniscient)
I moved to a fully upgraded Ubuntu 22 Jammy using ‘sudo do-release-upgrade’.
builder@anna-MacBookAir:~$ sudo do-release-upgrade
Checking for a new Ubuntu release
There is no development version of an LTS available.
To upgrade to the latest non-LTS development release
set Prompt=normal in /etc/update-manager/release-upgrades.
builder@anna-MacBookAir:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
It rather trashed my k3s cluster (but it was the demo master anyways).
I went from my WSL to the host with “-X” to forward X through SSH back to WSL
builder@DESKTOP-QADGF36:~$ ssh -X builder@192.168.1.13
Warning: No xauth data; using fake authentication data for X11 forwarding.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-86-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
12 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm
1 updates could not be installed automatically. For more details,
see /var/log/unattended-upgrades/unattended-upgrades.log
Last login: Mon Oct 16 05:05:29 2023 from 192.168.1.78
builder@anna-MacBookAir:~$ omniscient
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/card0: Permission denied
libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/card0: Permission denied
This time it came through
I can see CPU information
Disk
and processes
Here is a bit of a tour around the app (X forwarded to WSL forwarded to Windows 11, so it shows a bit of lag, understandably)
OpenStatus
My next app to check out is “OpenStatus”
We’ll start with local.
We need to clone the repo
builder@LuiGi17:~/Workspaces$ git clone https://github.com/openstatusHQ/openstatus.git
Cloning into 'openstatus'...
remote: Enumerating objects: 5888, done.
remote: Counting objects: 100% (2774/2774), done.
remote: Compressing objects: 100% (1171/1171), done.
remote: Total 5888 (delta 2167), reused 1646 (delta 1597), pack-reused 3114
Receiving objects: 100% (5888/5888), 4.11 MiB | 7.74 MiB/s, done.
Resolving deltas: 100% (3257/3257), done.
builder@LuiGi17:~/Workspaces$ cd openstatus/
And use Node 18
builder@LuiGi17:~/Workspaces/openstatus$ nvm install --lts
Installing latest LTS version.
Downloading and installing node v18.18.1...
Downloading https://nodejs.org/dist/v18.18.1/node-v18.18.1-linux-x64.tar.xz...
################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v18.18.1 (npm v9.8.1)
then add pnpm
builder@LuiGi17:~/Workspaces/openstatus$ npm install -g pnpm
added 1 package in 1s
1 package is looking for funding
run `npm fund` for details
Then we can finally install the dependencies with pnpm
builder@LuiGi17:~/Workspaces/openstatus$ pnpm install
Scope: all 16 workspace projects
Lockfile is up to date, resolution step is skipped
Packages: +1706
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Downloading registry.npmjs.org/next/13.4.19: 12.97 MB/12.97 MB, done
Downloading registry.npmjs.org/cytoscape-fcose/2.2.0: 7.60 MB/7.60 MB, done
Downloading registry.npmjs.org/@next/swc-linux-x64-musl/13.4.19: 42.84 MB/42.84 MB, doneownloading registry.npmjs.org/@next/swc-linux-x64-gnu/13.4.19: 20.86 MB/36.21 MB
Downloading registry.npmjs.org/@next/swc-linux-x64-gnu/13.4.19: 36.21 MB/36.21 MB, done
Downloading registry.npmjs.org/typescript/5.2.2: 7.23 MB/7.23 MB, done
Downloading registry.npmjs.org/next/13.5.3: 13.70 MB/13.70 MB, done
Downloading registry.npmjs.org/@next/swc-linux-x64-musl/13.5.3: 44.81 MB/44.81 MB, done
Downloading registry.npmjs.org/imagescript/1.2.16: 10.59 MB/10.59 MB, done
Downloading registry.npmjs.org/@next/swc-linux-x64-gnu/13.5.3: 38.43 MB/38.43 MB, done
Downloading registry.npmjs.org/react-email/1.9.5: 29.05 MB/29.05 MB, done
Progress: resolved 1706, reused 0, downloaded 1705, added 1706, done
Downloading registry.npmjs.org/turbo-linux-64/1.10.12: 17.14 MB/17.14 MB, done
node_modules/.pnpm/core-js-pure@3.32.2/node_modules/core-js-pure: Running postinstall snode_modules/.pnpm/core-js-pure@3.32.2/node_modules/core-js-pure: Running postinstall script, done in 74mses5-ext@0.10.62/node_modules/es5-ext: Running postinstall script...
node_modules/.pnpm/es5-ext@0.10.62/node_modules/es5-ext: Running postinstall script, done in 75ms
node_modules/.pnpm/bufferutil@4.0.7/node_modules/bufferutil: Running install script...
node_modules/.pnpm/fast-folder-size@1.6.1/node_modules/fast-folder-size: Running postinnode_modules/.pnpm/bufferutil@4.0.7/node_modules/bufferutil: Running install script, donode_modules/.pnpm/@sentry+cli@1.75.2/node_modules/@sentry/cli: Running install script, done in 1.1s done in 131ms
node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs: Running postinstall scriptnode_modules/.pnpm/utf-8-validate@6.0.3/node_modules/utf-8-validate: Running install script, done in 96ms
node_modules/.pnpm/tree-sitter-json@0.20.0/node_modules/tree-sitter-json: Running install script...
node_modules/.pnpm/tree-sitter-yaml@0.5.0/node_modules/tree-sitter-yaml: Running install script...
node_modules/.pnpm/tree-sitter-json@0.20.0/node_modules/tree-sitter-json: Running instanode_modules/.pnpm/tree-sitter-yaml@0.5.0/node_modules/tree-sitter-yaml: Running install script, done in 4ssbuild@0.19.4/node_modules/esbuild: Running postinstall script, done in 130ms
node_modules/.pnpm/turbo@1.10.12/node_modules/turbo: Running postinstall script, done in 106ms
node_modules/.pnpm/better-sqlite3@8.7.0/node_modules/better-sqlite3: Running install script...
node_modules/.pnpm/better-sqlite3@8.7.0/node_modules/better-sqlite3: Running install scnode_modules/.pnpm/tree-sitter@0.20.4/node_modules/tree-sitter: Running install script, done in 10.9s
node_modules/.pnpm/contentlayer@0.3.4_esbuild@0.19.4/node_modules/contentlayer: Runningnode_modules/.pnpm/contentlayer@0.3.4_esbuild@0.19.4/node_modules/contentlayer: Running postinstall script, done in 1.2s
devDependencies:
+ @ianvs/prettier-plugin-sort-imports 4.1.0
+ @openstatus/eslint-config 0.0.0 <- packages/config/eslint
+ @turbo/gen 1.10.12
+ eslint 8.50.0
+ prettier 3.0.3
+ prettier-plugin-tailwindcss 0.5.4
+ turbo 1.10.12
+ typescript 5.2.2
Done in 46.8s
The next steps are to sign-up and setup API keys for the following apps (at a minimum):
- Clerk.com for Auth
- TinyBird for pipes/streaming data to
- Turso for a free cloud SQLLite database
- Upstash for Redis and QStash
- Resend for emails
Honestly, I looked at the large list in the env setup docs and thought “okay, you win, I’ll try the cloud option”.
Cloud Option
We can sign up using Github or Google
Which drops us into a new workspace
For my first HTTP monitor, I’ll choose to monitor my AWX instance
Presently, my only provider is email
Next, I’ll create a status page for this monitor
The new https://fb-status.openstatus.dev/ initially shows nothing
After a day, I can see some results showing up on https://fb-status.openstatus.dev/. This is a public page so you are welcome to look now as well.
two days later:
Upgrade
Under settings, we can upgrade to a paid tier if we want to add more users or monitors
Resend
That first tool had me curious about Resend. Today, I generally use a free account of Sendgrid for occasional email alerts.
We can go to “Getting Started” to signup
You can create a bespoke login or use a federated identity like GH
I opted for the Github route
We then need to create a “team”
The Dashboard is all prepped to step us through creating an API key and using it. We’ll click “Add API Key”
And then we’ll use the curl steps to start
$ curl -X POST 'https://api.resend.com/emails' \
-H 'Authorization: Bearer re_XXXXXXXXXXXXXXXXXXXXXXXX' \
-H 'Content-Type: application/json' \
-d $'{
"from": "onboarding@resend.dev",
"to": "isaac.johnson@gmail.com",
"subject": "Hello World",
"html": "<p>Congrats on sending your <strong>first email</strong>!</p>"
}'
{"id":"0f8d68bc-5967-4071-bf85-7672684f9437"}
A consequence of free and easy to use email tools is they most certainly are abused by spammers. It was little surprise that I found the onboarding email in my spam folder
I took a look and clicked the ‘Report not spam’ button to get it back to my inbox
Python
Let’s try a quick Python example
I’ll import the Resend module with pip
builder@LuiGi17:~/Workspaces/newNotification$ pip install resend
Defaulting to user installation because normal site-packages is not writeable
Collecting resend
Using cached resend-0.5.2-py2.py3-none-any.whl (7.3 kB)
Collecting requests==2.31.0
Using cached requests-2.31.0-py3-none-any.whl (62 kB)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests==2.31.0->resend) (3.3)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests==2.31.0->resend) (1.26.5)
Collecting charset-normalizer<4,>=2
Downloading charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (138 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 138.7/138.7 KB 1.0 MB/s eta 0:00:00
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests==2.31.0->resend) (2020.6.20)
Installing collected packages: charset-normalizer, requests, resend
WARNING: The script normalizer is installed in '/home/builder/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed charset-normalizer-3.3.0 requests-2.31.0 resend-0.5.2
I can then create a pythong script to use it
builder@LuiGi17:~/Workspaces/newNotification$ cat testingres.py
import os
import resend
resend.api_key = os.environ["RESEND_API_KEY"]
params = {
"from": "onboarding@resend.dev",
"to": ["isaac.johnson@gmail.com"],
"subject": "testing",
"html": "<strong>hello, world!</strong>",
"reply_to": "onboarding@resend.dev",
"tags": [
{"name": "tag1", "value": "tagvalue1"},
{"name": "tag2", "value": "tagvalue2"},
],
}
r = resend.Emails.send(params)
print(r)
I can then set an env var to my key and run the script
$ export RESEND_API_KEY=re_XXXXXXXXXXXXXXXXXXXXXXX
$ python3 ./testingres.py
{'id': '1e44ba30-5dfe-475a-b972-882e3aa44d2f'}
Note: the first time i did this I foolishly named the script resend.py which caused a bad import:
AttributeError: partially initialized module 'resend' has no attribute 'Emails' (most likely due to a circular import)
So the lesson here is never name your script after the module you are trying to consume.
We can see the email came through without issue
Paid Tier
If we want to scale up, there are higher paid tiers
I liked the fact Resend showed me a running total of usage so it’s pretty easy to see if I’ll hit the free tier limit.
Free Databases
I’ve spoken on using Aiven Kafka before. Aiven has plenty of options, most cost, but they do have a free tier as well.
I can whip up a Free Tier PostgreSQL in AWS
This created a very small, but usable PSQL DB
I can now login with psql (had to use posgresql-client-14
even tho my DB is v15)
builder@LuiGi17:~/Workspaces/newNotification$ psql 'postgres://avnadmin:AVNS_xxxxxxxxxxxxxxxxx@pg-295c4a9c-isaac-1040.aivencloud.com:11996/defaultdb?sslmode=require'
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1), server 15.4)
WARNING: psql major version 14, server major version 15.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
defaultdb=>
I can check the version and see the Databases already there
defaultdb=> select version();
version
--------------------------------------------------------------------------------------------
PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc, a c1c19cd459 p 428fabf8fc, 64-bit
(1 row)
defaultdb=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
_aiven | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =T/postgres +
| | | | | postgres=CTc/postgres
defaultdb | avnadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
This instance will limit me to 20 connections and 5Gb of storage. So it’s definitely a basic hobbyist/starter instance.
Turso
We’ll next checkout Turso.
Clicking Signup prompts use to use Github
We’re prompted to setup a Linux CLI during the signup process
$ brew install tursodatabase/tap/turso
Running `brew update --auto-update`...
Error: Failed to download https://formulae.brew.sh/api/formula.jws.json!
Failed to download https://formulae.brew.sh/api/cask.jws.json!
Failed to download https://formulae.brew.sh/api/formula_tap_migrations.jws.json!
Failed to download https://formulae.brew.sh/api/cask_tap_migrations.jws.json!
==> Auto-updated Homebrew!
Updated 1 tap (kdash-rs/kdash).
You have 15 outdated formulae installed.
==> Tapping tursodatabase/tap
Cloning into '/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/tursodatabase/homebrew-tap'...
remote: Enumerating objects: 336, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 336 (delta 66), reused 64 (delta 41), pack-reused 232
Receiving objects: 100% (336/336), 53.97 KiB | 6.00 MiB/s, done.
Resolving deltas: 100% (212/212), done.
Tapped 2 formulae (14 files, 136.1KB).
==> Fetching tursodatabase/tap/turso
==> Downloading https://github.com/tursodatabase/homebrew-tap/releases/download/v0.86.1/homebrew-tap
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/59
############################################################################################# 100.0%
==> Installing turso from tursodatabase/tap
==> Downloading https://formulae.brew.sh/api/formula.jws.json
curl: (60) SSL certificate problem: certificate is not yet valid
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Warning: formula.jws.json: update failed, falling back to cached version.
==> Downloading https://formulae.brew.sh/api/cask.jws.json
curl: (60) SSL certificate problem: certificate is not yet valid
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Warning: cask.jws.json: update failed, falling back to cached version.
Welcome to Turso!
If you are a new user, please sign up with turso auth signup; otherwise login
with turso auth login. When you are authenticated, you can create a new
database with turso db create. You can also run turso help for help.
For a more comprehensive getting started guide, open the following URL:
https://docs.turso.tech/tutorials/get-started-turso-cli
==> Caveats
Bash completion has been installed to:
/home/linuxbrew/.linuxbrew/etc/bash_completion.d
==> Summary
🍺 /home/linuxbrew/.linuxbrew/Cellar/turso/0.86.1: 6 files, 16.6MB, built in 5 seconds
==> Running `brew cleanup turso`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> `brew cleanup` has not been run in the last 30 days, running now...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /home/builder/.cache/Homebrew/berkeley-db@5--5.3.28_1... (23.0MB)
Removing: /home/builder/.cache/Homebrew/bzip2--1.0.8... (223KB)
Removing: /home/builder/.cache/Homebrew/expat--2.5.0... (253.4KB)
Removing: /home/builder/.cache/Homebrew/gcc--13.1.0... (111.8MB)
Removing: /home/builder/.cache/Homebrew/gmp--6.2.1_1... (1.1MB)
Removing: /home/builder/.cache/Homebrew/isl--0.26... (2.1MB)
Removing: /home/builder/.cache/Homebrew/k9s--0.27.4... (23.1MB)
Removing: /home/builder/.cache/Homebrew/kdash--v0.4.2.tar.gz... (4.3MB)
Removing: /home/builder/.cache/Homebrew/libffi--3.4.4... (219.6KB)
Removing: /home/builder/.cache/Homebrew/libmpc--1.3.1... (176.5KB)
Removing: /home/builder/.cache/Homebrew/libnsl--2.0.0_1... (43.6KB)
Removing: /home/builder/.cache/Homebrew/libtirpc--1.3.3... (285.0KB)
Removing: /home/builder/.cache/Homebrew/lz4--1.9.4... (277.5KB)
Removing: /home/builder/.cache/Homebrew/mpdecimal--2.5.1... (608.4KB)
Removing: /home/builder/.cache/Homebrew/ncurses--6.4... (2.6MB)
Removing: /home/builder/.cache/Homebrew/readline--8.2.1... (636.5KB)
Removing: /home/builder/.cache/Homebrew/six--1.16.0_3... (31.4KB)
Removing: /home/builder/.cache/Homebrew/thefuck--3.32... (3.2MB)
Removing: /home/builder/.cache/Homebrew/unzip--6.0_8... (173.6KB)
Removing: /home/builder/.cache/Homebrew/zstd--1.5.5... (1.2MB)
Removing: /home/builder/.cache/Homebrew/unzip_bottle_manifest--6.0_8... (7.9KB)
Removing: /home/builder/.cache/Homebrew/xz_bottle_manifest--5.4.3... (7.5KB)
Removing: /home/builder/.cache/Homebrew/ca-certificates_bottle_manifest--2023-05-30... (7.3KB)
Removing: /home/builder/.cache/Homebrew/binutils_bottle_manifest--2.40... (11.4KB)
Removing: /home/builder/.cache/Homebrew/kubernetes-cli_bottle_manifest--1.27.2... (7.3KB)
Removing: /home/builder/.cache/Homebrew/libnsl_bottle_manifest--2.0.0_1... (2.8KB)
Removing: /home/builder/.cache/Homebrew/python@3.11_bottle_manifest--3.11.3... (21.6KB)
Removing: /home/builder/.cache/Homebrew/sqlite_bottle_manifest--3.42.0... (8.1KB)
Removing: /home/builder/.cache/Homebrew/libxcrypt_bottle_manifest--4.4.35... (7.5KB)
Removing: /home/builder/.cache/Homebrew/libedit_bottle_manifest--20221030-3.1... (8.2KB)
Removing: /home/builder/.cache/Homebrew/readline_bottle_manifest--8.2.1... (8.6KB)
Removing: /home/builder/.cache/Homebrew/six_bottle_manifest--1.16.0_3... (1.7KB)
Removing: /home/builder/.cache/Homebrew/libmpc_bottle_manifest--1.3.1... (8KB)
Removing: /home/builder/.cache/Homebrew/mpfr_bottle_manifest--4.2.0-p9... (8KB)
Removing: /home/builder/.cache/Homebrew/k9s_bottle_manifest--0.27.4... (7.3KB)
Removing: /home/builder/.cache/Homebrew/zlib_bottle_manifest--1.2.13-1... (7.2KB)
Removing: /home/builder/.cache/Homebrew/kubectx_bottle_manifest--0.9.4... (1.9KB)
Removing: /home/builder/.cache/Homebrew/isl_bottle_manifest--0.26... (7.6KB)
Removing: /home/builder/.cache/Homebrew/bzip2_bottle_manifest--1.0.8-2... (7KB)
Removing: /home/builder/.cache/Homebrew/thefuck_bottle_manifest--3.32-2... (18.7KB)
Removing: /home/builder/.cache/Homebrew/mpdecimal_bottle_manifest--2.5.1... (8.6KB)
Removing: /home/builder/.cache/Homebrew/zstd_bottle_manifest--1.5.5... (8.3KB)
Removing: /home/builder/.cache/Homebrew/lz4_bottle_manifest--1.9.4... (8KB)
Removing: /home/builder/.cache/Homebrew/openssl@1.1_bottle_manifest--1.1.1u... (8.9KB)
Removing: /home/builder/.cache/Homebrew/expat_bottle_manifest--2.5.0... (8KB)
Removing: /home/builder/.cache/Homebrew/gcc_bottle_manifest--13.1.0... (12.7KB)
Removing: /home/builder/.cache/Homebrew/libffi_bottle_manifest--3.4.4... (8.0KB)
Removing: /home/builder/.cache/Homebrew/berkeley-db@5_bottle_manifest--5.3.28_1... (7.9KB)
Removing: /home/builder/.cache/Homebrew/portable-ruby-2.6.10_1.x86_64_linux.bottle.tar.gz... (10.5MB)
Removing: /home/builder/.cache/Homebrew/krb5_bottle_manifest--1.21... (11.4KB)
Removing: /home/builder/.cache/Homebrew/ncurses_bottle_manifest--6.4-1... (11.0KB)
Removing: /home/builder/.cache/Homebrew/libtirpc_bottle_manifest--1.3.3... (2.7KB)
Removing: /home/builder/.cache/Homebrew/gmp_bottle_manifest--6.2.1_1... (9.2KB)
I first need to sort out a bit of auth
$ turso auth login
Command '/usr/bin/x-www-browser' requires the firefox snap to be installed.
Please install it with:
snap install firefox
error: Unable to open browser.
Visit this URL on this device to log in:
https://api.turso.tech?port=36703&redirect=true&type=cli
Waiting for authentication...
✔ Success! Logged in as idjohnson
✏️ We are so happy you are here! Now that you are authenticated, it is time to create a database:
turso db create
Which confirmed after I authenticated in a browser
I could then use db create
to create a database
$ turso db create
Created group default at dfw in 10 seconds.
Created database complete-forgotten-one at group default in 4 seconds.
Start an interactive SQL shell with:
turso db shell complete-forgotten-one
To see information about the database, including a connection URL, run:
turso db show complete-forgotten-one
To get an authentication token for the database, run:
turso db tokens create complete-forgotten-one
This is libsql so it’s a bit different than PSQL. It’s an OS fork of SQLLite (you can find more about it here)
We can still connect and see schema and tables (if exist)
builder@LuiGi17:~/Workspaces/newNotification$ turso db shell complete-forgotten-one
Connected to complete-forgotten-one at https://complete-forgotten-one-idjohnson.turso.io
Welcome to Turso SQL shell!
Type ".quit" to exit the shell and ".help" to list all available commands.
→ .help
.dump Render database content as SQL
.help List of all available commands.
.indexes List indexes in a table or database
.mode Set output mode
.quit Exit this program
.read Execute commands from a file
.schema Show table schemas.
.tables List all existing tables in the database.
→ .tables
→ .schema
→ .dump
PRAGMA foreign_keys=OFF;
→
Summary
I hope you enjoyed this walkthrough of a few Open Source tools I’ve found as of late and think are pretty solid. I certainly plan to keep OpenStatus in my mix (since Uptime Kuma is hosted in my network so clearly a sustained power outage at my house/datacenter would mean no checks). I plan to keep Resend in the mix with SendGrid. I’m not sure I’ll go all in with a new SQL database format like libsql. However, I’m a fan of Aiven and will keep them in the list always.