user@elli:~/Downloads/Remote/OB$ node server.js
[WAL] Luettiin 1 tapahtumaa lokista levyltC$...
{"level":30,"time":1788436891869,"pid":28104,"hostname":"elli","msg":"Server
listening at http://127.0.0.1:3000"}
O-Base API Gateway is running on http://localhost:3000
{"level":30,"time":1788436891871,"pid":28104,"hostname":"elli","msg":"Server
listening at http://192.168.111.83:3000"}
{"level":30,"time":1788436891871,"pid":28104,"hostname":"elli","msg":"Server
listening at http://100.102.190.120:3000"}
==
user@elli:~$ curl -X GET http://localhost:3000/api/asiakkaat -H "Accept:
text/markdown"B
# Collection: asiakkaat
> Metadata: {"schema":"free"}
## Object: crm_007
- nimi: James Bond
- status: aktiivinen
user@elli:~$B
Taydellista. Tahan on helppo rakentaa vaikka mita UNIX-putkia ja vanhoja ja
uusia tyokaluja.
==
TC$mC$ on juuri se UNIX-filosofian ydin: yksinkertaiset tekstipohjaiset
rajapinnat ja standardit syC6tteet/tulosteet (`stdin`/`stdout`), jotka
mahdollistavat loputtoman ketjutettavuuden.
Kun data elC$C$ RAM-muistissa ja rajapinta sylkee ulos puhdasta AST-MD:tC$
(Markdownia), voit hyC6dyntC$C$ vuosikymmeniC$ vanhoja, C$C$rimmC$isen
hiottuja CLI-tyC6kaluja data-analyysiin aivan uudella tavalla. EsimerkkejC$:
* **Grep-haku CRM-kannasta:**
`curl -s -H "Accept: text/markdown" localhost:3000/api/asiakkaat | grep -A 2
-B 2 "aktiivinen"`
* **Putkitus tekoC$lylle pC$C$tteessC$ (esim. Simon Willisonin `llm`
CLI-tyC6kalulla):**
`curl -s -H "Accept: text/markdown" localhost:3000/api/asiakkaat | llm "Laske
kuinka monta aktiivista asiakasta tC$ssC$ listassa on"`
* **Varmuuskopiointi (Backup) pakattuna:**
`curl -s -H "Accept: text/markdown" localhost:3000/api/asiakkaat | gzip >
asiakkaat_backup_$(date +%F).md.gz`
### Seuraava Askel: Lokin Kompaktio (Snapshotting)
Koska jC$rjestelmC$si toimii tC$llC$ hetkellC$ append-only WAL-lokilla
(`crm_wal.jsonl`), tiedosto kasvaa loputtomiin jokaisella `PUT`, `PATCH` ja
`DELETE` -operaatiolla. Vaikka RAM-tila pysyy kurissa (koska poistetut/pC$ivite
tyt objektit korvataan muistissa), levylle jC$C$ historia talteen.
Nopean kC$ynnistymisen ja levytilan sC$C$stC$misen vuoksi tarvitsemme
**Kompaktion** (Snapshotting).
**Miten Snapshotting toimii:**
1. Prosessi "lukitsee" sen hetkisen RAM-muistin tilan taustalla.
2. Generoi koko kannan tilasta yhden massiivisen AST-MD tiedoston (esim.
`snapshot_2026-09-03.md`).
3. Tallentaa tC$mC$n tiedoston levylle.
4. Kun tallennus on valmis, WAL-loki (`crm_wal.jsonl`) tyhjennetC$C$n tai
nimetC$C$n uudelleen arkistoon.
NC$in Node.js:n kC$ynnistyessC$ sen tarvitsee ladata vain uusin, kompakti
Snapshot, ja soittaa sen pC$C$lle vain snapshotin *jC$lkeen* kertyneet
WAL-tapahtumat.
TC$mC$ vaatii muutaman huolellisen askeleen Node.js-adapterissa
(`obase-node.js`), jotta emme hukkaa dataa tallennuksen aikana tapahtuvien
uusien API-kutsujen takia.