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 making parallel prompts to a LLM model and then cleaning up the result removing duplicate records into a final csv file. |
AI | Generate data | 4 | Generates synthetic data using a LLM model and then uses the recorded conversation to generate more data respecting the provided instructions |
AI | Groq | 5 | Calculation |
AI | Mistral | 6 | List all available LLM models at mistral.ai |
AI | Ollama | 7 | Setting up access to Ollama and ask for data to an AI LLM model |
AI | OpenAI | 8 | Setting up the OpenAI LLM model and gather the data into a data.json file |
AI | Prompt | 9 | Example of generating data from an AI LLM prompt |
AI | Scaleway | 10 | Setting up a Scaleway Generative API LLM connection and ask for a list of all Roman emperors. |
AI | Summarize | 11 | Use an AI LLM model to summarize the weather information provided in a JSON format |
AI | TogetherAI | 12 | 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 | 13 | Markdown table of near Earth objects by name, magnitude, if is potentially hazardous asteroids and corresponding distance |
APIs | Network | 14 | Converting the Cloudflare DNS trace info |
APIs | Network | 15 | Converting the Google DNS DoH query result |
APIs | Network | 16 | Generating a simple map of the current public IP address |
APIs | Public Holidays | 17 | Return the public holidays for a given country on a given year |
APIs | Space | 18 | How many people are in space and in which craft currently in space |
APIs | iTunes | 19 | Search the Apple's iTunes database for a specific term |
AWS | DynamoDB | 20 | Given an AWS DynamoDB table 'my-table' will produce a ndjson output with all table items. |
AWS | DynamoDB | 21 | Given an AWS DynamoDB table 'my-users' will produce a colored tree output by getting the item for the email key 'scott.tiger@example.com' |
AWS | EC2 | 22 | Given all AWS EC2 instances in an account produces a table with name, type, vpc and private ip sorted by vpc |
AWS | EKS | 23 | 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 | 24 | Prepares a table of AWS Lambda functions with their corresponding main details |
AWS | Lambda | 25 | 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 | 26 | Given an Azure Bing Search API key and a query returns the corresponding search result from Bing. |
Channels | S3 | 27 | Given a S3 bucket will load data from a previously store data in a provided prefix |
Channels | S3 | 28 | Given a S3 bucket will save a list of data (the current list of name and versions of OpenAF's oPacks) within a provided prefix |
Chart | Unix | 29 | Output a chart with the current Unix load using uptime |
DB | H2 | 30 | Perform a SQL query over a H2 database. |
DB | H2 | 31 | Perform queries and DML SQL statements over a H2 databases |
DB | H2 | 32 | Store the json result of a command into a H2 database table. |
DB | List | 33 | List all OpenAF's oPack pre-prepared JDBC drivers |
DB | Mongo | 34 | List all records from a specific MongoDB database and collection from a remote Mongo database. |
DB | SQLite | 35 | Lists all files in openaf.jar, stores the result in a 'data' table on a SQLite data.db file and performs a query over the stored data. |
DB | SQLite | 36 | Perform a query over a database using JDBC. |
DB | SQLite | 37 | Store the json result on a SQLite database table. |
Diff | Envs | 38 | Given two JSON files with environment variables performs a diff and returns a colored result with the corresponding differences |
Diff | Lines | 39 | Performing a diff between two long command lines to spot differences |
Diff | Path | 40 | Given two JSON files with the parsed PATH environment variable performs a diff and returns a colored result with the corresponding differences |
Docker | Containers | 41 | Output a table with the list of running containers. |
Docker | Listing | 42 | List all containers with the docker-compose project, service name, file, id, name, image, creation time, status, networks and ports. |
Docker | Listing | 43 | List all containers with their corresponding labels parsed and sorted. |
Docker | Network | 44 | Output a table with the docker networks info. |
Docker | Registry | 45 | List all a table of docker container images repository and corresponding tags of a private registry. |
Docker | Registry | 46 | List all the docker container image repositories of a private registry. |
Docker | Registry | 47 | List all the docker container image repository tags of a private registry. |
Docker | Stats | 48 | Output a table with the docker stats broken down for each value. |
Docker | Storage | 49 | Output a table with the docker volumes info. |
ElasticSearch | Cluster | 50 | Get an ElasticSearch/OpenSearch cluster nodes overview |
ElasticSearch | Cluster | 51 | Get an ElasticSearch/OpenSearch cluster per host data allocation |
ElasticSearch | Cluster | 52 | Get an ElasticSearch/OpenSearch cluster settings flat |
ElasticSearch | Cluster | 53 | Get an ElasticSearch/OpenSearch cluster settings non-flatted |
ElasticSearch | Cluster | 54 | Get an ElasticSearch/OpenSearch cluster stats per node |
ElasticSearch | Cluster | 55 | Get an overview of an ElasticSearch/OpenSearch cluster health |
ElasticSearch | Indices | 56 | Get an ElasticSearch/OpenSearch count per index |
ElasticSearch | Indices | 57 | Get an ElasticSearch/OpenSearch indices overview |
ElasticSearch | Indices | 58 | Get an ElasticSearch/OpenSearch settings for a specific index |
GIT | History | 59 | Give a GIT repository will retrieve the current log history and parse it to an Excel (XLS) file. |
GPU | Nvidia | 60 | Builds a grid with two charts providing a visualization over a Nvidia GPU usage and the corresponding memory usage for a specific GPU_IDX (gpu index) |
GPU | Nvidia | 61 | Get current Nvidia per-gpu usage |
Generic | Arrays | 62 | Converting an array of strings into an array of maps |
Generic | Avro | 63 | Given an Avro data file outputs it's corresponding statistics |
Generic | Avro | 64 | Given an Avro data file outputs the correspoding schema |
Generic | Avro | 65 | Reads an Avro data file as input |
Generic | Avro | 66 | Write an Avro data file as an output |
Generic | Base64 | 67 | Encode/decode data (or text-like files) to/from gzip base64 representation for easier packing and transport. |
Generic | Commands | 68 | Given an input array with phone numbers will run parallel output commands, calling ojob.io/telco/phoneNumber, for each entry effectively building an output from those multiple command executions. |
Generic | Excel | 69 | Building an Excel file with the AWS IPv4 and IPv6 ranges (1). |
Generic | Excel | 70 | Building an Excel file with the AWS IPv4 and IPv6 ranges (2). |
Generic | Excel | 71 | Building an Excel file with the AWS IPv4 and IPv6 ranges (3). |
Generic | Excel | 72 | Processes each json file in /some/data creating and updating the data.xlsx file with a sheet for each file. |
Generic | Excel | 73 | Store and retrieve data from an Excel spreadsheet |
Generic | HTML | 74 | Generate a HTML with table of emoticons/emojis by category, group, name, unicode and html code. |
Generic | Hex | 75 | Outputs an hexadecimal representation of the characters of the file provided allowing to adjust how many per line/row. |
Generic | List files | 76 | After listing all files and folders recursively producing a count table by file extension. |
Generic | RSS | 77 | Builds an HTML file with the current linked news titles, publication date and source from Google News RSS. |
Generic | RSS | 78 | Example of generating a HTML list of titles, links and publication dates from a RSS feed |
Generic | RSS | 79 | Generates a HTML page with the current news from Google News, order by date, and opens a browser with it. |
Generic | RSS | 80 | Parses the Slashdot's RSS feed news into a quick clickable HTML page in a browser |
Generic | Set | 81 | Given two json files, with arrays of component versions, generate a table with the difference on one of the sides. |
Generic | Set | 82 | Given two json files, with arrays of component versions, generate a table with the union of the two sides. |
Generic | Template | 83 | 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 | 84 | Get a json with lyrics of a song. |
Generic | Text | 85 | Search a word in the English dictionary returning phonetic, meanings, synonyms, antonyms, etc. |
Generic | YAML | 86 | Given an YAML file with a data array composed of maps with fields 'c', 's', 'd' and 'e' filter by any record where any field doesn't have contents. |
GitHub | GIST | 87 | Using GitHub's GIST functionality retrieves and parses an oAFp examples YAML file with the template and the corresponding data. |
GitHub | Releases | 88 | Builds a table of GitHub project releases |
GitHub | Releases | 89 | Parses the latest GitHub project release markdown notes |
Grid | Java | 90 | Parses a Java hsperf data + the current rss java process memory into a looping grid. |
Grid | Java | 91 | Parses a Java hsperf data into a looping grid. |
Grid | Kubernetes | 92 | 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 | 93 | Shows a grid with the Mac network metrics and 4 charts for in, out packets and in, out bytes |
Grid | Mac | 94 | Shows a grid with the Mac storage metrics and 4 charts for read, write IOPS and read, write bytes per second |
Grid | Unix | 95 | 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 | 96 | Get a list of JSON schemas from Schema Store catalog |
Java | Certificates | 97 | Given a Java keystore will obtain a list of certificates and output them order by the ones that will expire first. |
Kubernetes | Containers | 98 | Parse the Linux cgroup cpu stats on a container running in Kubernetes |
Kubernetes | Kubectl | 99 | Build an output table with Kubernetes pods with namespace, pod name, container name and corresponding resources using kubectl |
Kubernetes | Kubectl | 100 | Build an output table with Kubernetes pods with node, namespace, pod name, container name and corresponding resources using kubectl |
Kubernetes | Kubectl | 101 | Executes a recursive file list find command in a specific pod, namespace and path converting the result into a table. |
Kubernetes | Kubectl | 102 | Given the list of all Kubernetes objects will produce a list of objects per namespace, kind, apiVersiom, creation timestamp, name and owner. |
Kubernetes | Kubectl | 103 | List of Kubernetes CPU, memory and storage stats per node using kubectl |
Kubernetes | Kubectl | 104 | List of Kubernetes pods per namespace and kind using kubectl |
Kubernetes | Kubectl | 105 | Produces a list of pods' containers per namespace with the corresponding images and assigned nodes. |
Kubernetes | PVC | 106 | Produces a table with all Kubernetes persistent volume claims (PVCs) in use by pods. |
Mac | Activity | 107 | Uses the Mac terminal command 'last' output to build an activity table with user, tty, from, login-time and logout-time |
Mac | Brew | 108 | List all the packages and corresponding versions installed in a Mac by brew. |
Mac | Chart | 109 | On a Mac OS produce a looping chart with the total percentage of current CPU usage. |
Mac | Info | 110 | Get a list of the current logged users in Mac OS |
Mac | Info | 111 | Parses the current Mac OS hardware information |
Mac | Info | 112 | Parses the current Mac OS overview information |
Mac | Safari | 113 | Get a list of all Mac OS Safari bookmarks into a CSV file. |
Mac | Tunnelblink | 114 | In a Mac OS with Tunnelblink, if you want to copy all your OpenVPN configurations into ovpn files. |
Markdown | Tables | 115 | For an input markdown file, parse all tables, transform it to JSON and output as a colored table |
Network | ASN | 116 | Retrieve an IP to ASN list list and converts it to ndjson |
Network | ASN | 117 | Retrieve the list of ASN number and names from RIPE and transforms it to a CSV. |
Network | Latency | 118 | Given a host and a port will display a continuously updating line chart with network latency, in ms, between the current device and the target host and port |
Ollama | List models | 119 | Parses the list of models currently in an Ollama deployment |
OpenAF | Channels | 120 | Copy the json result of a command into an etcd database using OpenAF's channels |
OpenAF | Channels | 121 | Getting all data stored in an etcd database using OpenAF's channels |
OpenAF | Channels | 122 | 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 | 123 | Perform a query to a metric & label, with a start and end time, to a Prometheus server using OpenAF's channels |
OpenAF | Channels | 124 | Retrieve all keys stores in a H2 MVStore file using OpenAF's channels |
OpenAF | Channels | 125 | Store and retrieve data from a Redis database |
OpenAF | Channels | 126 | Store and retrieve data from a RocksDB database |
OpenAF | Channels | 127 | Store the json results of a command into a H2 MVStore file using OpenAF's channels |
OpenAF | Flags | 128 | List the current values of OpenAF/oAFp internal flags |
OpenAF | Network | 129 | Gets all the DNS host addresses for a provided domain and ensures that the output is always a list |
OpenAF | Network | 130 | List all MX (mail servers) network addresses from the current DNS server for a hostname using OpenAF |
OpenAF | Network | 131 | List all network addresses returned from the current DNS server for a hostname using OpenAF |
OpenAF | OS | 132 | Current OS information visible to OpenAF |
OpenAF | OS | 133 | Using OpenAF parse the current environment variables |
OpenAF | OpenVPN | 134 | Using OpenAF code to perform a more complex parsing of the OpenVPN status data running on an OpenVPN container (nmaguiar/openvpn) called 'openvpn' |
OpenAF | SFTP | 135 | Generates a file list with filepath, size, permissions, create and last modified time from a SFTP connection with user and password |
OpenAF | SFTP | 136 | 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 | 137 | List the TLS certificates of a target host with a sorted alternative names using OpenAF |
OpenAF | oJob.io | 138 | Parses ojob.io/news results into a clickable news title HMTL page. |
OpenAF | oJob.io | 139 | Retrieves the list of oJob.io's jobs and filters which start by 'ojob.io/news' to display them in a rectangle |
OpenAF | oPacks | 140 | Listing all currently accessible OpenAF's oPacks |
OpenAF | oafp | 141 | Filter the OpenAF's oafp examples list by a specific word in the description |
OpenAF | oafp | 142 | List the OpenAF's oafp examples by category, sub-category and description |
OpenVPN | List | 143 | When using the container nmaguiar/openvpn it's possible to convert the list of all clients order by expiration/end date |
Unix | Activity | 144 | Uses the Linux command 'last' output to build a table with user, tty, from and period of activity for Debian based Linuxs |
Unix | Activity | 145 | Uses the Linux command 'last' output to build a table with user, tty, from and period of activity for RedHat based Linuxs |
Unix | Alpine | 146 | List all installed packages in an Alpine system |
Unix | Compute | 147 | Parses the Linux /proc/cpuinfo into an array |
Unix | Debian/Ubuntu | 148 | List all installed packages in a Debian/Ubuntu system |
Unix | Envs | 149 | Converts the Linux envs command result into a table of environment variables and corresponding values |
Unix | Files | 150 | Converting the Linux's /etc/os-release to SQL insert statements. |
Unix | Files | 151 | Converting the Unix's syslog into a json output. |
Unix | Files | 152 | Executes a recursive file list find command converting the result into a table. |
Unix | Files | 153 | Parses the Linux /etc/passwd to a table order by uid and gid. |
Unix | Generic | 154 | Creates, in unix, a data.ndjson file where each record is formatted from json files in /some/data |
Unix | Memory map | 155 | Given an Unix process will output a table with process's components memory address, size in bytes, permissions and owner |
Unix | Network | 156 | Loop over the current Linux active network connections |
Unix | Network | 157 | Parse the Linux 'arp' command output |
Unix | Network | 158 | Parse the Linux 'ip tcp_metrics' command |
Unix | Network | 159 | Parse the result of the Linux route command |
Unix | OpenSuse | 160 | List all installed packages in an OpenSuse system or zypper based system |
Unix | RedHat | 161 | List all installed packages in a RedHat system or rpm based system (use rpm βquerytags to list all fields available) |
Unix | Storage | 162 | Converting the Unix's df output |
Unix | Storage | 163 | Parses the result of the Unix ls command |
Unix | SystemCtl | 164 | Converting the Unix's systemctl list-timers |
Unix | SystemCtl | 165 | Converting the Unix's systemctl list-units |
Unix | SystemCtl | 166 | Converting the Unix's systemctl list-units into an overview table |
Unix | UBI | 167 | List all installed packages in an UBI system |
Unix | named | 168 | Converts a Linux's named log, for client queries, into a CSV |
Windows | Network | 169 | Output a table with the current route table using Windows' PowerShell |
Windows | Network | 170 | Output a table with the list of network interfaces using Windows' PowerShell |
Windows | PnP | 171 | Output a table with USB/PnP devices using Windows' PowerShell |
Windows | Storage | 172 | Output a table with the attached disk information using Windows' PowerShell |
XML | Maven | 173 | Given a Maven pom.xml parses the XML content to a colored table ordering by the fields groupId and artifactId. |
π 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 making parallel prompts to a LLM model and then cleaning up the result removing duplicate records into a final csv file.
# Set the LLM model to use
export OAFP_MODEL="(type: openai, url: 'https://api.scaleway.ai', key: '111-222-333', model: 'llama-3.1-70b-instruct', headers: (Content-Type: application/json))"
# Run 5 parallel prompts to generate data
oafp data="()" path="range(\`5\`)" out=cmd outcmdtmpl=true outcmd="oafp data='generate a list of 10 maps each with firstName, lastName, city and country' in=llm out=ndjson" > data.ndjson
# Clean-up generate data removing duplicates
oafp data.ndjson in=ndjson ndjsonjoin=true removedups=true out=csv > data.csv
4
π 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"
5
π 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'"
6
π 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)"
7
π 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"
8
π 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
9
π 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
10
π AI | Scaleway
Setting up a Scaleway Generative API LLM connection and ask for a list of all Roman emperors.
OAFP_MODEL="(type: openai, url: 'https://api.scaleway.ai', key: '111-222-333', model: 'llama-3.1-70b-instruct', headers: (Content-Type: application/json))"
oafp data="list all roman emperors" in=llm getlist=true out=ctable
11
π 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
12
π 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
13
π 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
14
π APIs | Network
Converting the Cloudflare DNS trace info
curl -s https://1.1.1.1/cdn-cgi/trace | oafp in=ini out=ctree
15
π 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"
16
π APIs | Network
Generating a simple map of the current public IP address
curl -s https://ifconfig.co/json | oafp flatmap=true out=map
17
π 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
18
π 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
19
π 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
20
π AWS | DynamoDB
Given an AWS DynamoDB table 'my-table' will produce a ndjson output with all table items.
# opack install AWS
oafp libs="@AWS/aws.js" in=ch inch="(type: dynamo, options: (region: us-west-1, tableName: my-table))" inchall=true data="__" out=ndjson
21
π AWS | DynamoDB
Given an AWS DynamoDB table 'my-users' will produce a colored tree output by getting the item for the email key 'scott.tiger@example.com'
# opack install AWS
oafp in=ch inch="(type: dynamo, options: (region: eu-west-1, tableName: my-users))" data="(email: scott-tiger@example.com)" libs="@AWS/aws.js" out=ctree
22
π 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
23
π 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
24
π 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
25
π 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
26
π 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
27
π Channels | S3
Given a S3 bucket will load data from a previously store data in a provided prefix
# opack install s3
oafp libs="@S3/s3.js" in=ch inch="(type: s3, options: (s3url: 'https://play.min.io:9000', s3accessKey: abc123, s3secretKey: 'xyz123', s3bucket: test, s3prefix: data, multifile: true, gzip: true))" data="()" inchall=true out=ctable
28
π Channels | S3
Given a S3 bucket will save a list of data (the current list of name and versions of OpenAF's oPacks) within a provided prefix
# opack install s3
oafp libs="@S3/s3.js" -v path="openaf.opacks" out=ch ch="(type: s3, options: (s3url: 'https://play.min.io:9000', s3accessKey: abc123, s3secretKey: 'xyz123', s3bucket: test, s3prefix: data, multifile: true, gzip: true))" chkey=name
29
π 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
30
π 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
31
π DB | H2
Perform queries and DML SQL statements over a H2 databases
# Dump data into a table
oafp data="[(id: 1, val: x)|(id: 2, val: y)|(id: 3, val: z)]" in=slon out=db dbjdbc="jdbc:h2:./data" dbuser=sa dbpass=sa dbtable=data
# Copy data to another new table
ESQL='create table newdata as select * from "data"' && oafp in=db indbjdbc="jdbc:h2:./data" indbuser=sa indbpass=sa indbexec=true data="$ESQL"
# Drop the original table
ESQL='drop table "data"' && oafp in=db indbjdbc="jdbc:h2:./data" indbuser=sa indbpass=sa indbexec=true data="$ESQL"
# Output data from the new table
SQL='select * from newdata' && oafp in=db indbjdbc="jdbc:h2:./data" indbuser=sa indbpass=sa data="$SQL" out=ctable
32
π 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
33
π DB | List
List all OpenAF's oPack pre-prepared JDBC drivers
oaf -c "sprint(getOPackRemoteDB())" | oafp maptoarray=true opath="[].{name:name,description:description,version:version}" sql="select * where name like 'jdbc-%' order by name" out=ctable
34
π DB | Mongo
List all records from a specific MongoDB database and collection from a remote Mongo database.
# opack install mongo
oafp libs="@Mongo/mongo.js" in=ch inch="(type: mongo, options: (database: default, collection: collection, url: 'mongodb://a.server:27017'))" inchall=true path="[].delete(@,'_id')" data="()"
35
π DB | SQLite
Lists all files in openaf.jar, stores the result in a 'data' table on a SQLite data.db file and performs a query over the stored data.
# ojob ojob.io/db/getDriver op=install db=sqlite
opack install jdbc-sqlite
# Dump data into a 'data' table
oafp in=ls data=openaf.jar out=db dbjdbc="jdbc:sqlite:data.db" dblib=sqlite dbtable="data"
# Gets stats over the dump data from the 'data' table
SQL='select count(1) numberOfFiles, round(avg("size")) avgSize, sum("size") totalSize from "data"' && oafp in=db indbjdbc="jdbc:sqlite:data.db" indblib=sqlite data="$SQL" out=ctable
36
π DB | SQLite
Perform a query over a database using JDBC.
# ojob ojob.io/db/getDriver op=install db=sqlite
opack install jdbc-sqlite
echo "select * from data" | oafp in=db indbjdbc="jdbc:sqlite:data.db" indbtable=data indblib=sqlite out=ctable
37
π DB | SQLite
Store the json result on a SQLite database table.
# ojob ojob.io/db/getDriver op=install db=sqlite
opack install jdbc-sqlite
oaf -c "\$o(listFilesRecursive('.'),{__format:'json'})" | oafp out=db dbjdbc="jdbc:sqlite:data.db" dbtable=data dblib=sqlite
38
π 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
39
π 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
40
π 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
41
π 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
42
π 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
43
π 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
44
π Docker | Network
Output a table with the docker networks info.
docker network ls --format json | oafp in=ndjson ndjsonjoin=true out=ctable
45
π Docker | Registry
List all a table of docker container images repository and corresponding tags of a private registry.
# opack install DockerRegistry
# check more options with 'oafp libs=dockerregistry help=dockerregistry'
oafp libs=dockerregistry in=registryrepos data="()" inregistryurl=http://localhost:5000 inregistrytags=true out=ctable
46
π Docker | Registry
List all the docker container image repositories of a private registry.
# opack install DockerRegistry
# check more options with 'oafp libs=dockerregistry help=dockerregistry'
oafp libs=dockerregistry data="()" in=registryrepos inregistryurl=http://localhost:5000
47
π Docker | Registry
List all the docker container image repository tags of a private registry.
# opack install DockerRegistry
# check more options with 'oafp libs=dockerregistry help=dockerregistry'
oafp libs=dockerregistry data="library/nginx" in=registrytags inregistryurl=http://localhost:5000
48
π 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
49
π Docker | Storage
Output a table with the docker volumes info.
docker volume ls --format json | oafp in=ndjson ndjsonjoin=true out=ctable
50
π 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
51
π 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
52
π 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
53
π 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
54
π 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
55
π 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
56
π 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
57
π 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
58
π 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
59
π GIT | History
Give a GIT repository will retrieve the current log history and parse it to an Excel (XLS) file.
opack install plugin-XLS
git log --pretty=format:'{c:"%H",a:"%an",d:"%ad",m:"%s"}' | oafp in=ndjson ndjsonjoin=true path="[].{commit:c,author:a,date:to_date(d),message:m}" out=xls outfile=data.xlsx xlsopen=false
60
π GPU | Nvidia
Builds a grid with two charts providing a visualization over a Nvidia GPU usage and the corresponding memory usage for a specific GPU_IDX (gpu index)
GPU_IDX=0 &&oafp cmd="nvidia-smi --query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu --format=csv,nounits | oafp in=lines path=\"map(&trim(@),split(@,',')).join(',',@)\"" in=csv path="[$GPU_IDX].{memTotal:mul(to_number(\"memory.total [MiB]\"),\`1024\`),memUsed:mul(to_number(\"memory.used [MiB]\"),\`1024\`),memFree:mul(to_number(\"memory.free [MiB]\"),\`1024\`),gpuUse:to_number(\"utilization.gpu [%]\")}" out=grid grid="[[(title: usage, type: chart, obj: 'int gpuUse:green:usage -min:0 -max:100')]|[(title: memory, type: chart, obj: 'bytes memTotal:red:total memUsed:cyan:used -min:0')]]" loopcls=true loop=1
61
π GPU | Nvidia
Get current Nvidia per-gpu usage
nvidia-smi --query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu --format=csv,nounits | oafp in=lines path="map(&trim(@),split(@,',')).join(',',@)" | oafp in=csv out=ctable
62
π 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))"
63
π Generic | Avro
Given an Avro data file outputs it's corresponding statistics
# opack install avro
oafp libs=avro data.avro inavrostats=true
64
π Generic | Avro
Given an Avro data file outputs the correspoding schema
# opack install avro
oafp libs=avro data.avro inavroschema=true
65
π Generic | Avro
Reads an Avro data file as input
# opack install avro
oafp data.avro libs=avro out=ctable
66
π Generic | Avro
Write an Avro data file as an output
# opack install avro
oafp data.json libs=avro out=avro avrofile=data.avro
67
π 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
68
π Generic | Commands
Given an input array with phone numbers will run parallel output commands, calling ojob.io/telco/phoneNumber, for each entry effectively building an output from those multiple command executions.
oafp data="[(p:911234567)|(p:+18004564567)]" in=slon out=cmd outcmdtmpl=true outcmd="ojob ojob.io/telco/phoneNumber country=PT number= -json" | oafp in=ndjson ndjsonjoin=true path="[].phoneInfo" out=ctree
69
π 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
70
π 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
71
π 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
72
π 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" )'
73
π 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
74
π 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','&'),emoji:join('', htmlCode)}" out=mdtable | oafp in=md out=html
75
π 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
76
π Generic | List files
After listing all files and folders recursively producing a count table by file extension.
FPATH="git/ojob.io" && oafp in=ls lsrecursive=true data="$FPATH" path="[].insert(@,'extension',if(isFile && index_of(filename,'.')>'0',replace(filename,'^.+\.([^\.]+)$','','\$1'),'<dir>'))" from="countBy(extension)" out=json | oafp from="sort(-_count)" out=ctable
77
π 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
78
π 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
79
π Generic | RSS
Generates a HTML page with the current news from Google News, order by date, and opens a browser with it.
oafp url="https://news.google.com/rss" path="rss.channel.item[].{title:title,link:link,date:pubDate,source:source._}" out=template templatetmpl=true template="<html><body><h1>Current Main News</h1><ul><li><a href='' target='_blank'></a> <br><small> | Source: </small></li></ul></body></html>" sql="select * order by date desc" | oafp in=raw out=html
80
π 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
81
π Generic | Set
Given two json files, with arrays of component versions, generate a table with the difference on one of the sides.
oafp data="[(file: versions-latest.json)|(file: versions-build.json)]" in=oafp set="(a:'[0]',b:'[1]')" setop=diffb out=ctable
82
π Generic | Set
Given two json files, with arrays of component versions, generate a table with the union of the two sides.
oafp data="[(file: versions-latest.json)|(file: versions-build.json)]" in=oafp set="(a:'[0]',b:'[1]')" setop=union out=ctable
83
π 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
84
π 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))"
85
π 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"
86
π Generic | YAML
Given an YAML file with a data array composed of maps with fields 'c', 's', 'd' and 'e' filter by any record where any field doesn't have contents.
oafp oafp-examples.yaml path="data[?length(nvl(c, \'\')) == \`0\` || length(nvl(s, \'\')) == \`0\` || length(nvl(d, \'\')) == \`0\` || length(nvl(e, \'\')) == \`0\`]"
87
π GitHub | GIST
Using GitHub's GIST functionality retrieves and parses an oAFp examples YAML file with the template and the corresponding data.
opack install GIST
oafp libs="@GIST/gist.js" in=ch inch="(type: gist)" data="(id: '557e12e4a840d513635b3a57cb57b722', file: oafp-examples.yaml)" path=content | oafp in=yaml out=template templatedata=data templatepath=tmpl
88
π 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
89
π 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
90
π 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
91
π 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
92
π 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
93
π 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
94
π 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
95
π 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
96
π 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
97
π Java | Certificates
Given a Java keystore will obtain a list of certificates and output them order by the ones that will expire first.
# execute 'ojob ojob.io/java/certs -jobhelp' to get more options
ojob ojob.io/java/certs op=list keystore=mycerts -json | oafp out=ctable sql="select * order by notAfter"
98
π 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
99
π 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
100
π 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
101
π 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
102
π 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
103
π 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
104
π 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
105
π 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
106
π Kubernetes | PVC
Produces a table with all Kubernetes persistent volume claims (PVCs) in use by pods.
oafp cmd="kubectl get pods -A -o json" path="items[].spec.set(@,'m').volumes[?persistentVolumeClaim].insert(@,'pname',get('m').containers[0].name).insert(@,'node',get('m').nodeName) | [].{pod:pname,node:node,pvc:persistentVolumeClaim.claimName}" from="sort(node,pod)" out=ctable
107
π 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
108
π 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
109
π Mac | Chart
On a Mac OS produce a looping chart with the total percentage of current CPU usage.
oafp cmd="top -l 1 | grep 'CPU usage' | awk '{print \$3 + \$5}'" out=chart chart="int @:blue:CPU_Usage -min:0 -max:100" loop=2 loopcls=true
110
π Mac | Info
Get a list of the current logged users in Mac OS
oafp cmd="who -aH" in=lines linesvisual=true linesjoin=true out=ctable path="[0:-1]"
111
π Mac | Info
Parses the current Mac OS hardware information
system_profiler SPHardwareDataType -json | oafp path="SPHardwareDataType[0]" out=ctree
112
π Mac | Info
Parses the current Mac OS overview information
system_profiler SPSoftwareDataType -json | oafp path="SPSoftwareDataType[0]" out=ctree
113
π 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
114
π Mac | Tunnelblink
In a Mac OS with Tunnelblink, if you want to copy all your OpenVPN configurations into ovpn files.
oafp in=ls data="$HOME/Library/Application Support/Tunnelblick/Configurations" path="[?filename=='config.ovpn'].insert(@,'name',replace(filepath,'.+\/([^\/]+)\.tblk\/.+','','\$1'))" lsrecursive=true out=cmd outcmdtmpl=true outcmd="cp \"\" output/\".ovpn\""
115
π Markdown | Tables
For an input markdown file, parse all tables, transform it to JSON and output as a colored table
oafp url="https://raw.githubusercontent.com/OpenAF/sh/refs/heads/main/README.md" in=mdtable inmdtablejoin=true path="[0]" out=ctable
116
π Network | ASN
Retrieve an IP to ASN list list and converts it to ndjson
oafp cmd="curl https://api.iptoasn.com/data/ip2asn-combined.tsv.gz | gunzip" in=lines linesjoin=true path="[?length(@)>'0'].split(@,'\t').{start:[0],end:[1],asn:[2],area:[3],name:[4]}" out=ndjson
117
π Network | ASN
Retrieve the list of ASN number and names from RIPE and transforms it to a CSV.
oafp url="https://ftp.ripe.net/ripe/asnames/asn.txt" in=lines linesjoin=true path="[?length(@)>'0'].split(@,' ').{asn:[0],name:join(' ',[1:])}" out=csv
118
π Network | Latency
Given a host and a port will display a continuously updating line chart with network latency, in ms, between the current device and the target host and port
HOST=1.1.1.1 && PORT=53 && oafp in=oaf data="ow.loadNet().testPortLatency('$HOST',$PORT)" out=chart chart="int @:red:latencyMS -min:0" loop=1 loopcls=true
119
π 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"
120
π 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
121
π 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
122
π 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"
123
π 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
124
π 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
125
π 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
126
π 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
127
π 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
128
π OpenAF | Flags
List the current values of OpenAF/oAFp internal flags
oafp in=oaf data="__flags"
129
π OpenAF | Network
Gets all the DNS host addresses for a provided domain and ensures that the output is always a list
DOMAIN="nattrmon.io" && oafp in=oaf data="ow.loadNet().getDNS('$DOMAIN','a',__,true)" path="if(type(@)=='array',[].Address.HostAddress,[Address.HostAddress]).map(&{ip:@},[])" out=ctable
130
π 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
131
π 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
132
π OpenAF | OS
Current OS information visible to OpenAF
oafp -v path=os
133
π OpenAF | OS
Using OpenAF parse the current environment variables
oaf -c "sprint(getEnvs())" | oafp sortmapkeys=true out=ctree
134
π OpenAF | OpenVPN
Using OpenAF code to perform a more complex parsing of the OpenVPN status data running on an OpenVPN container (nmaguiar/openvpn) called 'openvpn'
oafp in=oaf data='(function(){return(b=>{var a=b.split("\n"),c=a.indexOf("ROUTING TABLE"),d=a.indexOf("GLOBAL STATS"),f=a.indexOf("END");b=$csv().fromInString($path(a,`[2:${c}]`).join("\n")).toOutArray();var g=$csv().fromInString($path(a,`[${c+1}:${d}]`).join("\n")).toOutArray();a=$csv().fromInString($path(a,`[${d+1}:${f}]`).join("\n")).toOutArray();return{list:b.map(e=>merge(e,$from(g).equals("Common Name",e["Common Name"]).at(0))),stats:a}})($sh("docker exec openvpn cat /tmp/openvpn-status.log").get(0).stdout)})()' path="list[].{user:\"Common Name\",ip:split(\"Real Address\",':')[0],port:split(\"Real Address\",':')[1],vpnAddress:\"Virtual Address\",bytesRx:to_bytesAbbr(to_number(\"Bytes Received\")),bytesTx:to_bytesAbbr(to_number(\"Bytes Sent\")),connectedSince:to_datef(\"Connected Since\",'yyyy-MM-dd HH:mm:ss'),lastReference:to_datef(\"Last Ref\",'yyyy-MM-dd HH:mm:ss')}" sql="select * order by lastReference" out=ctable
135
π 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)"
136
π 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)"
137
π 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
138
π 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
139
π 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
140
π 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
141
π 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%'"
142
π 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
143
π 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"
144
π Unix | Activity
Uses the Linux command 'last' output to build a table with user, tty, from and period of activity for Debian based Linuxs
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
145
π Unix | Activity
Uses the Linux command 'last' output to build a table with user, tty, from and period of activity for RedHat based Linuxs
last | sed '/^$/d;$d;$d' | oafp in=lines linesjoin=true path="[].split_re(@, '\\s+').{user: [0], tty: [1], from: [2], login_time: join(' ', [3:7])}" out=ctable
146
π 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
147
π 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
148
π 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
149
π 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
150
π 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
151
π 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:]) }, [])"
152
π 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
153
π 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
154
π 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
155
π 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
156
π 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
157
π Unix | Network
Parse the Linux 'arp' command output
arp | oafp in=lines linesvisual=true linesjoin=true out=ctable
158
π 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
159
π Unix | Network
Parse the result of the Linux route command
route | sed "1d" | oafp in=lines linesjoin=true linesvisual=true linesvisualsepre="\s+" out=ctable
160
π 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
161
π 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
162
π 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
163
π 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
164
π Unix | SystemCtl
Converting the Unix's systemctl list-timers
systemctl list-timers | head -n -3 | oafp in=lines linesvisual=true linesjoin=true out=ctable
165
π 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
166
π 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
167
π 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
168
π 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
169
π 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
170
π 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
171
π 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
172
π 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
173
π XML | Maven
Given a Maven pom.xml parses the XML content to a colored table ordering by the fields groupId and artifactId.
oafp pom.xml path="project.dependencies.dependency" out=ctable sql="select * order by groupId, artifactId"