oafp reference list of examples

Examples of use of oafp avaiable also in https://ojob.io/oafp-examples.yaml.

πŸ“š Contents

Category Sub-category # Description
AI Classification 1 Given a list of news titles with corresponding dates and sources add a category and sub-category field to each
AI Conversation 2 Send multiple requests to an OpenAI model keeping the conversation between interactions and setting the temperature parameter
AI Generate data 3 Generates synthetic data using a LLM model and then uses the recorded conversation to generate more data respecting the provided instructions
AI Groq 4 Calculation
AI Mistral 5 List all available LLM models at mistral.ai
AI Ollama 6 Setting up access to Ollama and ask for data to an AI LLM model
AI OpenAI 7 Setting up the OpenAI LLM model and gather the data into a data.json file
AI Prompt 8 Example of generating data from an AI LLM prompt
AI Summarize 9 Use an AI LLM model to summarize the weather information provided in a JSON format
AI TogetherAI 10 List all available LLM models at together.ai with their corresponding type and price components order by the more expensive, for input and output
APIs NASA 11 Markdown table of near Earth objects by name, magnitude, if is potentially hazardous asteroids and corresponding distance
APIs Network 12 Converting the Cloudflare DNS trace info
APIs Network 13 Converting the Google DNS DoH query result
APIs Network 14 Generating a simple map of the current public IP address
APIs Public Holidays 15 Return the public holidays for a given country on a given year
APIs Space 16 How many people are in space and in which craft currently in space
APIs iTunes 17 Search the Apple's iTunes database for a specific term
AWS EC2 18 Given all AWS EC2 instances in an account produces a table with name, type, vpc and private ip sorted by vpc
AWS EKS 19 Builds an excel spreadsheet with all persistent volumes associated with an AWS EKS 'XYZ' with the corresponding Kubernetes namespace, pvc and pv names
AWS Lambda 20 Prepares a table of AWS Lambda functions with their corresponding main details
AWS Lambda 21 Prepares a table, for a specific AWS Lambda function during a specific time periods, with number of invocations and minimum, average and maximum duration per periods from AWS CloudWatch
Azure Bing 22 Given an Azure Bing Search API key and a query returns the corresponding search result from Bing.
Chart Unix 23 Output a chart with the current Unix load using uptime
DB H2 24 Perform a SQL query over a H2 database.
DB H2 25 Store the json result of a command into a H2 database table.
DB SQLite 26 Perform a query over a database using JDBC.
DB SQLite 27 Store the json result on a SQLite database table.
Diff Envs 28 Given two JSON files with environment variables performs a diff and returns a colored result with the corresponding differences
Diff Lines 29 Performing a diff between two long command lines to spot differences
Diff Path 30 Given two JSON files with the parsed PATH environment variable performs a diff and returns a colored result with the corresponding differences
Docker Containers 31 Output a table with the list of running containers.
Docker Listing 32 List all containers with the docker-compose project, service name, file, id, name, image, creation time, status, networks and ports.
Docker Listing 33 List all containers with their corresponding labels parsed and sorted.
Docker Network 34 Output a table with the docker networks info.
Docker Stats 35 Output a table with the docker stats broken down for each value.
Docker Storage 36 Output a table with the docker volumes info.
ElasticSearch Cluster 37 Get an ElasticSearch/OpenSearch cluster nodes overview
ElasticSearch Cluster 38 Get an ElasticSearch/OpenSearch cluster per host data allocation
ElasticSearch Cluster 39 Get an ElasticSearch/OpenSearch cluster settings flat
ElasticSearch Cluster 40 Get an ElasticSearch/OpenSearch cluster settings non-flatted
ElasticSearch Cluster 41 Get an ElasticSearch/OpenSearch cluster stats per node
ElasticSearch Cluster 42 Get an overview of an ElasticSearch/OpenSearch cluster health
ElasticSearch Indices 43 Get an ElasticSearch/OpenSearch count per index
ElasticSearch Indices 44 Get an ElasticSearch/OpenSearch indices overview
ElasticSearch Indices 45 Get an ElasticSearch/OpenSearch settings for a specific index
Generic Arrays 46 Converting an array of strings into an array of maps
Generic Avro 47 Given an Avro data file outputs it's corresponding statistics
Generic Avro 48 Given an Avro data file outputs the correspoding schema
Generic Avro 49 Reads an Avro data file as input
Generic Avro 50 Write an Avro data file as an output
Generic Base64 51 Encode/decode data (or text-like files) to/from gzip base64 representation for easier packing and transport.
Generic Excel 52 Building an Excel file with the AWS IPv4 and IPv6 ranges (1).
Generic Excel 53 Building an Excel file with the AWS IPv4 and IPv6 ranges (2).
Generic Excel 54 Building an Excel file with the AWS IPv4 and IPv6 ranges (3).
Generic Excel 55 Processes each json file in /some/data creating and updating the data.xlsx file with a sheet for each file.
Generic Excel 56 Store and retrieve data from an Excel spreadsheet
Generic HTML 57 Generate a HTML with table of emoticons/emojis by category, group, name, unicode and html code.
Generic Hex 58 Outputs an hexadecimal representation of the characters of the file provided allowing to adjust how many per line/row.
Generic RSS 59 Builds an HTML file with the current linked news titles, publication date and source from Google News RSS.
Generic RSS 60 Example of generating a HTML list of titles, links and publication dates from a RSS feed
Generic RSS 61 Parses the Slashdot's RSS feed news into a quick clickable HTML page in a browser
Generic Template 62 Given a meal name will search 'The Meal DB' site for the corresponding recipe and render a markdown HTML of the corresponding recipe.
Generic Text 63 Get a json with lyrics of a song.
Generic Text 64 Search a word in the English dictionary returning phonetic, meanings, synonyms, antonyms, etc.
GitHub Releases 65 Builds a table of GitHub project releases
GitHub Releases 66 Parses the latest GitHub project release markdown notes
Grid Java 67 Parses a Java hsperf data + the current rss java process memory into a looping grid.
Grid Java 68 Parses a Java hsperf data into a looping grid.
Grid Kubernetes 69 Displays a continuous updating grid with a line chart with the number of CPU throtlles and bursts recorded in the Linux cgroup cpu stats of a container running in Kubernetes and the source cpu.stats data
Grid Mac 70 Shows a grid with the Mac network metrics and 4 charts for in, out packets and in, out bytes
Grid Mac 71 Shows a grid with the Mac storage metrics and 4 charts for read, write IOPS and read, write bytes per second
Grid Unix 72 On an Unix/Linux system supporting 'ps' output formats %cpu and %mem, will output a chart with the percentage of cpu and memory usage of a provided pid (e.g. 12345)
JSON Schemas Lists 73 Get a list of JSON schemas from Schema Store catalog
Kubernetes Containers 74 Parse the Linux cgroup cpu stats on a container running in Kubernetes
Kubernetes Kubectl 75 Build an output table with Kubernetes pods with namespace, pod name, container name and corresponding resources using kubectl
Kubernetes Kubectl 76 Build an output table with Kubernetes pods with node, namespace, pod name, container name and corresponding resources using kubectl
Kubernetes Kubectl 77 Executes a recursive file list find command in a specific pod, namespace and path converting the result into a table.
Kubernetes Kubectl 78 Given the list of all Kubernetes objects will produce a list of objects per namespace, kind, apiVersiom, creation timestamp, name and owner.
Kubernetes Kubectl 79 List of Kubernetes CPU, memory and storage stats per node using kubectl
Kubernetes Kubectl 80 List of Kubernetes pods per namespace and kind using kubectl
Kubernetes Kubectl 81 Produces a list of pods' containers per namespace with the corresponding images and assigned nodes.
Mac Activity 82 Uses the Mac terminal command 'last' output to build an activity table with user, tty, from, login-time and logout-time
Mac Brew 83 List all the packages and corresponding versions installed in a Mac by brew.
Mac Info 84 Parses the current Mac OS hardware information
Mac Info 85 Parses the current Mac OS overview information
Mac Safari 86 Get a list of all Mac OS Safari bookmarks into a CSV file.
Ollama List models 87 Parses the list of models currently in an Ollama deployment
OpenAF Channels 88 Copy the json result of a command into an etcd database using OpenAF's channels
OpenAF Channels 89 Getting all data stored in an etcd database using OpenAF's channels
OpenAF Channels 90 Given a Prometheus database will query for a specific metric (go_memstats_alloc_bytes), during a defined period, every 5 seconds (step) will produce a static chart with the corresponding metric values.
OpenAF Channels 91 Perform a query to a metric & label, with a start and end time, to a Prometheus server using OpenAF's channels
OpenAF Channels 92 Retrieve all keys stores in a H2 MVStore file using OpenAF's channels
OpenAF Channels 93 Store and retrieve data from a Redis database
OpenAF Channels 94 Store and retrieve data from a RocksDB database
OpenAF Channels 95 Store the json results of a command into a H2 MVStore file using OpenAF's channels
OpenAF Network 96 List all MX (mail servers) network addresses from the current DNS server for a hostname using OpenAF
OpenAF Network 97 List all network addresses returned from the current DNS server for a hostname using OpenAF
OpenAF OS 98 Current OS information visible to OpenAF
OpenAF OS 99 Using OpenAF parse the current environment variables
OpenAF SFTP 100 Generates a file list with filepath, size, permissions, create and last modified time from a SFTP connection with user and password
OpenAF SFTP 101 Generates a file list with filepath, size, permissions, create and last modified time from a SFTP connection with user, private key and password
OpenAF TLS 102 List the TLS certificates of a target host with a sorted alternative names using OpenAF
OpenAF oJob.io 103 Parses ojob.io/news results into a clickable news title HMTL page.
OpenAF oJob.io 104 Retrieves the list of oJob.io's jobs and filters which start by 'ojob.io/news' to display them in a rectangle
OpenAF oPacks 105 Listing all currently accessible OpenAF's oPacks
OpenAF oafp 106 Filter the OpenAF's oafp examples list by a specific word in the description
OpenAF oafp 107 List the OpenAF's oafp examples by category, sub-category and description
OpenVPN List 108 When using the container nmaguiar/openvpn it's possible to convert the list of all clients order by expiration/end date
Unix Activity 109 Uses the Linux command 'last' output to build a table with user, tty, from and period of activity
Unix Alpine 110 List all installed packages in an Alpine system
Unix Compute 111 Parses the Linux /proc/cpuinfo into an array
Unix Debian/Ubuntu 112 List all installed packages in a Debian/Ubuntu system
Unix Envs 113 Converts the Linux envs command result into a table of environment variables and corresponding values
Unix Files 114 Converting the Linux's /etc/os-release to SQL insert statements.
Unix Files 115 Converting the Unix's syslog into a json output.
Unix Files 116 Executes a recursive file list find command converting the result into a table.
Unix Files 117 Parses the Linux /etc/passwd to a table order by uid and gid.
Unix Generic 118 Creates, in unix, a data.ndjson file where each record is formatted from json files in /some/data
Unix Memory map 119 Given an Unix process will output a table with process's components memory address, size in bytes, permissions and owner
Unix Network 120 Loop over the current Linux active network connections
Unix Network 121 Parse the Linux 'arp' command output
Unix Network 122 Parse the Linux 'ip tcp_metrics' command
Unix Network 123 Parse the result of the Linux route command
Unix OpenSuse 124 List all installed packages in an OpenSuse system or zypper based system
Unix RedHat 125 List all installed packages in a RedHat system or rpm based system (use rpm –querytags to list all fields available)
Unix Storage 126 Converting the Unix's df output
Unix Storage 127 Parses the result of the Unix ls command
Unix SystemCtl 128 Converting the Unix's systemctl list-timers
Unix SystemCtl 129 Converting the Unix's systemctl list-units
Unix SystemCtl 130 Converting the Unix's systemctl list-units into an overview table
Unix UBI 131 List all installed packages in an UBI system
Unix named 132 Converts a Linux's named log, for client queries, into a CSV
Windows Network 133 Output a table with the current route table using Windows' PowerShell
Windows Network 134 Output a table with the list of network interfaces using Windows' PowerShell
Windows PnP 135 Output a table with USB/PnP devices using Windows' PowerShell
Windows Storage 136 Output a table with the attached disk information using Windows' PowerShell

