-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Nuno Aguiar edited this page Feb 19, 2024
·
35 revisions
Some noteworthy examples of usage per category:
- Mixing with Unix commands
- Manipulate text
- Parsing UNIX files
- External APIs
- Using JSON schemas
- Using docker
- Using Kubectl
- Using Excel
- Using ChatGPT
- Using Ollama
Command:
# Creates a data.ndjson file where each record is formatted from json files in /some/data
find /some/data -name "*.json" -exec oafp {} output=json \; > data.ndjson
Command:
# Get a json with the lyrics of a song
curl -s https://api.lyrics.ovh/v1/Coldplay/Viva%20La%20Vida | oafp path="substring(lyrics,index_of(lyrics, '\n'),length(lyrics))"
Result:
I used to rule the world
[...]
Oooooh Oooooh Oooooh
Command:
# Converting the Unix’s syslog into a json output
cat syslog | oafp in=raw path="split(trim(@),'\n').map(&split(@, ' ').{ date: concat([0],concat(' ',[1])), time: [2], host: [3], process: [4], message: join(' ',[5:]) }, [])"
# Converting /etc/os-release to SQL insert statements
oafp cmd="cat /etc/os-release" in=ini outkey=release path="[@]" sql="select '$HOSTNAME' \"HOST\", *" out=sql sqlnocreate=true
Command:
# Generating a simple table of the current public IP address
curl -s https://ifconfig.co/json | oafp flatmap=true out=map
# Converting the Cloudflare DNS trace info
curl -s https://1.1.1.1/cdn-cgi/trace | oafp in=ini out=ctree
Command:
# Get a list of schemas
oafp cmd="curl https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/api/json/catalog.json" path="schemas[].{name:name,description:description,files:to_string(fileMatch)}" out=ctable
Result:
name │ description │ files
───────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────
1Password SSH Agent Config │Configuration file for the 1Password SSH agent │["**/1password/ssh/agent.toml"]
Application Accelerator │Application Accelerator for VMware Tanzu │["accelerator.yaml"]
AnyWork Automation Configuration │AnyWork Automation Configuration used to configure automation scripts on AnyWork │[".awc.yaml",".awc.yml",".awc.json",".awc.jsonc",".awc"]
[...]
Command:
oafp cmd="docker ps --format json" input=ndjson ndjsonjoin=true path="[].{id:ID,name:Names,state:State,image:Image,netwo
rks:Networks,ports:Ports,Status:Status}" sql="select * order by networks,state,name" output=ctable
Result:
id │ name │ state │ image │ networks │ ports │ Status
────────────┼────────────────────────┼───────┼──────────────────────────────┼──────────────────────┼───────────────────────────────────────────────────────┼──────────
af3adb5b8349│registry │running│registry:2 │bridge,k3d-k3s-default│0.0.0.0:5000->5000/tcp │Up 2 hours
cba6e3807b44│k3d-k3s-default-server-0│running│rancher/k3s:v1.27.4-k3s1 │k3d-k3s-default │ │Up 2 hours
b775ad480764│k3d-k3s-default-serverlb│running│ghcr.io/k3d-io/k3d-proxy:5.6.0│k3d-k3s-default │80/tcp, 0.0.0.0:1080->1080/tcp, 0.0.0.0:45693->6443/tcp│Up 2 hours
[#3 rows]
Command:
oafp cmd="kubectl get pods -A -o json" path="items[].{ns:metadata.namespace,kind:metadata.ownerReferences[].kind,name:metadata.name,status:sta
tus.phase,restarts:sum(status.containerStatuses[].restartCount),node:spec.nodeName,age:timeago(status.startTime)}" sql="select * order by status,name" output=ctable
Result:
ns │ kind │ name │ status │restarts│ node │ age
───────────┼──────────┼──────────────────────────────────────┼─────────┼────────┼────────────────────────┼──────────────
kube-system│ReplicaSet│coredns-77ccd57875-5m44t │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│ReplicaSet│local-path-provisioner-957fdf8bc-24hmf│Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│ReplicaSet│metrics-server-648b5df564-hzbwb │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│ReplicaSet│socks-server-d7c8c4d78-r6jc9 │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│DaemonSet │svclb-socks-server-78b973ca-zvf58 │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│DaemonSet │svclb-traefik-e1776788-7z2gf │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│ReplicaSet│traefik-64f55bb67d-g2vps │Running │0 │k3d-k3s-default-server-0│66 minutes ago
kube-system│Job │helm-install-traefik-6j5zx │Succeeded│1 │k3d-k3s-default-server-0│66 minutes ago
kube-system│Job │helm-install-traefik-crd-z59fs │Succeeded│0 │k3d-k3s-default-server-0│66 minutes ago
[#9 rows]
Command:
oafp cmd="kubectl get nodes -o json" path="items[].{node:metadata.name,totalCPU:status.capacity.cpu,allocCPU:status.allocatable.cpu,totalMem:to_bytesAbbr(from_bytesAbbr(status.capacity.memory)),allocMem:to_bytesAbbr(from_bytesAbbr(status.allocatable.memory)),totalStorage:to_bytesAbbr(from_bytesAbbr(status.capacity.\"ephemeral-storage\")),allocStorage:to_bytesAbbr(to_number(status.allocatable.\"ephemeral-storage\")),conditions:join(\`, \`,status.conditions[].reason)}" output=ctable
Result:
node │totalCPU│allocCPU│totalMem│allocMem│totalStorage│allocStorage│ conditions
────────────────────────┼────────┼────────┼────────┼────────┼────────────┼────────────┼───────────────────────────────────────────────────────────────────────────────────────────
k3d-k3s-default-server-0│4 │4 │3.85 GB │3.85 GB │77.6 GB │73.8 GB │KubeletHasSufficientMemory, KubeletHasNoDiskPressure, KubeletHasSufficientPID, KubeletReady
[#1 row]
Command:
# Processes each json file in /some/data creating and updating the data.xlsx file with a sheet for each file
find /some/data -name "*.json" | xargs -I '{}' /bin/sh -c 'oafp file={} output=xls xlsfile=data.xlsx xlsopen=false xlssheet=$(echo {} | sed "s/.*\/\(.*\)\.json/\1/g" )'
Command:
# Setting up the LLM model and gather the data into a data.json file
export OAFP_MODEL="(type: openai, model: gpt-3.5-turbo, key: ..., timeout: 900000)"
echo "list all United Nations secretaries with their corresponding 'name', their mandate 'begin date', their mandate 'end date' and their corresponding secretary 'numeral'" | oafp input=llm output=json > data.json
Result:
oafp data.json
─ secretaries ╭ [0] ╭ name : Trygve Lie
│ ├ begin date: 1946-02-01
│ ├ end date : 1952-11-10
│ ╰ numeral : 1
├ [1] ╭ name : Dag Hammarskjöld
│ ├ begin date: 1953-04-10
│ ├ end date : 1961-09-18
│ ╰ numeral : 2
├ [2] ╭ name : U Thant
│ ├ begin date: 1961-11-30
│ ├ end date : 1971-12-31
│ ╰ numeral : 3
├ [3] ╭ name : Kurt Waldheim
│ ├ begin date: 1972-01-01
│ ├ end date : 1981-12-31
│ ╰ numeral : 4
├ [4] ╭ name : Javier Pérez de Cuéllar
│ ├ begin date: 1982-01-01
│ ├ end date : 1991-12-31
│ ╰ numeral : 5
├ [5] ╭ name : Boutros Boutros-Ghali
│ ├ begin date: 1992-01-01
│ ├ end date : 1996-12-31
│ ╰ numeral : 6
├ [6] ╭ name : Kofi Annan
│ ├ begin date: 1997-01-01
│ ├ end date : 2006-12-31
│ ╰ numeral : 7
├ [7] ╭ name : Ban Ki-moon
│ ├ begin date: 2007-01-01
│ ├ end date : 2016-12-31
│ ╰ numeral : 8
╰ [8] ╭ name : António Guterres
├ begin date: 2017-01-01
├ end date : present
╰ numeral : 9
oafp data.json path=secretaries output=ctable
name │begin date│ end date │numeral
───────────────────────┼──────────┼──────────┼───────
Trygve Lie │1946-02-01│1952-11-10│1
Dag Hammarskjöld │1953-04-10│1961-09-18│2
U Thant │1961-11-30│1971-12-31│3
Kurt Waldheim │1972-01-01│1981-12-31│4
Javier Pérez de Cuéllar│1982-01-01│1991-12-31│5
Boutros Boutros-Ghali │1992-01-01│1996-12-31│6
Kofi Annan │1997-01-01│2006-12-31│7
Ban Ki-moon │2007-01-01│2016-12-31│8
António Guterres │2017-01-01│present │9
[#9 rows]
Command:
export OAFP_MODEL="(type: ollama, model: 'mistral:instruct', url: 'https://models.local', timeout: 900000)"
echo "Output a JSON array with 15 cities where each entry has the 'city' name, the estimated population and the corresponding 'country'" | oafp input=llm output=json > data.json
oafp data.json output=ctable sql="select * order by population desc"
Result:
city │population│ country
───────────┼──────────┼──────────
Shanghai │270584000 │China
Tokyo │37436958 │Japan
Delhi │30290936 │India
São Paulo │21935296 │Brazil
Beijing │21516000 │China
Mexico City│21402981 │Mexico
Mumbai │20712874 │India
Cairo │20636449 │Egypt
Osaka │19365701 │Japan
Dhaka │18568373 │Bangladesh
[#10 rows]