πŸ“— Examples


1

πŸ“– AI | Classification

Given a list of news titles with corresponding dates and sources add a category and sub-category field to each

export OAFP_MODEL="(type: ollama, model: 'llama3', url: 'http://ollama.local', timeout: 900000, temperature: 0)"
# get 10 news titles
RSS="https://news.google.com/rss" && oafp url="$RSS" path="rss.channel.item[].{title:title,date:pubDate,source:source._}" from="sort(-date)" out=json sql="select * limit 5" > news.json
# add category and sub-category
oafp news.json llmcontext="list a news titles with date and source" llmprompt="keeping the provided title, date and source add a category and sub-category fields to the provided list" out=json > newsCategorized.json
oafp newsCategorized.json getlist=true out=ctable

2

πŸ“– AI | Conversation

Send multiple requests to an OpenAI model keeping the conversation between interactions and setting the temperature parameter

export OAFP_MODEL="(type: openai, model: 'gpt-3.5-turbo-0125', key: ..., timeout: 900000, temperature: 0)"
echo "List all countries in the european union" | oafp in=llm out=ctree llmconversation=cvst.json
echo "Add the corresponding country capital" | oafp in=llm out=ctree llmconversation=cvst.json
rm cvst.json

3

πŸ“– AI | Generate data

Generates synthetic data using a LLM model and then uses the recorded conversation to generate more data respecting the provided instructions

export OAFP_MODEL="(type: ollama, model: 'llama3', url: 'https://models.local', timeout: 900000)"
oafp in=llm llmconversation=conversation.json data="Generate #5 synthetic transaction record data with the following attributes: transaction id - a unique alphanumeric code; date - a date in YYYY-MM-DD format; amount - a dollar amount between 10 and 1000; description - a brief description of the transaction" getlist=true out=ndjson > data.ndjson
oafp in=llm llmconversation=conversation.json data="Generate 5 more records" getlist=true out=ndjson >> data.ndjson
oafp data.ndjson ndjsonjoin=true out=ctable sql="select * order by transaction_id"

4

πŸ“– AI | Groq

Calculation

export OAFP_MODEL="(type: openai, model: 'llama3-70b-8192', key: '...', url: 'https://api.groq.com/openai', timeout: 900000, temperature: 0)"
oafp in=llm data="how much does light take to travel from Tokyo to Osaka in ms; return a 'time_in_ms' and a 'reasoning'"

5

πŸ“– AI | Mistral

List all available LLM models at mistral.ai

# export OAFP_MODEL="(type: openai, model: 'llama3', url: 'https://api.mistral.ai', key: '...', timeout: 900000, temperature: 0)"
oafp in=llmmodels data="()" path="sort([].id)"

6

πŸ“– AI | Ollama

Setting up access to Ollama and ask for data to an AI LLM model

export OAFP_MODEL="(type: ollama, model: 'mistral', 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"

7

πŸ“– AI | OpenAI

Setting up the OpenAI 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

8

πŸ“– AI | Prompt

Example of generating data from an AI LLM prompt

export OAFP_MODEL="(type: openai, model: 'gpt-3.5-turbo', key: '...', timeout: 900000)"
oafp in=llm data="produce a list of 25 species of 'flowers' with their english and latin name and the continent where it can be found" out=json > data.json

9

πŸ“– AI | Summarize

Use an AI LLM model to summarize the weather information provided in a JSON format

export OAFP_MODEL="(type: openai, model: 'gpt-3.5-turbo', key: '...', timeout: 900000)"
oafp url="https://wttr.in?format=j2" llmcontext="current and forecast weather" llmprompt="produce a summary of the current and forecasted weather" out=md

10

πŸ“– AI | TogetherAI

List all available LLM models at together.ai with their corresponding type and price components order by the more expensive, for input and output

# export OAFP_MODEL="(type: openai, model: 'meta-llama/Meta-Llama-3-70B', url: 'https://api.together.xyz', key: '...', timeout: 9000000, temperature: 0)"
oafp in=llmmodels data="()" path="[].{id:id,name:display_name,type:type,ctxLen:context_length,priceHour:pricing.hourly,priceIn:pricing.input,priceOut:pricing.output,priceBase:pricing.base,priceFineTune:pricing.finetune}" sql="select * order by priceIn desc,priceOut desc" out=ctable

11

πŸ“– APIs | NASA

Markdown table of near Earth objects by name, magnitude, if is potentially hazardous asteroids and corresponding distance

curl -s "https://api.nasa.gov/neo/rest/v1/feed?API_KEY=DEMO_KEY" | oafp path="near_earth_objects" maptoarray=true output=json | oafp path="[0][].{name:name,magnitude:absolute_magnitude_h,hazardous:is_potentially_hazardous_asteroid,distance:close_approach_data[0].miss_distance.kilometers}" sql="select * order by distance" output=mdtable

12

πŸ“– APIs | Network

Converting the Cloudflare DNS trace info

curl -s https://1.1.1.1/cdn-cgi/trace | oafp in=ini out=ctree

13

πŸ“– APIs | Network

Converting the Google DNS DoH query result

DOMAIN=yahoo.com && oafp path=Answer from="sort(data)" out=ctable url="https://8.8.8.8/resolve?name=$DOMAIN&type=a"

14

πŸ“– APIs | Network

Generating a simple map of the current public IP address

curl -s https://ifconfig.co/json | oafp flatmap=true out=map

15

πŸ“– APIs | Public Holidays

Return the public holidays for a given country on a given year

COUNTRY=US && YEAR=2024 && oafp url="https://date.nager.at/api/v2/publicholidays/$YEAR/$COUNTRY" path="[].{date:date,localName:localName,name:name}" out=ctable

16

πŸ“– APIs | Space

How many people are in space and in which craft currently in space

curl -s http://api.open-notify.org/astros.json | oafp path="people" sql="select \"craft\", count(1) \"people\" group by \"craft\"" output=ctable

17

πŸ“– APIs | iTunes

Search the Apple's iTunes database for a specific term

TRM="Mozart" && oafp url="https://itunes.apple.com/search?term=$TRM" out=ctree

18

πŸ“– AWS | EC2

Given all AWS EC2 instances in an account produces a table with name, type, vpc and private ip sorted by vpc

aws ec2 describe-instances | oafp path="Reservations[].Instances[].{name:join('',Tags[?Key=='Name'].Value),type:InstanceType,vpc:VpcId,ip:PrivateIpAddress} | sort_by(@, &vpc)" output=ctable

19

πŸ“– AWS | EKS

Builds an excel spreadsheet with all persistent volumes associated with an AWS EKS 'XYZ' with the corresponding Kubernetes namespace, pvc and pv names

# sudo yum install -y fontconfig
aws ec2 describe-volumes | oafp path="Volumes[?Tags[?Key=='kubernetes.io/cluster/XYZ']|[0].Value=='owned'].{VolumeId:VolumeId,Name:Tags[?Key=='Name']|[0].Value,KubeNS:Tags[?Key=='kubernetes.io/created-for/pvc/namespace']|[0].Value,KubePVC:Tags[?Key=='kubernetes.io/created-for/pvc/name']|[0].Value,KubePV:Tags[?Key=='kubernetes.io/created-for/pv/name']|[0].Value,AZ:AvailabilityZone,Size:Size,Type:VolumeType,CreateTime:CreateTime,State:State,AttachTime:join(',',nvl(Attachments[].AttachTime,from_slon('[]'))[]),InstanceId:join(',',nvl(Attachments[].InstanceId,from_slon('[]'))[])}" from="sort(KubeNS,KubePVC)" out=xls xlsfile=xyz_pvs.xlsx

20

πŸ“– AWS | Lambda

Prepares a table of AWS Lambda functions with their corresponding main details

aws lambda list-functions | oafp path="Functions[].{Name:FunctionName,Runtime:Runtime,Arch:join(',',Architectures),Role:Role,MemorySize:MemorySize,EphStore:EphemeralStorage.Size,CodeSize:CodeSize,LastModified:LastModified}" from="sort(Name)" out=ctable

21

πŸ“– AWS | Lambda

Prepares a table, for a specific AWS Lambda function during a specific time periods, with number of invocations and minimum, average and maximum duration per periods from AWS CloudWatch

export _SH="aws cloudwatch get-metric-statistics --namespace AWS/Lambda --start-time 2024-03-01T00:00:00Z --end-time 2024-04-01T00:00:00Z --period 3600 --dimensions Name=FunctionName,Value=my-function"
$_SH --statistics Sum --metric-name Invocations  | oafp path="Datapoints[].{ts:Timestamp,cnt:Sum}" out=ndjson > data.ndjson
$_SH --statistics Average --metric-name Duration | oafp path="Datapoints[].{ts:Timestamp,avg:Average}" out=ndjson >> data.ndjson
$_SH --statistics Minimum --metric-name Duration | oafp path="Datapoints[].{ts:Timestamp,min:Minimum}" out=ndjson >> data.ndjson
$_SH --statistics Maximum --metric-name Duration | oafp path="Datapoints[].{ts:Timestamp,max:Maximum}" out=ndjson >> data.ndjson
oafp data.ndjson ndjsonjoin=true opath="[].{ts:ts,cnt:nvl(cnt,\`0\`),min:nvl(min,\`0\`),avg:nvl(avg,\`0\`),max:nvl(max,\`0\`)}" out=json | oafp isql="select \"ts\",max(\"cnt\") \"cnt\",max(\"min\") \"min\",max(\"avg\") \"avg\",max(\"max\") \"max\" group by \"ts\" order by \"ts\"" opath="[].{ts:ts,cnt:cnt,min:from_ms(min,'(abrev:true,pad:true)'),avg:from_ms(avg,'(abrev:true,pad:true)'),max:from_ms(max,'(abrev:true,pad:true)')}" out=ctable

22

πŸ“– Azure | Bing

Given an Azure Bing Search API key and a query returns the corresponding search result from Bing.

QUERY="OpenAF" && KEY="12345" && curl -X GET "https://api.bing.microsoft.com/v7.0/search?q=$QUERY" -H "Ocp-Apim-Subscription-Key: $KEY" | oafp out=ctree

23

πŸ“– Chart | Unix

Output a chart with the current Unix load using uptime

oafp cmd="uptime" in=raw path="replace(trim(@), '.+ ([\d\.]+),? ([\d\.]+),? ([\d\.]+)\$', '', '\$1|\$2|\$3').split(@,'|')" out=chart chart="dec2 [0]:green:load -min:0" loop=1 loopcls=true

24

πŸ“– DB | H2

Perform a SQL query over a H2 database.

echo "select * from \"data\"" | oafp in=db indbjdbc="jdbc:h2:./data" indbuser=sa indbpass=sa out=ctable

25

πŸ“– DB | H2

Store the json result of a command into a H2 database table.

oaf -c "\$o(listFilesRecursive('.'),{__format:'json'})" | oafp out=db dbjdbc="jdbc:h2:./data" dbuser=sa dbpass=sa dbtable=data

26

πŸ“– DB | SQLite

Perform a query over a database using JDBC.

ojob ojob.io/db/getDriver op=install db=sqlite
echo "select * from data" | oafp in=db indbjdbc="jdbc:sqlite:data.db" indbtable=data indblib=sqlite out=ctable

27

πŸ“– DB | SQLite

Store the json result on a SQLite database table.

ojob ojob.io/db/getDriver op=install db=sqlite
oaf -c "\$o(listFilesRecursive('.'),{__format:'json'})" | oafp out=db dbjdbc="jdbc:sqlite:data.db" dbtable=data dblib=sqlite

28

πŸ“– Diff | Envs

Given two JSON files with environment variables performs a diff and returns a colored result with the corresponding differences

env | oafp in=ini out=json > data1.json
# change one or more environment variables
env | oafp in=ini out=json > data2.json
oafp in=oafp data="[(file: data1.json)|(file: data2.json)]" diff="(a:'[0]',b:'[1]')" color=true

29

πŸ“– Diff | Lines

Performing a diff between two long command lines to spot differences

oafp diff="(a:before,b:after)" diffchars=true in=yaml color=true
# as stdin enter
before: URL="http://localhost:9090" && METRIC="go_memstats_alloc_bytes" && TYPE="bytes" && LABELS="job=\"prometheus\"" && START="2024-06-18T20:00:00Z" && END="2024-06-18T20:15:00Z" && STEP=5 && echo "{query:'max($METRIC{$LABELS})',start:'$START',end:'$END',step:$STEP}" | oafp in=ch inch="(type:prometheus,options:(urlQuery:'$URL'))" inchall=true out=json | oafp path="[].set(@, 'main').map(&{metric:'$METRIC',job:get('main').metric.job,timestamp:to_date(mul([0],\`1000\`)),value:to_number([1])}, values) | []" out=schart schart="$TYPE '[].value':green:$METRIC -min:0"

after: URL="http://localhost:9090" && METRIC="go_memstats_alloc_bytes" && TYPE="bytes" && LABELS="job=\"prometheus\"" && START="2024-06-18T20:00:00Z" && END="2024-06-18T20:15:00Z" && STEP=5 && echo "{query:'max($METRIC{$LABELS})',start:'$START',end:'$END',step:$STEP}" | oafp in=ch inch="(type:prometheus,options:(urlQuery:'$URL'))" inchall=true out=json | oafp path="[].set(@, 'main').map(&{metric:'$METRIC',job:get('main').metric.job,timestamp:to_date([0]),value:to_number([1])}, values) | []" out=schart schart="$TYPE '[].value':green:$METRIC -min:0"
#
# Ctrl^D 
# as the result the difference between before and after will appear as red characters

30

πŸ“– Diff | Path

Given two JSON files with the parsed PATH environment variable performs a diff and returns a colored result with the corresponding differences

env | oafp in=ini path="PATH.split(@,':')" out=json > data1.json
# export PATH=$PATH:/some/new/path
env | oafp in=ini path="PATH.split(@,':')" out=json > data2.json
oafp in=oafp data="[(file: data1.json)|(file: data2.json)]" diff="(a:'sort([0])',b:'sort([1])')" color=true

31

πŸ“– Docker | Containers

Output a table with the list of running containers.

oafp cmd="docker ps --format json" input=ndjson ndjsonjoin=true path="[].{id:ID,name:Names,state:State,image:Image,networks:Networks,ports:Ports,Status:Status}" sql="select * order by networks,state,name" output=ctable

32

πŸ“– Docker | Listing

List all containers with the docker-compose project, service name, file, id, name, image, creation time, status, networks and ports.

docker ps -a --format=json | oafp in=ndjson ndjsonjoin=true out=ctree path="[].insert(@,'Labels',sort_by(split(Labels,',')[].split(@,'=').{key:[0],value:[1]},&key))" out=json | oafp path="[].{dcProject:nvl(Labels[?key=='com.docker.compose.project']|[0].value,''),dcService:nvl(Labels[?key=='com.docker.compose.service']|[0].value,''),ID:ID,Names:Names,Image:Image,Created:RunningFor,Status:Status,Ports:Ports,Networks:Networks,dcFile:nvl(Labels[?key=='com.docker.compose.project.config_files']|[0].value,'')}" sql="select * order by dcProject,dcService,Networks,Names" out=ctable

33

πŸ“– Docker | Listing

List all containers with their corresponding labels parsed and sorted.

docker ps -a --format=json | oafp in=ndjson ndjsonjoin=true out=ctree path="[].insert(@,'Labels',sort_by(split(Labels,',')[].split(@,'=').{key:[0],value:[1]},&key))" out=ctree

34

πŸ“– Docker | Network

Output a table with the docker networks info.

docker network ls --format json | oafp in=ndjson ndjsonjoin=true out=ctable

35

πŸ“– Docker | Stats

Output a table with the docker stats broken down for each value.

oafp cmd="docker stats --no-stream" in=lines linesvisual=true linesjoin=true out=ctree path="[].{containerId:\"CONTAINER ID\",pids:PIDS,name:\"NAME\",cpuPerc:\"CPU %\",memory:\"MEM USAGE / LIMIT\",memPerc:\"MEM %\",netIO:\"NET I/O\",blockIO:\"BLOCK I/O\"}|[].{containerId:containerId,pids:pids,name:name,cpuPerc:replace(cpuPerc,'%','',''),memUsage:from_bytesAbbr(split(memory,' / ')[0]),memLimit:from_bytesAbbr(split(memory,' / ')[1]),memPerc:replace(memPerc,'%','',''),netIn:from_bytesAbbr(split(netIO,' / ')[0]),netOut:from_bytesAbbr(split(netIO,' / ')[1]),blockIn:from_bytesAbbr(split(blockIO,' / ')[0]),blockOut:from_bytesAbbr(split(blockIO,' / ')[1])}" out=ctable

36

πŸ“– Docker | Storage

Output a table with the docker volumes info.

docker volume ls --format json | oafp in=ndjson ndjsonjoin=true out=ctable

37

πŸ“– ElasticSearch | Cluster

Get an ElasticSearch/OpenSearch cluster nodes overview

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cat/nodes?format=json" $ES_EXTRA | oafp sql="select * order by ip" out=ctable

38

πŸ“– ElasticSearch | Cluster

Get an ElasticSearch/OpenSearch cluster per host data allocation

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cat/allocation?format=json&bytes=b" $ES_EXTRA | oafp sql="select * order by host" out=ctable

39

πŸ“– ElasticSearch | Cluster

Get an ElasticSearch/OpenSearch cluster settings flat

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cluster/settings?include_defaults=true&flat_settings=true" $ES_EXTRA | oafp out=ctree

40

πŸ“– ElasticSearch | Cluster

Get an ElasticSearch/OpenSearch cluster settings non-flatted

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cluster/settings?include_defaults=true" $ES_EXTRA | oafp out=ctree

41

πŸ“– ElasticSearch | Cluster

Get an ElasticSearch/OpenSearch cluster stats per node

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_nodes/stats/indices/search" $ES_EXTRA | oafp out=ctree

42

πŸ“– ElasticSearch | Cluster

Get an overview of an ElasticSearch/OpenSearch cluster health

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cat/health?format=json" $ES_EXTRA | oafp out=ctable

43

πŸ“– ElasticSearch | Indices

Get an ElasticSearch/OpenSearch count per index

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/kibana_sample_data_flights/_count" $ES_EXTRA | oafp

44

πŸ“– ElasticSearch | Indices

Get an ElasticSearch/OpenSearch indices overview

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/_cat/indices?format=json&bytes=b" $ES_EXTRA | oafp sql="select * order by index" out=ctable

45

πŸ“– ElasticSearch | Indices

Get an ElasticSearch/OpenSearch settings for a specific index

export ES_URL=http://elastic.search:9200
export ES_EXTRA="--insecure"
curl -s "$ES_URL/kibana_sample_data_flights/_settings" $ES_EXTRA | oafp out=ctree

46

πŸ“– Generic | Arrays

Converting an array of strings into an array of maps

oafp -v path="java.params[].insert(from_json('{}'), 'param', @).insert(@, 'len', length(param))"

47

πŸ“– Generic | Avro

Given an Avro data file outputs it's corresponding statistics

# opack install avro
oafp libs=avro data.avro inavrostats=true

48

πŸ“– Generic | Avro

Given an Avro data file outputs the correspoding schema

# opack install avro
oafp libs=avro data.avro inavroschema=true

49

πŸ“– Generic | Avro

Reads an Avro data file as input

# opack install avro
oafp data.avro libs=avro out=ctable

50

πŸ“– Generic | Avro

Write an Avro data file as an output

# opack install avro
oafp data.json libs=avro out=avro avrofile=data.avro

51

πŸ“– Generic | Base64

Encode/decode data (or text-like files) to/from gzip base64 representation for easier packing and transport.

# encode a data file to a gzip base64 representation
oafp data.json out=gb64json > data.gb64
# decode a gzip base64 representation back into a data file
oafp data.gb64 in=gb64json out=json > data.json

52

πŸ“– Generic | Excel

Building an Excel file with the AWS IPv4 and IPv6 ranges (1).

curl https://ip-ranges.amazonaws.com/ip-ranges.json > ip-ranges.json

53

πŸ“– Generic | Excel

Building an Excel file with the AWS IPv4 and IPv6 ranges (2).

oafp ip-ranges.json path=prefixes out=xls xlsfile=aws-ip-ranges.xlsx xlssheet=ipv4

54

πŸ“– Generic | Excel

Building an Excel file with the AWS IPv4 and IPv6 ranges (3).

oafp ip-ranges.json path=ipv6_prefixes out=xls xlsfile=aws-ip-ranges.xlsx xlssheet=ipv6

55

πŸ“– Generic | Excel

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" )'

56

πŸ“– Generic | Excel

Store and retrieve data from an Excel spreadsheet

# Storing data
oafp cmd="oaf -c \"sprint(listFilesRecursive('/usr/bin'))\"" out=xls xlsfile=data.xlsx
# Retrieve data
oafp in=xls file=data.xlsx xlscol=A xlsrow=1 out=pjson

57

πŸ“– Generic | HTML

Generate a HTML with table of emoticons/emojis by category, group, name, unicode and html code.

oafp url="https://emojihub.yurace.pro/api/all" path="[].{category:category,group:group,name:name,len:length(unicode),unicode:join('<br>',unicode),htmlCode:replace(join('<br>', htmlCode),'&','g','&amp;'),emoji:join('', htmlCode)}" out=mdtable | oafp in=md out=html

58

πŸ“– Generic | Hex

Outputs an hexadecimal representation of the characters of the file provided allowing to adjust how many per line/row.

oafp some.file in=rawhex inrawhexline=15 out=ctable

59

πŸ“– Generic | RSS

Builds an HTML file with the current linked news titles, publication date and source from Google News RSS.

RSS="https://news.google.com/rss" && oafp url="$RSS" path="rss.channel.item[].{title:replace(t(@,'[]()'),'\|','g','\\|'),date:pubDate,source:source._}" from="sort(-date)" out=mdtable | oafp in=md out=html

60

πŸ“– Generic | RSS

Example of generating a HTML list of titles, links and publication dates from a RSS feed

oafp url="https://blog.google/rss" path="rss.channel.item" sql="select title, link, pubDate" output=html

61

πŸ“– Generic | RSS

Parses the Slashdot's RSS feed news into a quick clickable HTML page in a browser

RSS="http://rss.slashdot.org/Slashdot/slashdot" && oafp url="$RSS" path="RDF.item[].{title:replace(t(@,'[]()'),'\|','g','\\|'),department:department,date:date}" from="sort(-date)" out=mdtable | oafp in=md out=html

62

πŸ“– Generic | Template

Given a meal name will search 'The Meal DB' site for the corresponding recipe and render a markdown HTML of the corresponding recipe.

MEAL="Pizza" && echo "# \n>  | \n<a href=\"\"><img align=\"center\" width=1280 src=\"\"></a>\n\n## Ingredients\n\n| Ingredient | Measure |\n|---|---|\n|||\n\n\n## Instructions\n\n\n\n}" > _template.hbs && oafp url="https://www.themealdb.com/api/json/v1/1/search.php?s=$MEAL" path="set(meals[0],'o').set(k2a(get('o'),'strIngredient','i',\`true\`),'is').set(k2a(get('o'),'strMeasure','m',\`true\`),'ms')|get('o').insert(get('o'),'ingredients',ranges(length(get('is')),\`0\`,\`1\`).map(&{ ingredient: geta('is',@).i, measure: geta('ms',@).m }, @))" out=json | oafp out=template template=_template.hbs | oafp in=md out=html htmlcompact=true

63

πŸ“– Generic | Text

Get a json with 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))"

64

πŸ“– Generic | Text

Search a word in the English dictionary returning phonetic, meanings, synonyms, antonyms, etc.

WORD="google" && oafp url="https://api.dictionaryapi.dev/api/v2/entries/en/$WORD"

65

πŸ“– GitHub | Releases

Builds a table of GitHub project releases

curl -s https://api.github.com/repos/openaf/openaf/releases | oafp sql="select name, tag_name, published_at order by published_at" output=ctable

66

πŸ“– GitHub | Releases

Parses the latest GitHub project release markdown notes

curl -s https://api.github.com/repos/openaf/openaf/releases | oafp path="[0].body" output=md

67

πŸ“– Grid | Java

Parses a Java hsperf data + the current rss java process memory into a looping grid.

JPID=12345 && HSPERF=/tmp/hsperfdata_openvscode-server/$JPID && oafp in=oafp data="[(file: $HSPERF, in: hsperf, path: java)|(cmd: 'ps -p $JPID -o rss=', path: '{ rss: mul(@,\`1024\`) }')]" merge=true out=grid grid="[[(title:Threads,type:chart,obj:'int threads.live:green:live threads.livePeak:red:peak threads.daemon:blue:daemon -min:0')|(title:RSS,type:chart,obj:'bytes rss:blue:rss')]|[(title:Heap,type:chart,obj:'bytes __mem.total:red:total __mem.used:blue:used -min:0')|(title:Metaspace,type:chart,obj:'bytes __mem.metaTotal:blue:total __mem.metaUsed:green:used -min:0')]]" loop=1

68

πŸ“– Grid | Java

Parses a Java hsperf data into a looping grid.

HSPERF=/tmp/hsperfdata_user/12345 && oafp $HSPERF in=hsperf path=java out=grid grid="[[(title:Threads,type:chart,obj:'int threads.live:green:live threads.livePeak:red:peak threads.daemon:blue:daemon -min:0')|(title:Class Loaders,type:chart,obj:'int cls.loadedClasses:blue:loaded cls.unloadedClasses:red:unloaded')]|[(title:Heap,type:chart,obj:'bytes __mem.total:red:total __mem.used:blue:used -min:0')|(title:Metaspace,type:chart,obj:'bytes __mem.metaTotal:blue:total __mem.metaUsed:green:used -min:0')]]" loop=1

69

πŸ“– Grid | Kubernetes

Displays a continuous updating grid with a line chart with the number of CPU throtlles and bursts recorded in the Linux cgroup cpu stats of a container running in Kubernetes and the source cpu.stats data

oafp cmd="cat /sys/fs/cgroup/cpu.stat | sed 's/ /: /g'" in=yaml out=grid grid="[[(title:cpu.stat,type:tree)|(title:chart,type:chart,obj:'int nr_throttled:red:throttled nr_bursts:blue:bursts -min:0 -vsize:10')]]" loop=1

70

πŸ“– Grid | Mac

Shows a grid with the Mac network metrics and 4 charts for in, out packets and in, out bytes

# opack install mac
sudo powermetrics --help > /dev/null
oafp libs=Mac cmd="sudo powermetrics --format=plist --show-initial-usage -n 0 --samplers network" in=plist path=network out=grid grid="[[(title:data,path:@,xsnap:2)]|[(title:in packets,type:chart,obj:'int ipackets:blue:in')|(title:out packets,type:chart,obj:'int opackets:red:out')]|[(title:in bytes,type:chart,obj:'int ibytes:blue:in')|(title:out bytes,type:chart,obj:'int obytes:red:out')]]" loop=1

71

πŸ“– Grid | Mac

Shows a grid with the Mac storage metrics and 4 charts for read, write IOPS and read, write bytes per second

# opack install mac
sudo powermetrics --help > /dev/null
oafp libs=Mac cmd="sudo powermetrics --format=plist --show-initial-usage -n 0 --samplers disk" in=plist path=disk out=grid grid="[[(title:data,path:@,xsnap:2)]|[(title:read iops,type:chart,obj:'dec3 rops_per_s:blue:read_iops')|(title:write iops,type:chart,obj:'dec3 wops_per_s:red:write_iops')]|[(title:read bytes per sec,type:chart,obj:'bytes rbytes_per_s:blue:read_bytes_per_sec')|(title:write bytes per sec,type:chart,obj:'bytes wbytes_per_s:red:write_bytes_per_sec')]]" loop=1

72

πŸ“– Grid | Unix

On an Unix/Linux system supporting 'ps' output formats %cpu and %mem, will output a chart with the percentage of cpu and memory usage of a provided pid (e.g. 12345)

oafp cmd="ps -p 12345 -o %cpu,%mem" in=lines linesvisual=true linesvisualsepre="\\s+" out=chart chart="int '\"%CPU\"':red:cpu '\"%MEM\"':blue:mem -min:0 -max:100" loop=1 loopcls=true

73

πŸ“– JSON Schemas | Lists

Get a list of JSON schemas from Schema Store catalog

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

74

πŸ“– Kubernetes | Containers

Parse the Linux cgroup cpu stats on a container running in Kubernetes

cat /sys/fs/cgroup/cpu.stat | sed 's/ /: /g' | oafp in=yaml out=ctree

75

πŸ“– Kubernetes | Kubectl

Build an output table with Kubernetes pods with namespace, pod name, container name and corresponding resources using kubectl

kubectl get pods -A -o json | oafp path="items[].amerge({ ns: metadata.namespace, pod: metadata.name, phase: status.phase }, spec.containers[].{ container: name, resources: to_slon(resources) })[]" sql="select ns, pod, container, phase, resources order by ns, pod, container" out=ctable

76

πŸ“– Kubernetes | Kubectl

Build an output table with Kubernetes pods with node, namespace, pod name, container name and corresponding resources using kubectl

kubectl get pods -A -o json | oafp path="items[].amerge({ node: spec.nodeName, ns: metadata.namespace, pod: metadata.name, phase: status.phase }, spec.containers[].{ container: name, resources: to_slon(resources) })[]" sql="select node, ns, pod, container, phase, resources order by node, ns, pod, container" out=ctable

77

πŸ“– Kubernetes | Kubectl

Executes a recursive file list find command in a specific pod, namespace and path converting the result into a table.

NS=default && POD=my-pod-5c9cfb87d4-r6dlp && LSPATH=/data && kubectl exec -n $NS $POD -- find $LSPATH -exec stat -c '{"t":"%F", "p": "%n", "s": %s, "m": "%Y", "e": "%A", "u": "%U", "g": "%G"}' {} \; | oafp in=ndjson ndjsonjoin=true path="[].{type:t,permissions:e,user:u,group:g,size:s,modifiedDate:to_date(mul(to_number(m),\`1000\`)),filepath:p}" from="sort(type,filepath)" out=ctable

78

πŸ“– Kubernetes | Kubectl

Given the list of all Kubernetes objects will produce a list of objects per namespace, kind, apiVersiom, creation timestamp, name and owner.

oafp cmd="kubectl get all -A -o json" path="items[].{ns:metadata.namespace,kind:kind,apiVersion:apiVersion,createDate:metadata.creationTimestamp,name:metadata.name,owner:metadata.join(',',map(&concat(kind, concat('/', name)), nvl(ownerReferences,from_json('[]'))))}" sql="select * order by ns, kind, name" out=ctable

79

πŸ“– Kubernetes | Kubectl

List of Kubernetes CPU, memory and storage stats per node using kubectl

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

80

πŸ“– Kubernetes | Kubectl

List of Kubernetes pods per namespace and kind using kubectl

oafp cmd="kubectl get pods -A -o json" path="items[].{ns:metadata.namespace,kind:metadata.ownerReferences[].kind,name:metadata.name,status:status.phase,restarts:sum(nvl(status.containerStatuses[].restartCount,from_slon('[0]'))),node:spec.nodeName,age:timeago(nvl(status.startTime,now(\`0\`)))}" sql="select * order by status,name" output=ctable

81

πŸ“– Kubernetes | Kubectl

Produces a list of pods' containers per namespace with the corresponding images and assigned nodes.

kubectl get pods -A -o json | oafp path="items[].amerge({namespace: metadata.namespace, pod: metadata.name, nodeName: spec.nodeName},spec.containers[].{container: name, image: image, pullPolicy: imagePullPolicy})[]" sql="select namespace, pod, container, image, pullPolicy, nodeName order by namespace, pod, container" out=ctable

82

πŸ“– Mac | Activity

Uses the Mac terminal command 'last' output to build an activity table with user, tty, from, login-time and logout-time

oafp cmd="last --libxo json" path="\"last-information\".last" out=ctable

83

πŸ“– Mac | Brew

List all the packages and corresponding versions installed in a Mac by brew.

brew list --versions | oafp in=lines linesjoin=true path="[].split(@,' ').{package:[0],version:[1]}|sort_by(@,&package)" out=ctable

84

πŸ“– Mac | Info

Parses the current Mac OS hardware information

system_profiler SPHardwareDataType -json | oafp path="SPHardwareDataType[0]" out=ctree

85

πŸ“– Mac | Info

Parses the current Mac OS overview information

system_profiler SPSoftwareDataType -json | oafp path="SPSoftwareDataType[0]" out=ctree

86

πŸ“– Mac | Safari

Get a list of all Mac OS Safari bookmarks into a CSV file.

# opack install mac
oafp ~/Library/Safari/Bookmarks.plist libs=Mac path="Children[].map(&{category:get('cat'),title:URIDictionary.title,url:URLString},setp(@,'Title','cat').nvl(Children,from_json('[]')))[][]" out=csv > bookmarks.csv

87

πŸ“– Ollama | List models

Parses the list of models currently in an Ollama deployment

export OAFP_MODEL="(type: ollama, model: 'llama3', url: 'https://models.local', timeout: 900000)"
oafp in=llmmodels data="()" out=ctable path="[].{name:name,parameters:details.parameter_size,quantization:details.quantization_level,format:details.format,family:details.family,parent:details.parent,size:size}" sql="select * order by parent,family,format,parameters,quantization"

88

πŸ“– OpenAF | Channels

Copy the json result of a command into an etcd database using OpenAF's channels

oaf -c "\$o(io.listFiles('.').files,{__format:'json'})" | oafp out=ch ch="(type: etcd3, options: (host: localhost, port: 2379), lib: 'etcd3.js')" chkey=canonicalPath

89

πŸ“– OpenAF | Channels

Getting all data stored in an etcd database using OpenAF's channels

echo "" | oafp in=ch inch="(type: etcd3, options: (host: localhost, port: 2379), lib: 'etcd3.js')" out=ctable

90

πŸ“– OpenAF | Channels

Given a Prometheus database will query for a specific metric (go_memstats_alloc_bytes), during a defined period, every 5 seconds (step) will produce a static chart with the corresponding metric values.

URL="http://localhost:9090" && METRIC="go_memstats_alloc_bytes" && TYPE="bytes" && LABELS="job=\"prometheus\"" && START="2024-06-18T20:00:00Z" && END="2024-06-18T20:15:00Z" && STEP=5 && echo "{query:'max($METRIC{$LABELS})',start:'$START',end:'$END',step:$STEP}" | oafp in=ch inch="(type:prometheus,options:(urlQuery:'$URL'))" inchall=true out=json | oafp path="[].set(@, 'main').map(&{metric:'$METRIC',job:get('main').metric.job,timestamp:to_date(mul([0],\`1000\`)),value:to_number([1])}, values) | []" out=schart schart="$TYPE '[].value':green:$METRIC -min:0"

91

πŸ“– OpenAF | Channels

Perform a query to a metric & label, with a start and end time, to a Prometheus server using OpenAF's channels

oafp in=ch inch="(type:prometheus,options:(urlQuery:'http://prometheus.local'))" inchall=true data="(start:'2024-03-22T19:00:00.000Z',end:'2024-03-22T19:05:00.000Z',step:60,query:go_memstats_alloc_bytes_total{job=\"prometheus\"})" path="[].values[].{date:to_date(mul([0],to_number('1000'))),value:[1]}" out=ctable

92

πŸ“– OpenAF | Channels

Retrieve all keys stores in a H2 MVStore file using OpenAF's channels

echo "" | oafp in=ch inch="(type: mvs, options: (file: data.db))" out=ctable

93

πŸ“– OpenAF | Channels

Store and retrieve data from a Redis database

# Install rocksdb opack: 'opack install redis'
#
# Storing data
oafp cmd="oaf -c \"sprint(listFilesRecursive('/usr/bin'))\"" out=ch ch="(type: redis, lib: redis.js, options: (host: '127.0.0.1', port: 6379))" chkey=canonicalPath
# Retrieve data
echo "" | oafp in=ch inch="(type: redis, lib: redis.js, options: (host: '127.0.0.1', port: 6379))" out=pjson

94

πŸ“– OpenAF | Channels

Store and retrieve data from a RocksDB database

# Install rocksdb opack: 'opack install rocksdb'
#
# Storing data
oafp cmd="oaf -c \"sprint(listFilesRecursive('/usr/bin'))\"" out=ch ch="(type: rocksdb, lib: rocksdb.js, options: (path: db))" chkey=canonicalPath
# Retrieve data
echo "" | oafp in=ch inch="(type: rocksdb, lib: rocksdb.js, options: (path: db))" out=pjson

95

πŸ“– OpenAF | Channels

Store the json results of a command into a H2 MVStore file using OpenAF's channels

oaf -c "\$o(listFilesRecursive('.'),{__format:'json'})" | oafp out=ch ch="(type: mvs, options: (file: data.db))" chkey=canonicalPath

96

πŸ“– OpenAF | Network

List all MX (mail servers) network addresses from the current DNS server for a hostname using OpenAF

DOMAIN=gmail.com && TYPE=MX && oaf -c "sprint(ow.loadNet().getDNS('$DOMAIN','$TYPE'))" | oafp from="sort(Address)" out=ctable

97

πŸ“– OpenAF | Network

List all network addresses returned from the current DNS server for a hostname using OpenAF

DOMAIN=yahoo.com && oaf -c "sprint(ow.loadNet().getDNS('$DOMAIN'))" | oafp from="sort(Address)" out=ctable

98

πŸ“– OpenAF | OS

Current OS information visible to OpenAF

oafp -v path=os

99

πŸ“– OpenAF | OS

Using OpenAF parse the current environment variables

oaf -c "sprint(getEnvs())" | oafp sortmapkeys=true out=ctree

100

πŸ“– OpenAF | SFTP

Generates a file list with filepath, size, permissions, create and last modified time from a SFTP connection with user and password

HOST="my.server" && PORT=22 && LOGIN="user" && PASS=$"abc123" && LSPATH="." && oaf -c "sprint(\$ssh({host:'$HOST',login:'$LOGIN',pass:'$PASS'}).listFiles('$LSPATH'))" | oafp out=ctable path="[].{isDirectory:isDirectory,filepath:filepath,size:size,createTime:to_date(mul(createTime,\`1000\`)),lastModified:to_date(mul(lastModified,\`1000\`)),permissions:permissions}" from="sort(-isDirectory,filepath)"

101

πŸ“– OpenAF | SFTP

Generates a file list with filepath, size, permissions, create and last modified time from a SFTP connection with user, private key and password

HOST="my.server" && PORT=22 && PRIVID=".ssh/id_rsa" && LOGIN="user" && PASS=$"abc123" && LSPATH="." && oaf -c "sprint(\$ssh({host:'$HOST',login:'$LOGIN',pass:'$PASS',id:'$PRIVID'}).listFiles('$LSPATH'))" | oafp out=ctable path="[].{isDirectory:isDirectory,filepath:filepath,size:size,createTime:to_date(mul(createTime,\`1000\`)),lastModified:to_date(mul(lastModified,\`1000\`)),permissions:permissions}" from="sort(-isDirectory,filepath)"

102

πŸ“– OpenAF | TLS

List the TLS certificates of a target host with a sorted alternative names using OpenAF

DOMAIN=yahoo.com && oaf -c "sprint(ow.loadNet().getTLSCertificates('$DOMAIN',443))" | oafp path="[].{issuer:issuerDN,subject:subjectDN,notBefore:notBefore,notAfter:notAfter,alternatives:join(' | ',sort(map(&[1],nvl(alternatives,\`[]\`))))}" out=ctree

103

πŸ“– OpenAF | oJob.io

Parses ojob.io/news results into a clickable news title HMTL page.

ojob ojob.io/news/awsnews __format=json | oafp path="[].{title:replace(t(@,'[]()'),'\|','g','\\|'),date:date}" from="sort(-date)" out=mdtable | oafp in=md out=html

104

πŸ“– OpenAF | oJob.io

Retrieves the list of oJob.io's jobs and filters which start by 'ojob.io/news' to display them in a rectangle

oafp url="https://ojob.io/index.json" path="sort(init.l)[].replace(@,'^https://(.+)\.(yaml|json)$','','\$1')|[?starts_with(@, 'ojob.io/news')]" out=map

105

πŸ“– OpenAF | oPacks

Listing all currently accessible OpenAF's oPacks

oaf -c "sprint(getOPackRemoteDB())" | oafp maptoarray=true opath="[].{name:name,description:description,version:version}" from="sort(name)" out=ctable

106

πŸ“– OpenAF | oafp

Filter the OpenAF's oafp examples list by a specific word in the description

oafp url="https://ojob.io/oafp-examples.yaml" in=yaml out=template path=data templatepath=tmpl sql="select * where d like '%something%'"

107

πŸ“– OpenAF | oafp

List the OpenAF's oafp examples by category, sub-category and description

oafp url="https://ojob.io/oafp-examples.yaml" in=yaml path="data[].{category:c,subCategory:s,description:d}" from="sort(category,subCategory,description)" out=ctable

108

πŸ“– OpenVPN | List

When using the container nmaguiar/openvpn it's possible to convert the list of all clients order by expiration/end date

oafp cmd="docker exec openvpn ovpn_listclients" in=csv path="[].{name:name,begin:to_datef(begin,'MMM dd HH:mm:ss yyyy z'),end:to_datef(end,'MMM dd HH:mm:ss yyyy z'),status:status}" out=ctable sql="select * order by end desc"

109

πŸ“– Unix | Activity

Uses the Linux command 'last' output to build a table with user, tty, from and period of activity

oafp cmd="last" in=lines linesjoin=true path="[:-3]|[?contains(@,'no logout')==\`false\`&&contains(@,'system boot')==\`false\`].split_re(@,' \\s+').{user:[0],tty:[1],from:[2],period:join(' ',[3:])}" out=ctable

110

πŸ“– Unix | Alpine

List all installed packages in an Alpine system

apk list -I | oafp in=lines linesjoin=true path="[].replace(@,'(.+) (.+) {(.+)} \((.+)\) \[(.+)\]','','\$1|\$2|\$3|\$4').split(@,'|').{package:[0],arch:[1],source:[2],license:[3]}" out=ctable

111

πŸ“– Unix | Compute

Parses the Linux /proc/cpuinfo into an array

cat /proc/cpuinfo | sed "s/^$/---/mg" | oafp in=yaml path="[?not_null(@)]|[?type(processor)=='number']" out=ctree

112

πŸ“– Unix | Debian/Ubuntu

List all installed packages in a Debian/Ubuntu system

apt list --installed | sed "1d" | oafp in=lines linesjoin=true path="[].split(@,' ').{pack:split([0],'/')[0],version:[1],arch:[2]}" out=ctable

113

πŸ“– Unix | Envs

Converts the Linux envs command result into a table of environment variables and corresponding values

env | oafp in=ini path="map(&{key:@,value:to_string(get(@))},sort(keys(@)))" out=ctable

114

πŸ“– Unix | Files

Converting the Linux's /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

115

πŸ“– Unix | Files

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:]) }, [])"

116

πŸ“– Unix | Files

Executes a recursive file list find command converting the result into a table.

LSPATH=/openaf && find $LSPATH -exec stat -c '{"t":"%F", "p": "%n", "s": %s, "m": "%Y", "e": "%A", "u": "%U", "g": "%G"}' {} \; | oafp in=ndjson ndjsonjoin=true path="[].{type:t,permissions:e,user:u,group:g,size:s,modifiedDate:to_date(mul(to_number(m),\`1000\`)),filepath:p}" from="sort(type,filepath)" out=ctable

117

πŸ“– Unix | Files

Parses the Linux /etc/passwd to a table order by uid and gid.

oafp cmd="cat /etc/passwd" in=csv inputcsv="(withHeader: false, withDelimiter: ':')" path="[].{user:f0,pass:f1,uid:to_number(f2),gid:to_number(f3),description:f4,home:f5,shell:f6}" out=json | oafp from="notStarts(user, '#').sort(uid, gid)" out=ctable

118

πŸ“– Unix | Generic

Creates, in unix, 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

119

πŸ“– Unix | Memory map

Given an Unix process will output a table with process's components memory address, size in bytes, permissions and owner

pmap 12345 | sed '1d;$d' | oafp in=lines linesjoin=true path="[].split_re(@, '\\s+').{address:[0],size:from_bytesAbbr([1]),perm:[2],owner:join('',[3:])}" out=ctable

120

πŸ“– Unix | Network

Loop over the current Linux active network connections

oafp cmd="netstat -tun | sed \"1d\"" in=lines linesvisual=true linesjoin=true linesvisualsepre="\\s+(\\?\!Address)" out=ctable loop=1

121

πŸ“– Unix | Network

Parse the Linux 'arp' command output

arp | oafp in=lines linesvisual=true linesjoin=true out=ctable

122

πŸ“– Unix | Network

Parse the Linux 'ip tcp_metrics' command

ip tcp_metrics | sed 's/^/target: /g' | sed 's/$/\n\n---\n/g' | sed 's/ \([a-z]*\) /\n\1: /g' | head -n -2 | oafp in=yaml path="[].{target:target,age:from_timeAbbr(replace(age,'[sec|\.]','','')),cwnd:cwnd,rtt:from_timeAbbr(rtt),rttvar:from_timeAbbr(rttvar),source:source}" sql="select * order by target" out=ctable

123

πŸ“– Unix | Network

Parse the result of the Linux route command

route | sed "1d" | oafp in=lines linesjoin=true linesvisual=true linesvisualsepre="\s+" out=ctable

124

πŸ“– Unix | OpenSuse

List all installed packages in an OpenSuse system or zypper based system

zypper se -is | egrep "^i" | oafp in=lines linesjoin=true path="[].split(@,'|').{name:[1],version:[2],arch:[3],repo:[4]}" out=ctable

125

πŸ“– Unix | RedHat

List all installed packages in a RedHat system or rpm based system (use rpm –querytags to list all fields available)

rpm -qa --qf "%{NAME}|%{VERSION}|%{PACKAGER}|%{VENDOR}|%{ARCH}\n" | oafp in=lines linesjoin=true path="[].split(@,'|').{package:[0],version:[1],packager:[2],vendor:[3],arch:[4]}" from="sort(package)" out=ctable

126

πŸ“– Unix | Storage

Converting the Unix's df output

df --output=target,fstype,size,used,avail,pcent | tail -n +2 | oafp in=lines linesjoin=true path="[].split_re(@, ' +').{filesystem:[0],type:[1],size:[2],used:[3],available:[4],use:[5]}" out=ctable

127

πŸ“– Unix | Storage

Parses the result of the Unix ls command

ls -lad --time-style="+%Y-%m-%d %H:%M" * | oafp in=lines path="map(&split_re(@,'\\s+').{permissions:[0],id:[1],user:[2],group:[3],size:[4],date:[5],time:[6],file:[7]},[])" linesjoin=true out=ctable

128

πŸ“– Unix | SystemCtl

Converting the Unix's systemctl list-timers

systemctl list-timers | head -n -3 | oafp in=lines linesvisual=true linesjoin=true out=ctable

129

πŸ“– Unix | SystemCtl

Converting the Unix's systemctl list-units

systemctl list-units | head -n -6 | oafp in=lines linesvisual=true linesjoin=true path="[].delete(@,'')" out=ctable

130

πŸ“– Unix | SystemCtl

Converting the Unix's systemctl list-units into an overview table

systemctl list-units | head -n -6 | oafp in=lines linesvisual=true linesjoin=true path="[].delete(@,'')" sql="select \"LOAD\", \"ACTIVE SUB\", count(1) as \"COUNT\" group by \"LOAD\", \"ACTIVE SUB\"" sqlfilter=advanced out=ctable

131

πŸ“– Unix | UBI

List all installed packages in an UBI system

microdnf repoquery --setopt=cachedir=/tmp --installed | oafp in=lines linesjoin=true path="[].replace(@,'(.+)\.(\w+)\.(\w+)\$','','\$1|\$2|\$3').split(@,'|').{package:[0],dist:[1],arch:[2]}" out=ctable

132

πŸ“– Unix | named

Converts a Linux's named log, for client queries, into a CSV

cat named.log | oafp in=lines linesjoin=true path="[?contains(@,' client ')==\`true\`].split(@,' ').{datetime:to_datef(concat([0],concat(' ',[1])),'dd-MMM-yyyy HH:mm:ss.SSS'),session:[3],sourceIP:replace([4],'(.+)#(\d+)','','\$1'),sourcePort:replace([4],'(.+)#(\d+)','','\$2'),target:replace([5],'\((.+)\):','','\$1'),query:join(' ',[6:])}" out=csv

133

πŸ“– Windows | Network

Output a table with the current route table using Windows' PowerShell

Get-NetRoute | ConvertTo-Json | .\oafp.bat path="[].{destination:DestinationPrefix,gateway:NextHop,interface:InterfaceAlias,metric:InterfaceMetric}" sql=select\ *\ order\ by\ interface,destination out=ctable

134

πŸ“– Windows | Network

Output a table with the list of network interfaces using Windows' PowerShell

Get-NetIPAddress | ConvertTo-Json | .\oafp.bat path="[].{ipAddress:IPAddress,prefixLen:PrefixLength,interface:InterfaceAlias}" sql=select\ *\ order\ by\ interface out=ctable

135

πŸ“– Windows | PnP

Output a table with USB/PnP devices using Windows' PowerShell

Get-PnpDevice -PresentOnly | ConvertTo-Csv -NoTypeInformation | .\oafp.bat in=csv path="[].{class:PNPClass,service:Service,name:FriendlyName,id:InstanceId,description:Description,deviceId:DeviceID,status:Status,present:Present}" sql=select\ *\ order\ by\ class,service out=ctable

136

πŸ“– Windows | Storage

Output a table with the attached disk information using Windows' PowerShell

Get-Disk | ConvertTo-Csv -NoTypeInformation | .\oafp.bat in=csv path="[].{id:trim(UniqueId),name:FriendlyName,isBoot:IsBoot,location:Location,size:to_bytesAbbr(to_number(Size)),allocSize:to_bytesAbbr(to_number(AllocatedSize)),sectorSize:LogicalSectorSize,phySectorSize:PhysicalSectorSize,numPartitions:NumberOfPartitions,partitioning:PartitionStyle,health:HealthStatus,bus:BusType,manufacturer:Manufacturer,model:Model,firmwareVersion:FirmwareVersion,serialNumber:SerialNumber}" out=ctable