mirror of
https://github.com/mgree/ffs.git
synced 2024-10-05 15:18:20 +03:00
Timing support (#46)
Benchmarks, in two flavors: real-world benchmarks and synthetic microbenchmarks. `--time` flag for benchmarking output on stderr. Using R to generate pretty graphs. Some overhaul of build scripts and artifacts, with the hope of simplifying the release system.
This commit is contained in:
parent
b651c9c1ac
commit
6ed74ee0c7
66
.github/workflows/build.yml
vendored
66
.github/workflows/build.yml
vendored
@ -32,9 +32,71 @@ jobs:
|
||||
|
||||
- name: Build ffs and run unit tests
|
||||
run: |
|
||||
cargo build --verbose --all
|
||||
cargo build --verbose --all --release
|
||||
cargo test
|
||||
|
||||
- name: Integration tests
|
||||
run: PATH="$(pwd)/target/debug:$PATH" ./run_tests.sh
|
||||
run: PATH="$(pwd)/target/release:$PATH" ./run_tests.sh
|
||||
|
||||
- name: Install R
|
||||
uses: r-lib/actions/setup-r@v1
|
||||
|
||||
- name: Benchmarks
|
||||
run: |
|
||||
Rscript -e "install.packages('ggplot2', repos = 'https://cloud.r-project.org/')"
|
||||
PATH="$(pwd)/target/release:$PATH" ./run_bench.sh -n 3
|
||||
mkdir data
|
||||
for x in *.log *.png
|
||||
do
|
||||
mv $x data/${x##*_}
|
||||
done
|
||||
|
||||
- name: Upload macOS release build
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
with:
|
||||
name: ffs.macos
|
||||
path: target/release/ffs
|
||||
|
||||
- name: Upload Linux release build
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
with:
|
||||
name: ffs.linux
|
||||
path: target/release/ffs
|
||||
|
||||
- name: Upload macOS benchmark data
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
with:
|
||||
name: benchmarks.macos
|
||||
path: data
|
||||
|
||||
- name: Upload Linux benchmark data
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
with:
|
||||
name: benchmarks.linux
|
||||
path: data
|
||||
|
||||
prerelease:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
|
||||
steps:
|
||||
- name: Download binaries
|
||||
uses: actions/download-artifact@v2
|
||||
|
||||
- name: Deploy 'latest' release
|
||||
uses: "marvinpinto/action-automatic-releases@latest"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
automatic_release_tag: "latest"
|
||||
prerelease: true
|
||||
title: "Latest development build"
|
||||
files: |
|
||||
ffs.linux/ffs.linux
|
||||
ffs.macos/ffs.macos
|
||||
|
||||
|
||||
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
||||
/target
|
||||
*~
|
||||
*.log
|
||||
*.png
|
||||
.Rhistory
|
||||
|
@ -6,6 +6,8 @@
|
||||
code.
|
||||
* Revise exit codes: 0 means success, 1 means FS error, 2 means CLI
|
||||
error.
|
||||
* `--time` flag for emitting timing information on STDERR.
|
||||
* Basic startup/shutdown benchmarking, with microbenchmarks.
|
||||
|
||||
## 0.1.1 - 2021-07-15
|
||||
|
||||
|
2
bench/.gitignore
vendored
Normal file
2
bench/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
__pycache__/
|
||||
micro
|
2281
bench/20210727_run.log
Normal file
2281
bench/20210727_run.log
Normal file
File diff suppressed because it is too large
Load Diff
19
bench/README.md
Normal file
19
bench/README.md
Normal file
@ -0,0 +1,19 @@
|
||||
To run benchmarks, run `run_bench.sh` (in the repo root).
|
||||
|
||||
Files for benchmarking. Each directory is from a different source.
|
||||
|
||||
- synthetic (artificial, hand-crafted examples)
|
||||
- json_org (https://json.org examples)
|
||||
- gh (GitHub API https://api.github.com/)
|
||||
- ncdc (NCDC NOAA API https://www.ncdc.noaa.gov/cdo-web/webservices/v2)
|
||||
- gov.uk (https://gov.uk)
|
||||
- penn (Penn Museum https://www.penn.museum/collections/objects/data.php)
|
||||
- doi (https://www.doi.org/factsheets/DOIProxy.html#rest-api)
|
||||
- penguin (http://www.penguinrandomhouse.biz/webservices/rest/)
|
||||
- rv (Rig Veda https://aninditabasu.github.io/indica/html/rv.html)
|
||||
- fda (https://open.fda.gov/apis/)
|
||||
|
||||
https://github.com/public-apis/public-apis is a useful meta-source.
|
||||
|
||||
We generate micro-benchmarks using `mk_micro.sh`, which will wipe out
|
||||
and recreate the directory `micro`.
|
216
bench/bench.sh
Executable file
216
bench/bench.sh
Executable file
@ -0,0 +1,216 @@
|
||||
#!/bin/sh
|
||||
|
||||
CLEANUP=
|
||||
CLEANUP_DIR=
|
||||
PIDS=
|
||||
tempfile() {
|
||||
file=$(mktemp)
|
||||
CLEANUP="$CLEANUP $file"
|
||||
eval "$1=$file"
|
||||
}
|
||||
tempdir() {
|
||||
dir=$(mktemp -d)
|
||||
CLEANUP_DIR="$CLEANUP $dir"
|
||||
eval "$1=$dir"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
for file in $CLEANUP
|
||||
do
|
||||
[ "$file" ] && [ -f "$file" ] && rm "$file" >/dev/null 2>&1
|
||||
done
|
||||
CLEANUP=""
|
||||
|
||||
for dir in $CLEANUP_DIR
|
||||
do
|
||||
[ "$dir" ] && [ -f "$dir" ] && rmdir "$dir" >/dev/null 2>&1
|
||||
done
|
||||
CLEANUP_DIR=""
|
||||
|
||||
for pid in $PIDS
|
||||
do
|
||||
kill $pid >/dev/null 2>&1
|
||||
done
|
||||
PIDS=""
|
||||
}
|
||||
|
||||
if [ "$RUNNER_OS" = "Linux" ] || [ "$(uname)" = "Linux" ]; then
|
||||
filesize() {
|
||||
stat --printf=%s $1
|
||||
}
|
||||
elif [ "$RUNNER_OS" = "macOS" ] || [ "$(uname)" = "Darwin" ]; then
|
||||
filesize() {
|
||||
stat -f "%z" $1
|
||||
}
|
||||
else
|
||||
echo "The benchmark suite only runs on macOS and Linux." >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
trap 'cleanup' EXIT
|
||||
trap 'echo "Interrupted!"; cleanup; exit' INT
|
||||
|
||||
NUM_RUNS_DEFAULT=10
|
||||
usage() {
|
||||
exec >&2
|
||||
printf "Usage: %s [-n NUM_RUNS] [-d DIR] [PATTERNS ...]\n\n" "$(basename $0)"
|
||||
printf " -d DIR runs tests in DIR only\n"
|
||||
printf " -n NUM_RUNS the number of runs for each test case (defaults to $NUM_RUNS_DEFAULT)\n"
|
||||
printf " PATTERNS regular expression patterns for grep; tests matching any pattern will be run (defaults .*)\n"
|
||||
exit 2
|
||||
}
|
||||
|
||||
while getopts ":n:d:h" opt
|
||||
do
|
||||
case "$opt" in
|
||||
(n) if [ $((OPTARG)) -le 0 ]
|
||||
then
|
||||
printf "NUM_RUNS must be a positive number; got '%s'\n\n" "$OPTARG"
|
||||
usage
|
||||
fi
|
||||
NUM_RUNS=$OPTARG
|
||||
;;
|
||||
(d) if ! [ -d "$OPTARG" ]
|
||||
then
|
||||
printf "No such directory '%s'." "$OPTARG"
|
||||
exit 1
|
||||
fi
|
||||
DIRS="$OPTARG"
|
||||
;;
|
||||
(h) usage
|
||||
;;
|
||||
(*) printf "Unrecognized argument '%s'\n\n" "$OPTARG"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
if [ $# -ge 1 ]
|
||||
then
|
||||
PATTERN="$1"
|
||||
shift
|
||||
for kw in "$@"
|
||||
do
|
||||
PATTERN="$PATTERN\|$kw"
|
||||
done
|
||||
fi
|
||||
|
||||
TIMEOUT="$(cd ../utils; pwd)/timeout"
|
||||
|
||||
: ${NUM_RUNS=$NUM_RUNS_DEFAULT}
|
||||
run_digits=$(( ${#NUM_RUNS} ))
|
||||
: ${FFS=$(dirname $0)/../target/release/ffs}
|
||||
: ${PATTERN=".*"}
|
||||
|
||||
: ${DIRS=doi fda gh gov.uk json.org ncdc penguin penn rv synthetic}
|
||||
|
||||
# GENERATE PLAN
|
||||
# each file gets $NUM_RUNS runs, in a random order
|
||||
tempfile all
|
||||
tempfile plan
|
||||
|
||||
dir_len=0
|
||||
|
||||
for d in $DIRS
|
||||
do
|
||||
for f in $(ls $d)
|
||||
do
|
||||
for r in $(seq 1 $NUM_RUNS)
|
||||
do
|
||||
echo $d,$f,$r >>$all
|
||||
|
||||
path="$d/$f"
|
||||
if [ "${#path}" -gt $dir_len ]
|
||||
then
|
||||
dir_len=${#path}
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
# randomize, and then sort by 'run' number
|
||||
sort -R $all | sort -k 3 -t , -s -n >$plan
|
||||
|
||||
total_runs=$(( $(cat $plan | wc -l) ))
|
||||
total_digits=${#total_runs}
|
||||
|
||||
# EXECUTE PLAN
|
||||
tempdir mnt
|
||||
|
||||
printf "source,file,run,size,activity,ns\n" "$d" "$f" "$r" "$size" "$line" # header
|
||||
|
||||
errors=""
|
||||
has_error() {
|
||||
case "$errors" in
|
||||
(*$1*) return 0;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
errored() {
|
||||
if ! has_error $1
|
||||
then
|
||||
errors="$errors $1"
|
||||
fi
|
||||
kill $PID >/dev/null 2>&1
|
||||
[ -d $mnt ] && umount $mnt >/dev/null 2>&1
|
||||
[ -f $log ] && rm $log
|
||||
}
|
||||
|
||||
run=0
|
||||
for entry in $(cat $plan | grep -e "$PATTERN")
|
||||
do
|
||||
d=$(echo $entry | cut -d, -f1)
|
||||
f=$(echo $entry | cut -d, -f2)
|
||||
r=$(echo $entry | cut -d, -f3)
|
||||
|
||||
path="$d/$f"
|
||||
|
||||
: $((run += 1))
|
||||
printf "%${total_digits}d/%d %${dir_len}s " "$run" "$total_runs" "$path" >&2
|
||||
if has_error "$path"
|
||||
then
|
||||
printf "(errored earlier; skipping)\n" >&2
|
||||
continue
|
||||
else
|
||||
printf "(copy %${run_digits}d)\n" "$r" >&2
|
||||
fi
|
||||
|
||||
tempfile log
|
||||
tempfile out
|
||||
$FFS --time -m $mnt -o $out -t json $path 2>$log &
|
||||
PID=$!
|
||||
PIDS="$PIDS $PID"
|
||||
count=0
|
||||
while ! umount $mnt >/dev/null 2>&1
|
||||
do
|
||||
sleep $count
|
||||
if [ "$count" -le 5 ]
|
||||
then
|
||||
: $((count += 1))
|
||||
else
|
||||
printf "%$((2 * total_digits + 1))s warning: couldn't unmount for $path\n" ' ' >&2
|
||||
errored $path
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
|
||||
count=0
|
||||
while kill -0 $PID >/dev/null 2>&1
|
||||
do
|
||||
sleep $count
|
||||
if [ "$count" -le 2 ]
|
||||
then
|
||||
: $((count += 1))
|
||||
else
|
||||
printf "%$((2 * total_digits + 1))s warning: $PID still running for $path" ' ' >&2
|
||||
errored $path
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
|
||||
size=$(filesize $path)
|
||||
while read line
|
||||
do
|
||||
printf "%s,%s,%s,%s,%s\n" "$d" "$f" "$r" "$size" "$line"
|
||||
done <$log
|
||||
done
|
1
bench/doi/doi_10.1000_1.json
Normal file
1
bench/doi/doi_10.1000_1.json
Normal file
@ -0,0 +1 @@
|
||||
{"responseCode":1,"handle":"10.1000/1","values":[{"index":100,"type":"HS_ADMIN","data":{"format":"admin","value":{"handle":"0.NA/10.1000","index":200,"permissions":"011111111111"}},"ttl":86400,"timestamp":"2014-09-26T14:40:46Z"},{"index":1,"type":"URL","data":{"format":"string","value":"http://www.doi.org/index.html"},"ttl":86400,"timestamp":"2014-09-26T14:40:46Z"}]}
|
1
bench/doi/doi_smoosh.json
Normal file
1
bench/doi/doi_smoosh.json
Normal file
@ -0,0 +1 @@
|
||||
{"responseCode":1,"handle":"10.1145/3458336.3465294","values":[{"index":1,"type":"URL","data":{"format":"string","value":"https://dl.acm.org/doi/10.1145/3458336.3465294"},"ttl":86400,"timestamp":"2021-06-04T02:18:21Z"},{"index":700050,"type":"700050","data":{"format":"string","value":"2021060318573100415"},"ttl":86400,"timestamp":"2021-06-04T02:18:21Z"},{"index":100,"type":"HS_ADMIN","data":{"format":"admin","value":{"handle":"0.na/10.1145","index":200,"permissions":"111111110010"}},"ttl":86400,"timestamp":"2021-06-04T02:18:21Z"}]}
|
62
bench/fda/event.json
Normal file
62
bench/fda/event.json
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-05-10",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 1,
|
||||
"total": 13306102
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"receiptdateformat": "102",
|
||||
"receiver": null,
|
||||
"seriousnessdeath": "1",
|
||||
"companynumb": "JACAN16471",
|
||||
"receivedateformat": "102",
|
||||
"primarysource": {
|
||||
"reportercountry": "CANADA",
|
||||
"qualification": "3"
|
||||
},
|
||||
"transmissiondateformat": "102",
|
||||
"fulfillexpeditecriteria": "1",
|
||||
"safetyreportid": "5801206-7",
|
||||
"sender": {
|
||||
"senderorganization": "FDA-Public Use"
|
||||
},
|
||||
"receivedate": "20080707",
|
||||
"patient": {
|
||||
"patientonsetage": "26",
|
||||
"patientonsetageunit": "801",
|
||||
"patientsex": "1",
|
||||
"patientdeath": {
|
||||
"patientdeathdateformat": null,
|
||||
"patientdeathdate": null
|
||||
},
|
||||
"reaction": [
|
||||
{
|
||||
"reactionmeddrapt": "DRUG ADMINISTRATION ERROR"
|
||||
},
|
||||
{
|
||||
"reactionmeddrapt": "OVERDOSE"
|
||||
}
|
||||
],
|
||||
"drug": [
|
||||
{
|
||||
"drugcharacterization": "1",
|
||||
"medicinalproduct": "DURAGESIC-100",
|
||||
"drugauthorizationnumb": "019813",
|
||||
"drugadministrationroute": "041",
|
||||
"drugindication": "DRUG ABUSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
"transmissiondate": "20090109",
|
||||
"serious": "1",
|
||||
"receiptdate": "20080625"
|
||||
}
|
||||
]
|
||||
}
|
80662
bench/fda/event100.json
Normal file
80662
bench/fda/event100.json
Normal file
File diff suppressed because it is too large
Load Diff
906
bench/fda/recall.json
Normal file
906
bench/fda/recall.json
Normal file
@ -0,0 +1,906 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-07-11",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 1,
|
||||
"total": 348
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"event_date_initiated": "2019-05-17",
|
||||
"city": "Reading",
|
||||
"address_1": "2400 Bernville Rd",
|
||||
"reason_for_recall": "Lidstock contains a labeling error. The lidstock shows the catheter cross section of the gauge (GA) values in a reversed manner.",
|
||||
"product_code": "FOZ",
|
||||
"code_info": "Lot/Batch Numbers: 13F18C0374, 13F18H0580, 13F18D0504, 13F18L0507, 13F18E0380, 13F18L0714, 13F18G0180, 13F18L0936, 13F18G0480",
|
||||
"product_quantity": "3,143",
|
||||
"additional_info_contact": "Customer Service\n866-396-2111",
|
||||
"action": "On May 17, 2019, Arrow International issued Urgent Medical Device and Acknowledgement notices to customers via courier service. \r\n \r\nCustomers should take the following actions:\r\n1. Place a copy of the notification with each unit of affected product currently in your inventory.\r\n2. After step (1) is complete, fill out the enclosed Acknowledgement Form and fax it to 1-855-419-8507, Attn: Customer Service or email it to recalls@teleflex.com.\r\n\r\nDistributors should take the following actions:\r\n1. Place a copy of the notification with each unit of affected product currently in your inventory.\r\n2. Using the provided customer letter template and acknowledgement form, communicate the notification to any of your customers who have received product included within the scope of the notification.\r\n3. Have each of your customers who received the affected product return a completed acknowledgement form to you.\r\n4. Once you have finished collecting and consolidating all of the acknowledgement forms from your customers and placing a copy of the notification with each unit of affected product in your inventory, please completed the enclosed Distributor Acknowledgement Form and fax it to 1-855-\r\n419-8507, Attn: Customer Service or email it to recalls@teleflex.com. This will allow us to document completion of this field action\r\n\r\nIf you have any other questions, feel free to contact\r\nyour local sales representative or Customer Service at 1-866-396-2111.",
|
||||
"distribution_pattern": "US Nationwide Distribution",
|
||||
"k_numbers": [
|
||||
"K900263"
|
||||
],
|
||||
"firm_fei_number": "2518433",
|
||||
"state": "PA",
|
||||
"product_description": "Pediatric Two-Lumen Central Venous Catheterization\nKit with Blue FlexTip ARROWg+ard Blue Catheter, REF AK-25502\n\nProduct Usage; Provide short-term (< 30 days) central venous access for treatment of diseases or conditions requiring central venous access",
|
||||
"root_cause_description": "Employee error",
|
||||
"event_date_created": "2019-10-07",
|
||||
"openfda": {
|
||||
"k_number": [
|
||||
"K940634",
|
||||
"K984614",
|
||||
"K912165",
|
||||
"K140419",
|
||||
"K984059",
|
||||
"K844219",
|
||||
"K912563",
|
||||
"K840815",
|
||||
"K012128",
|
||||
"K021130",
|
||||
"K981368",
|
||||
"K013800",
|
||||
"K834255",
|
||||
"K944968",
|
||||
"K811171",
|
||||
"K851101",
|
||||
"K010410",
|
||||
"K113700",
|
||||
"K830539",
|
||||
"K001616",
|
||||
"K910566",
|
||||
"K813396",
|
||||
"K060174",
|
||||
"K132153",
|
||||
"K834480",
|
||||
"K932946",
|
||||
"K200373",
|
||||
"K013556",
|
||||
"K821679",
|
||||
"K982558",
|
||||
"K823565",
|
||||
"K881666",
|
||||
"K200263",
|
||||
"K080793",
|
||||
"K875082",
|
||||
"K081420",
|
||||
"K090973",
|
||||
"K760163",
|
||||
"K980493",
|
||||
"K110443",
|
||||
"K971339",
|
||||
"K920028",
|
||||
"K992532",
|
||||
"K770181",
|
||||
"K822776",
|
||||
"K013182",
|
||||
"K090502",
|
||||
"K823351",
|
||||
"K926405",
|
||||
"K883980",
|
||||
"K193158",
|
||||
"K073520",
|
||||
"K993691",
|
||||
"K123734",
|
||||
"K902527",
|
||||
"K121488",
|
||||
"K872585",
|
||||
"K151698",
|
||||
"K112542",
|
||||
"K033853",
|
||||
"K000997",
|
||||
"K862480",
|
||||
"K120337",
|
||||
"K011967",
|
||||
"K910564",
|
||||
"K111236",
|
||||
"K881767",
|
||||
"K943023",
|
||||
"K904558",
|
||||
"K111366",
|
||||
"K071538",
|
||||
"K990236",
|
||||
"K911251",
|
||||
"K895734",
|
||||
"K874582",
|
||||
"K833092",
|
||||
"K984055",
|
||||
"K850278",
|
||||
"K000087",
|
||||
"K960013",
|
||||
"K944660",
|
||||
"K914528",
|
||||
"K002142",
|
||||
"K151513",
|
||||
"K110794",
|
||||
"K932789",
|
||||
"K971991",
|
||||
"K931668",
|
||||
"K830765",
|
||||
"K901263",
|
||||
"K991406",
|
||||
"K904121",
|
||||
"K121007",
|
||||
"K903347",
|
||||
"K011982",
|
||||
"K860290",
|
||||
"K011297",
|
||||
"K944367",
|
||||
"K974015",
|
||||
"K191232",
|
||||
"K990308",
|
||||
"K844193",
|
||||
"K112347",
|
||||
"K860256",
|
||||
"K052564",
|
||||
"K000665",
|
||||
"K905009",
|
||||
"K083429",
|
||||
"K163358",
|
||||
"K970864",
|
||||
"K130518",
|
||||
"K844113",
|
||||
"K931729",
|
||||
"K923702",
|
||||
"K861117",
|
||||
"K024007",
|
||||
"K183399",
|
||||
"K061250",
|
||||
"K953811",
|
||||
"K791918",
|
||||
"K945521",
|
||||
"K043446",
|
||||
"K021557",
|
||||
"K051355",
|
||||
"K954112",
|
||||
"K192533",
|
||||
"K990390",
|
||||
"K153280",
|
||||
"K960764",
|
||||
"K002786",
|
||||
"K152272",
|
||||
"K896774",
|
||||
"K984189",
|
||||
"K020785",
|
||||
"K970736",
|
||||
"K884325",
|
||||
"K052881",
|
||||
"K904648",
|
||||
"K910572",
|
||||
"K964048",
|
||||
"K092629",
|
||||
"K821372",
|
||||
"K161777",
|
||||
"K853348",
|
||||
"K033500",
|
||||
"K150611",
|
||||
"K850460",
|
||||
"K864038",
|
||||
"K190001",
|
||||
"K854308",
|
||||
"K192230",
|
||||
"K964050",
|
||||
"K800525",
|
||||
"K171530",
|
||||
"K890751",
|
||||
"K884806",
|
||||
"K981905",
|
||||
"K090122",
|
||||
"K872998",
|
||||
"K944368",
|
||||
"K150407",
|
||||
"K921955",
|
||||
"K001795",
|
||||
"K100282",
|
||||
"K192676",
|
||||
"K945053",
|
||||
"K141026",
|
||||
"K143610",
|
||||
"K060341",
|
||||
"K790914",
|
||||
"K800786",
|
||||
"K861510",
|
||||
"K852078",
|
||||
"K895942",
|
||||
"K861479",
|
||||
"K772354",
|
||||
"K112290",
|
||||
"K850349",
|
||||
"K901701",
|
||||
"K081113",
|
||||
"K884701",
|
||||
"K926097",
|
||||
"K850369",
|
||||
"K192493",
|
||||
"K160592",
|
||||
"K894371",
|
||||
"K972264",
|
||||
"K821699",
|
||||
"K953120",
|
||||
"K861725",
|
||||
"K834073",
|
||||
"K850887",
|
||||
"K850276",
|
||||
"K946170",
|
||||
"K915065",
|
||||
"K840862",
|
||||
"K160235",
|
||||
"K000235",
|
||||
"K901640",
|
||||
"K801537",
|
||||
"K032417",
|
||||
"K840355",
|
||||
"K140270",
|
||||
"K873050",
|
||||
"K834393",
|
||||
"K161779",
|
||||
"K962577",
|
||||
"K950118",
|
||||
"K003187",
|
||||
"K073241",
|
||||
"K982805",
|
||||
"K970669",
|
||||
"K113622",
|
||||
"K010406",
|
||||
"K963196",
|
||||
"K973561",
|
||||
"K780350",
|
||||
"K102520",
|
||||
"K162377",
|
||||
"K861015",
|
||||
"K941678",
|
||||
"K150109",
|
||||
"K952645",
|
||||
"K142797",
|
||||
"K833091",
|
||||
"K993515",
|
||||
"K924968",
|
||||
"K142136",
|
||||
"K153298",
|
||||
"K182252",
|
||||
"K022756",
|
||||
"K010021",
|
||||
"K172506",
|
||||
"K981382",
|
||||
"K833135",
|
||||
"K842577",
|
||||
"K862153",
|
||||
"K812159",
|
||||
"K011860",
|
||||
"K942045",
|
||||
"K935090",
|
||||
"K160374",
|
||||
"K895191",
|
||||
"K170336",
|
||||
"K864949",
|
||||
"K871546",
|
||||
"K850398",
|
||||
"K920133",
|
||||
"K770511",
|
||||
"K161866",
|
||||
"K841880",
|
||||
"K884577",
|
||||
"K854566",
|
||||
"K933050",
|
||||
"K790967",
|
||||
"K140136",
|
||||
"K830573",
|
||||
"K201717",
|
||||
"K833657",
|
||||
"K993518",
|
||||
"K940441",
|
||||
"K100974",
|
||||
"K182538",
|
||||
"K032962",
|
||||
"K962226",
|
||||
"K926544",
|
||||
"K812137",
|
||||
"K821577",
|
||||
"K880260",
|
||||
"K801575",
|
||||
"K830541",
|
||||
"K013287",
|
||||
"K912358",
|
||||
"K860474",
|
||||
"K944511",
|
||||
"K172204",
|
||||
"K930048",
|
||||
"K003245",
|
||||
"K033843",
|
||||
"K032274",
|
||||
"K821371",
|
||||
"K073471",
|
||||
"K121073",
|
||||
"K010034",
|
||||
"K032292",
|
||||
"K884259",
|
||||
"K193278",
|
||||
"K915824",
|
||||
"K894611",
|
||||
"K070705",
|
||||
"K893003",
|
||||
"K883415",
|
||||
"K042862",
|
||||
"K851142",
|
||||
"K071382",
|
||||
"K190855",
|
||||
"K843033",
|
||||
"K992198",
|
||||
"K881215",
|
||||
"K801414",
|
||||
"K905415",
|
||||
"K830972",
|
||||
"K974543",
|
||||
"K042504",
|
||||
"K040427",
|
||||
"K964966",
|
||||
"K070020",
|
||||
"K113565",
|
||||
"K870403",
|
||||
"K203069",
|
||||
"K895768",
|
||||
"K900116",
|
||||
"K964049",
|
||||
"K032777",
|
||||
"K172496",
|
||||
"K173354",
|
||||
"K953252",
|
||||
"K802918",
|
||||
"K914180",
|
||||
"K891087",
|
||||
"K140504",
|
||||
"K790968",
|
||||
"K954887",
|
||||
"K021139",
|
||||
"K082997",
|
||||
"K910565",
|
||||
"K904150",
|
||||
"K000632",
|
||||
"K033250",
|
||||
"K955053",
|
||||
"K162894",
|
||||
"K022099",
|
||||
"K903732",
|
||||
"K953335",
|
||||
"K770403",
|
||||
"K943349",
|
||||
"K072419",
|
||||
"K963867",
|
||||
"K770751",
|
||||
"K954428",
|
||||
"K853701",
|
||||
"K023253",
|
||||
"K931073",
|
||||
"K163513",
|
||||
"K120839",
|
||||
"K100775",
|
||||
"K921270",
|
||||
"K091709",
|
||||
"K896813",
|
||||
"K983409",
|
||||
"K083454",
|
||||
"K950301",
|
||||
"K003553",
|
||||
"K932071",
|
||||
"K920828",
|
||||
"K133856",
|
||||
"K895812",
|
||||
"K941417",
|
||||
"K972262",
|
||||
"K780105",
|
||||
"K062108",
|
||||
"K893546",
|
||||
"K050114",
|
||||
"K053120",
|
||||
"K883866",
|
||||
"K821929",
|
||||
"K944410",
|
||||
"K200266",
|
||||
"K944504",
|
||||
"K932947",
|
||||
"K032843",
|
||||
"K122544",
|
||||
"K770510",
|
||||
"K960051",
|
||||
"K961552",
|
||||
"K950737",
|
||||
"K840116",
|
||||
"K013073",
|
||||
"K123267",
|
||||
"K902135",
|
||||
"K940775",
|
||||
"K983916",
|
||||
"K970644",
|
||||
"K070451",
|
||||
"K813345",
|
||||
"K974764",
|
||||
"K980566",
|
||||
"K772011",
|
||||
"K823017",
|
||||
"K951620",
|
||||
"K905463",
|
||||
"K063469",
|
||||
"K955839",
|
||||
"K904122",
|
||||
"K881976",
|
||||
"K862130",
|
||||
"K081690",
|
||||
"K920635",
|
||||
"K141138",
|
||||
"K912158",
|
||||
"K801941",
|
||||
"K030479",
|
||||
"K113429",
|
||||
"K131555",
|
||||
"K903545",
|
||||
"K900056",
|
||||
"K923323",
|
||||
"K851327",
|
||||
"K834227",
|
||||
"K832624",
|
||||
"K940385",
|
||||
"K992732",
|
||||
"K910799",
|
||||
"K840183",
|
||||
"K984590",
|
||||
"K875177",
|
||||
"K052389",
|
||||
"K920638",
|
||||
"K972254",
|
||||
"K200891",
|
||||
"K133280",
|
||||
"K803238",
|
||||
"K931027",
|
||||
"K950284",
|
||||
"K881236",
|
||||
"K900263",
|
||||
"K760319",
|
||||
"K853988",
|
||||
"K041345",
|
||||
"K822023",
|
||||
"K890435",
|
||||
"K002033",
|
||||
"K952861",
|
||||
"K182870",
|
||||
"K914378",
|
||||
"K771573",
|
||||
"K962938",
|
||||
"K093546",
|
||||
"K953805",
|
||||
"K111939",
|
||||
"K813374",
|
||||
"K030571",
|
||||
"K771381",
|
||||
"K972263",
|
||||
"K081953",
|
||||
"K920128",
|
||||
"K011937",
|
||||
"K971990",
|
||||
"K851981",
|
||||
"K832558",
|
||||
"K170283",
|
||||
"K082362",
|
||||
"K933467",
|
||||
"K944302",
|
||||
"K842133",
|
||||
"K895597",
|
||||
"K882242",
|
||||
"K161681",
|
||||
"K952058",
|
||||
"K952256",
|
||||
"K952757",
|
||||
"K201075",
|
||||
"K944336",
|
||||
"K833079",
|
||||
"K893965"
|
||||
],
|
||||
"registration_number": [
|
||||
"3000268902",
|
||||
"2032112",
|
||||
"1000563940",
|
||||
"3014758767",
|
||||
"9680794",
|
||||
"3006621386",
|
||||
"3015724078",
|
||||
"2025816",
|
||||
"1055927",
|
||||
"3012783688",
|
||||
"3009220482",
|
||||
"3008770691",
|
||||
"3002807314",
|
||||
"3002806603",
|
||||
"3011237770",
|
||||
"3007616112",
|
||||
"8020616",
|
||||
"9680091",
|
||||
"3016784016",
|
||||
"8021545",
|
||||
"3006948478",
|
||||
"3010413216",
|
||||
"8010026",
|
||||
"3014477782",
|
||||
"1410248",
|
||||
"3014101058",
|
||||
"2011171",
|
||||
"3009211636",
|
||||
"1000163068",
|
||||
"1282497",
|
||||
"3014656749",
|
||||
"3004111573",
|
||||
"1048014",
|
||||
"3006846316",
|
||||
"3011357022",
|
||||
"3010055973",
|
||||
"2030624",
|
||||
"3003895440",
|
||||
"9680143",
|
||||
"3012307300",
|
||||
"1650907",
|
||||
"1820334",
|
||||
"9612126",
|
||||
"3003418325",
|
||||
"1710034",
|
||||
"8041187",
|
||||
"3008403546",
|
||||
"9617594",
|
||||
"1928237",
|
||||
"3010882065",
|
||||
"3015060232",
|
||||
"3006260740",
|
||||
"1219611",
|
||||
"2024024",
|
||||
"1625425",
|
||||
"3006942602",
|
||||
"3012494290",
|
||||
"3005034064",
|
||||
"2032758",
|
||||
"3013298431",
|
||||
"3012050423",
|
||||
"3012542015",
|
||||
"9610849",
|
||||
"3003674698",
|
||||
"3016727301",
|
||||
"3000247873",
|
||||
"1721686",
|
||||
"3010384323",
|
||||
"3010425778",
|
||||
"3008496528",
|
||||
"3010605677",
|
||||
"2029214",
|
||||
"1319639",
|
||||
"2527072",
|
||||
"9616157",
|
||||
"3005515211",
|
||||
"9615588",
|
||||
"1721676",
|
||||
"3003442380",
|
||||
"3003915875",
|
||||
"3012809732",
|
||||
"3002806470",
|
||||
"3012636179",
|
||||
"2523676",
|
||||
"1018233",
|
||||
"3012627824",
|
||||
"3010220595",
|
||||
"3010392988",
|
||||
"3006082230",
|
||||
"2245270",
|
||||
"3006979819",
|
||||
"3008307705",
|
||||
"9616088",
|
||||
"3012232810",
|
||||
"3006425876",
|
||||
"1043214",
|
||||
"2246552",
|
||||
"3011137372",
|
||||
"9610987",
|
||||
"3012421607",
|
||||
"3015751263",
|
||||
"3015522053",
|
||||
"3017892510",
|
||||
"3005011024",
|
||||
"3007054491",
|
||||
"9680437",
|
||||
"3015859709",
|
||||
"2029015",
|
||||
"2244478",
|
||||
"3016678045",
|
||||
"3012104670",
|
||||
"3005941719",
|
||||
"1319211",
|
||||
"9611446",
|
||||
"9617592",
|
||||
"3005246939",
|
||||
"2648045",
|
||||
"9610993",
|
||||
"3009380063",
|
||||
"8040227",
|
||||
"3013654137",
|
||||
"3010131137",
|
||||
"3013517171",
|
||||
"1647137",
|
||||
"2243072",
|
||||
"2532083",
|
||||
"3004134316",
|
||||
"3010532612",
|
||||
"9610847",
|
||||
"3002533790",
|
||||
"3013659863",
|
||||
"2518433",
|
||||
"2184009",
|
||||
"1644312",
|
||||
"1223004",
|
||||
"2518902",
|
||||
"1123137",
|
||||
"3004187702",
|
||||
"1419629",
|
||||
"8020889",
|
||||
"8043983",
|
||||
"1061124",
|
||||
"3010754844",
|
||||
"9681835",
|
||||
"3009249481",
|
||||
"3015422213",
|
||||
"8020785",
|
||||
"3015550451",
|
||||
"2183744",
|
||||
"3002807350",
|
||||
"9616567",
|
||||
"1065831",
|
||||
"1000523114",
|
||||
"8031563",
|
||||
"1036844",
|
||||
"3006367242",
|
||||
"3003902955",
|
||||
"3010041511",
|
||||
"3009291251",
|
||||
"1423537",
|
||||
"3005987240",
|
||||
"1035907",
|
||||
"3002601200",
|
||||
"3011088743",
|
||||
"8041145",
|
||||
"3013561886",
|
||||
"1713468",
|
||||
"3015997711",
|
||||
"1038445",
|
||||
"9610048",
|
||||
"1220905",
|
||||
"1000587249",
|
||||
"9612086",
|
||||
"1030583",
|
||||
"2015691",
|
||||
"3012410077",
|
||||
"3014270673",
|
||||
"9617604",
|
||||
"3010421104",
|
||||
"3004129394",
|
||||
"3013082799",
|
||||
"3003618391",
|
||||
"3008410596",
|
||||
"3017219795",
|
||||
"3007207906",
|
||||
"3001124136",
|
||||
"3015474943",
|
||||
"9610825",
|
||||
"3011689956",
|
||||
"3012798826",
|
||||
"9612433",
|
||||
"3003916417",
|
||||
"3004784537",
|
||||
"3013557562"
|
||||
],
|
||||
"fei_number": [
|
||||
"1000117748",
|
||||
"3000268902",
|
||||
"3003076831",
|
||||
"3002468371",
|
||||
"1000563940",
|
||||
"3002808465",
|
||||
"3014758767",
|
||||
"3002808464",
|
||||
"3006621386",
|
||||
"3015724078",
|
||||
"2025816",
|
||||
"3012783688",
|
||||
"3002807111",
|
||||
"3009220482",
|
||||
"3000206435",
|
||||
"3008770691",
|
||||
"3002807314",
|
||||
"3002806603",
|
||||
"3011237770",
|
||||
"3002681132",
|
||||
"3002807548",
|
||||
"3007616112",
|
||||
"3003910417",
|
||||
"3016784016",
|
||||
"3006948478",
|
||||
"3010413216",
|
||||
"3014477782",
|
||||
"1410248",
|
||||
"3002806830",
|
||||
"3014101058",
|
||||
"2011171",
|
||||
"3009211636",
|
||||
"1000163068",
|
||||
"1282497",
|
||||
"3002808374",
|
||||
"3014656749",
|
||||
"3004111573",
|
||||
"1048014",
|
||||
"3006846316",
|
||||
"3011357022",
|
||||
"3010055973",
|
||||
"3003895440",
|
||||
"3002973487",
|
||||
"3012307300",
|
||||
"1820334",
|
||||
"3003418325",
|
||||
"1710034",
|
||||
"3003218564",
|
||||
"2828",
|
||||
"3008403546",
|
||||
"3002963732",
|
||||
"1928237",
|
||||
"3002806482",
|
||||
"3003737899",
|
||||
"3015060232",
|
||||
"3002939122",
|
||||
"3006260740",
|
||||
"3002807710",
|
||||
"1219611",
|
||||
"2024024",
|
||||
"3003382061",
|
||||
"3003807466",
|
||||
"3006097687",
|
||||
"1625425",
|
||||
"3012494290",
|
||||
"3006942602",
|
||||
"3005034064",
|
||||
"3013298431",
|
||||
"3012050423",
|
||||
"3002806476",
|
||||
"3012542015",
|
||||
"3003674698",
|
||||
"3016727301",
|
||||
"3002974635",
|
||||
"3000247873",
|
||||
"1721686",
|
||||
"3010384323",
|
||||
"3010425778",
|
||||
"3008496528",
|
||||
"3010605677",
|
||||
"3002807725",
|
||||
"1000174591",
|
||||
"2527072",
|
||||
"3005515211",
|
||||
"1721676",
|
||||
"3003442380",
|
||||
"3003915875",
|
||||
"3012809732",
|
||||
"3002806470",
|
||||
"3012636179",
|
||||
"2523676",
|
||||
"1018233",
|
||||
"3012627824",
|
||||
"3010220595",
|
||||
"3010392988",
|
||||
"3006082230",
|
||||
"1000120555",
|
||||
"2245270",
|
||||
"3006979819",
|
||||
"3008307705",
|
||||
"3005747797",
|
||||
"3012232810",
|
||||
"3006425876",
|
||||
"1043214",
|
||||
"2246552",
|
||||
"3012421607",
|
||||
"3015522053",
|
||||
"3015751263",
|
||||
"3017892510",
|
||||
"3005011024",
|
||||
"1000512168",
|
||||
"3007054491",
|
||||
"1000306068",
|
||||
"3015859709",
|
||||
"3016678045",
|
||||
"3002879021",
|
||||
"3012104670",
|
||||
"1319211",
|
||||
"3005246939",
|
||||
"2648045",
|
||||
"1000123180",
|
||||
"3002807391",
|
||||
"1000477110",
|
||||
"3009380063",
|
||||
"3002558692",
|
||||
"3013654137",
|
||||
"3010131137",
|
||||
"3013517171",
|
||||
"2243072",
|
||||
"3004134316",
|
||||
"3010532612",
|
||||
"3002533790",
|
||||
"3013659863",
|
||||
"2518433",
|
||||
"1000160458",
|
||||
"1000136269",
|
||||
"2518902",
|
||||
"3004187702",
|
||||
"1419629",
|
||||
"3010754844",
|
||||
"3003752255",
|
||||
"3001236905",
|
||||
"1000116158",
|
||||
"3009249481",
|
||||
"3015422213",
|
||||
"3003169040",
|
||||
"3015550451",
|
||||
"2183744",
|
||||
"3002807350",
|
||||
"1000523114",
|
||||
"3002808345",
|
||||
"3006367242",
|
||||
"1036844",
|
||||
"3003902955",
|
||||
"3010041511",
|
||||
"3009291251",
|
||||
"3005987240",
|
||||
"1035907",
|
||||
"1000162947",
|
||||
"3002601200",
|
||||
"3011088743",
|
||||
"3013561886",
|
||||
"1713468",
|
||||
"3015997711",
|
||||
"1038445",
|
||||
"1220905",
|
||||
"1000587249",
|
||||
"1030583",
|
||||
"2015691",
|
||||
"3012410077",
|
||||
"3014270673",
|
||||
"3010421104",
|
||||
"3002902735",
|
||||
"3004129394",
|
||||
"3002807308",
|
||||
"3013082799",
|
||||
"3004053914",
|
||||
"3008410596",
|
||||
"3017219795",
|
||||
"3003618391",
|
||||
"3001124136",
|
||||
"3015474943",
|
||||
"3007207906",
|
||||
"3002806575",
|
||||
"1000220862",
|
||||
"3011689956",
|
||||
"3012798826",
|
||||
"3002806469",
|
||||
"3003560965",
|
||||
"3002806593",
|
||||
"1000113359",
|
||||
"3004784537",
|
||||
"3013557562",
|
||||
"1000138054"
|
||||
],
|
||||
"device_name": "Catheter, Intravascular, Therapeutic, Short-Term Less Than 30 Days",
|
||||
"medical_specialty_description": "General Hospital",
|
||||
"regulation_number": "880.5200",
|
||||
"device_class": "2"
|
||||
},
|
||||
"event_date_terminated": "2020-09-24",
|
||||
"recalling_firm": "Arrow International Inc",
|
||||
"product_res_number": "Z-0053-2020",
|
||||
"recall_status": "Terminated",
|
||||
"res_event_number": "82984",
|
||||
"postal_code": "19605-9607"
|
||||
}
|
||||
]
|
||||
}
|
8915
bench/fda/recall10.json
Normal file
8915
bench/fda/recall10.json
Normal file
File diff suppressed because it is too large
Load Diff
89043
bench/fda/recall100.json
Normal file
89043
bench/fda/recall100.json
Normal file
File diff suppressed because it is too large
Load Diff
44521
bench/fda/recall50.json
Normal file
44521
bench/fda/recall50.json
Normal file
File diff suppressed because it is too large
Load Diff
100
bench/fda/registrationlisting.json
Normal file
100
bench/fda/registrationlisting.json
Normal file
@ -0,0 +1,100 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-07-12",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 1,
|
||||
"total": 304808
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"proprietary_name": [
|
||||
"Optical Coherence Tomography OCT-A1"
|
||||
],
|
||||
"establishment_type": [
|
||||
"Develop Specifications But Do Not Manufacture At This Facility"
|
||||
],
|
||||
"registration": {
|
||||
"registration_number": "1000181430",
|
||||
"fei_number": "1000181430",
|
||||
"status_code": "1",
|
||||
"initial_importer_flag": "N",
|
||||
"reg_expiry_date_year": "2021",
|
||||
"name": "CANON INC.",
|
||||
"address_line_1": "9-1, Imaikami-cho, Nakahara-ku",
|
||||
"address_line_2": "",
|
||||
"city": "Kawasaki Kanagawa",
|
||||
"state_code": "",
|
||||
"iso_country_code": "JP",
|
||||
"zip_code": "",
|
||||
"postal_code": "211-8501",
|
||||
"us_agent": {
|
||||
"name": "MASAYUKI TAKEUCHI",
|
||||
"business_name": "Canon Medical Components U.S.A., Inc.",
|
||||
"bus_phone_area_code": "631",
|
||||
"bus_phone_num": "3308587",
|
||||
"bus_phone_extn": "",
|
||||
"fax_area_code": "",
|
||||
"fax_num": "",
|
||||
"email_address": "mtakeuchi@mcu.canon",
|
||||
"address_line_1": "15955",
|
||||
"address_line_2": "Alton Parkway",
|
||||
"city": "Irvine",
|
||||
"state_code": "CA",
|
||||
"iso_country_code": "US",
|
||||
"zip_code": "92618",
|
||||
"postal_code": ""
|
||||
},
|
||||
"owner_operator": {
|
||||
"firm_name": "CANON INC.",
|
||||
"owner_operator_number": "8030410",
|
||||
"official_correspondent": {},
|
||||
"contact_address": {
|
||||
"address_1": "30-2 SHIMOMARUKO, 3-CHOME,",
|
||||
"address_2": "OHTA-KU",
|
||||
"city": "TOKYO",
|
||||
"state_code": "JP-NOTA",
|
||||
"state_province": "",
|
||||
"iso_country_code": "JP",
|
||||
"postal_code": "146-8501"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pma_number": "",
|
||||
"k_number": "K182942",
|
||||
"products": [
|
||||
{
|
||||
"product_code": "HLI",
|
||||
"created_date": "2019-07-24",
|
||||
"owner_operator_number": "8030410",
|
||||
"exempt": "",
|
||||
"openfda": {
|
||||
"device_name": "Ophthalmoscope, Ac-Powered",
|
||||
"medical_specialty_description": "Ophthalmic",
|
||||
"regulation_number": "886.1570",
|
||||
"device_class": "2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"product_code": "OBO",
|
||||
"created_date": "2019-07-24",
|
||||
"owner_operator_number": "8030410",
|
||||
"exempt": "",
|
||||
"openfda": {
|
||||
"k_number": [
|
||||
"K182942"
|
||||
],
|
||||
"device_name": "Tomography, Optical Coherence",
|
||||
"medical_specialty_description": "Ophthalmic",
|
||||
"regulation_number": "886.1570",
|
||||
"device_class": "2"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
6823
bench/fda/registrationlisting100.json
Normal file
6823
bench/fda/registrationlisting100.json
Normal file
File diff suppressed because it is too large
Load Diff
33
bench/fda/tobacco.json
Normal file
33
bench/fda/tobacco.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-04-30",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 1,
|
||||
"total": 1042
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"date_submitted": "02/03/2020",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Petit mal",
|
||||
"Seizures"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 2,
|
||||
"report_id": 2079781,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
}
|
||||
]
|
||||
}
|
194
bench/fda/tobacco10.json
Normal file
194
bench/fda/tobacco10.json
Normal file
@ -0,0 +1,194 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-04-30",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 10,
|
||||
"total": 1042
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"date_submitted": "02/03/2020",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Petit mal",
|
||||
"Seizures"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 2,
|
||||
"report_id": 2079781,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "09/17/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Dyspnea"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"report_id": 1164,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "08/09/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Seizure"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"report_id": 942,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "08/30/2018",
|
||||
"nonuser_affected": "No information provided",
|
||||
"reported_health_problems": [
|
||||
"Lung cancer"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Cigarette"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "03/04/2021",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Vision blurred",
|
||||
"Nearsighted",
|
||||
"Vomiting",
|
||||
"Lung irritation",
|
||||
"Myoclonus",
|
||||
"Difficulty breathing",
|
||||
"Defect coagulation (NOS)",
|
||||
"Serotonin syndrome",
|
||||
"Dilated pupils"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 9,
|
||||
"reported_product_problems": [
|
||||
"Foreign material (something in the product that does not belong)",
|
||||
"Other"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette or vaping product (also known as E-cigarette, vape pen, hookah pen, mod, e-cigar, e-hookah, and e-pipe; E-liquid (also known as \"e-juice\" or \"vape juice\"))"
|
||||
],
|
||||
"number_product_problems": 2
|
||||
},
|
||||
{
|
||||
"date_submitted": "09/18/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Other"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"report_id": 1172,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "08/09/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Seizures",
|
||||
"Motor vehicle accident"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 2,
|
||||
"report_id": 943,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "09/07/2018",
|
||||
"nonuser_affected": "Yes",
|
||||
"reported_health_problems": [
|
||||
"Other"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "02/05/2020",
|
||||
"nonuser_affected": "Yes",
|
||||
"reported_health_problems": [
|
||||
"Deficiency mental"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 1,
|
||||
"report_id": 2079873,
|
||||
"reported_product_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 0
|
||||
},
|
||||
{
|
||||
"date_submitted": "09/18/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Seizure",
|
||||
"Nicotine poisoning"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 2,
|
||||
"report_id": 1174,
|
||||
"reported_product_problems": [
|
||||
"Other"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 1
|
||||
}
|
||||
]
|
||||
}
|
1869
bench/fda/tobacco100.json
Normal file
1869
bench/fda/tobacco100.json
Normal file
File diff suppressed because it is too large
Load Diff
82
bench/fda/tobacco_products.json
Normal file
82
bench/fda/tobacco_products.json
Normal file
@ -0,0 +1,82 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-04-30"
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"term": "Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)",
|
||||
"count": 810
|
||||
},
|
||||
{
|
||||
"term": "Electronic cigarette or vaping product (also known as E-cigarette, vape pen, hookah pen, mod, e-cigar, e-hookah, and e-pipe; E-liquid (also known as \"e-juice\" or \"vape juice\"))",
|
||||
"count": 77
|
||||
},
|
||||
{
|
||||
"term": "Cigarette",
|
||||
"count": 68
|
||||
},
|
||||
{
|
||||
"term": "Other",
|
||||
"count": 48
|
||||
},
|
||||
{
|
||||
"term": "Snuff (dry or moist for use in nose or mouth)",
|
||||
"count": 14
|
||||
},
|
||||
{
|
||||
"term": "Roll-your-own cigarette",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"term": "Pipe or pipe tobacco",
|
||||
"count": 8
|
||||
},
|
||||
{
|
||||
"term": "Chewing tobacco (loose leaf chew, plug, twist/roll)",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"term": "Small Cigar, Little Cigar or Cigarillo",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"term": "Tobacco Heating System (heats tobacco leaf not liquid)",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"term": "Snus (pouches or loose)",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"term": "Cigar (large or premium)",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"term": "Heated Tobacco Product (also known as \"Heat not Burn\"; heats dry or moist tobacco)",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"term": "Waterpipe (also known as hookah, narghile, shisha, or goza)",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"term": "Dissolvable (for example, strips, sticks, orbs)",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"term": "Gutka (or Gutkha), Betel Quid with Tobacco",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"term": "Mixture of tobacco with spices, herbs, nuts, fruit, plant leaves, etc. (used for chewing)",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"term": "Nicotine Lotions or Gels (applied to the skin)",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
56
bench/fda/waterpipe.json
Normal file
56
bench/fda/waterpipe.json
Normal file
@ -0,0 +1,56 @@
|
||||
{
|
||||
"meta": {
|
||||
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
|
||||
"terms": "https://open.fda.gov/terms/",
|
||||
"license": "https://open.fda.gov/license/",
|
||||
"last_updated": "2021-04-30",
|
||||
"results": {
|
||||
"skip": 0,
|
||||
"limit": 100,
|
||||
"total": 2
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"date_submitted": "09/12/2019",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"No information provided"
|
||||
],
|
||||
"number_tobacco_products": 1,
|
||||
"number_health_problems": 0,
|
||||
"report_id": 1128,
|
||||
"reported_product_problems": [
|
||||
"Other",
|
||||
"Damaged, broken, or defective product"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Waterpipe (also known as hookah, narghile, shisha, or goza)"
|
||||
],
|
||||
"number_product_problems": 2
|
||||
},
|
||||
{
|
||||
"date_submitted": "09/28/2017",
|
||||
"nonuser_affected": "No",
|
||||
"reported_health_problems": [
|
||||
"Other",
|
||||
"Acute migraine"
|
||||
],
|
||||
"number_tobacco_products": 3,
|
||||
"number_health_problems": 2,
|
||||
"reported_product_problems": [
|
||||
"Damaged, broken or defective product, part, accessory, or package",
|
||||
"Appearance, look, smell, or taste issue",
|
||||
"Label or instruction issue",
|
||||
"Other",
|
||||
"Foreign material (something in the product that does not belong)"
|
||||
],
|
||||
"tobacco_products": [
|
||||
"Waterpipe (also known as hookah, narghile, shisha, or goza)",
|
||||
"Pipe or pipe tobacco",
|
||||
"Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-liquids, e-juice or vape juice)"
|
||||
],
|
||||
"number_product_problems": 5
|
||||
}
|
||||
]
|
||||
}
|
29
bench/fixup_micro.sh
Executable file
29
bench/fixup_micro.sh
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
# the log format for micro benchmark has a bunch of information nested in the filename
|
||||
# here we break it apart so that we can generate appropriate charts
|
||||
|
||||
[ "$#" -eq 1 ] && [ -f "$1" ] || {
|
||||
echo "Usage: $(basename $0) [BENCHMARK LOG]" >&2
|
||||
echo >&2
|
||||
echo " see run_bench.sh in the repo root" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
group=$(mktemp)
|
||||
name=$(mktemp)
|
||||
info=$(mktemp)
|
||||
rest=$(mktemp)
|
||||
|
||||
cat $1 | cut -f 1 -d ',' >$group
|
||||
cat $1 | cut -f 2 -d ',' >$name
|
||||
|
||||
# take the filename and break it up; we need to emit a new header field, too
|
||||
echo kind,direction,magnitude >$info
|
||||
tail -n +2 $name | sed s/_/,/g | sed s/.json// >>$info
|
||||
|
||||
cat $1 | cut -f 3,4,5,6 -d ',' >$rest
|
||||
|
||||
paste -d ',' $group $name $info $rest
|
||||
|
||||
rm $group $name $info $rest
|
25
bench/generate_charts.R
Executable file
25
bench/generate_charts.R
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env Rscript
|
||||
library(ggplot2)
|
||||
|
||||
args = commandArgs(trailingOnly=TRUE)
|
||||
|
||||
bench <- data.frame(read.csv(args[1]))
|
||||
bench$activity <- factor(bench$activity, levels = c("reading", "loading", "saving", "writing"))
|
||||
benchPlot <- ggplot(bench) +
|
||||
xlab("File size (MiB)") + ylab("Time (ms, log10)") + scale_colour_discrete(name = "Activity") +
|
||||
scale_x_continuous(limits=c(0,3100), breaks=c(0,1024,2048,3072), labels=c("0MiB","1MiB","2MiB","3MiB")) +
|
||||
scale_y_continuous(breaks=c(0,2,4,6,8,10),labels=c("0ms", "0.01ms", "0.1ms", "1ms", "10ms", "100ms")) +
|
||||
geom_point(aes(size/1024,log(ns,base=10),colour=activity))
|
||||
|
||||
ggsave(gsub("log","png",args[1]), benchPlot, width=4.5, height=4.5)
|
||||
|
||||
micro <- data.frame(read.csv(args[2]))
|
||||
micro$activity <- factor(micro$activity, levels = c("reading", "loading", "saving", "writing"))
|
||||
microPlot <- ggplot(micro) +
|
||||
xlab("JSON value size") + ylab("Time (ms, log10)") + scale_colour_discrete(name = "Activity") + scale_shape_discrete(name = "Kind") +
|
||||
scale_x_continuous(limits=c(0,8), breaks=c(0,2,4,6,8), labels=c("1", "4", "16", "64", "256")) +
|
||||
scale_y_continuous(breaks=c(0,2,4,6,8,10),labels=c("0ms", "0.01ms", "0.1ms", "1ms", "10ms", "100ms")) +
|
||||
geom_point(aes(log(magnitude,base=2),log(ns,base=10),colour=activity,shape=kind)) +
|
||||
facet_wrap( ~ direction, labeller = as_labeller(c(`deep` = "Deep { { ... } }", `wide` = "Wide { ..., ... }")))
|
||||
|
||||
ggsave(gsub("log","png",args[2]), microPlot, width=4.5, height=4.5)
|
103
bench/gh/ffs.json
Normal file
103
bench/gh/ffs.json
Normal file
@ -0,0 +1,103 @@
|
||||
{
|
||||
"id": 374712709,
|
||||
"node_id": "MDEwOlJlcG9zaXRvcnkzNzQ3MTI3MDk=",
|
||||
"name": "ffs",
|
||||
"full_name": "mgree/ffs",
|
||||
"private": false,
|
||||
"owner": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"html_url": "https://github.com/mgree/ffs",
|
||||
"description": "the file filesystem: mount semi-structured data (like JSON) as a Unix filesystem",
|
||||
"fork": false,
|
||||
"url": "https://api.github.com/repos/mgree/ffs",
|
||||
"forks_url": "https://api.github.com/repos/mgree/ffs/forks",
|
||||
"keys_url": "https://api.github.com/repos/mgree/ffs/keys{/key_id}",
|
||||
"collaborators_url": "https://api.github.com/repos/mgree/ffs/collaborators{/collaborator}",
|
||||
"teams_url": "https://api.github.com/repos/mgree/ffs/teams",
|
||||
"hooks_url": "https://api.github.com/repos/mgree/ffs/hooks",
|
||||
"issue_events_url": "https://api.github.com/repos/mgree/ffs/issues/events{/number}",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/events",
|
||||
"assignees_url": "https://api.github.com/repos/mgree/ffs/assignees{/user}",
|
||||
"branches_url": "https://api.github.com/repos/mgree/ffs/branches{/branch}",
|
||||
"tags_url": "https://api.github.com/repos/mgree/ffs/tags",
|
||||
"blobs_url": "https://api.github.com/repos/mgree/ffs/git/blobs{/sha}",
|
||||
"git_tags_url": "https://api.github.com/repos/mgree/ffs/git/tags{/sha}",
|
||||
"git_refs_url": "https://api.github.com/repos/mgree/ffs/git/refs{/sha}",
|
||||
"trees_url": "https://api.github.com/repos/mgree/ffs/git/trees{/sha}",
|
||||
"statuses_url": "https://api.github.com/repos/mgree/ffs/statuses/{sha}",
|
||||
"languages_url": "https://api.github.com/repos/mgree/ffs/languages",
|
||||
"stargazers_url": "https://api.github.com/repos/mgree/ffs/stargazers",
|
||||
"contributors_url": "https://api.github.com/repos/mgree/ffs/contributors",
|
||||
"subscribers_url": "https://api.github.com/repos/mgree/ffs/subscribers",
|
||||
"subscription_url": "https://api.github.com/repos/mgree/ffs/subscription",
|
||||
"commits_url": "https://api.github.com/repos/mgree/ffs/commits{/sha}",
|
||||
"git_commits_url": "https://api.github.com/repos/mgree/ffs/git/commits{/sha}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/comments{/number}",
|
||||
"issue_comment_url": "https://api.github.com/repos/mgree/ffs/issues/comments{/number}",
|
||||
"contents_url": "https://api.github.com/repos/mgree/ffs/contents/{+path}",
|
||||
"compare_url": "https://api.github.com/repos/mgree/ffs/compare/{base}...{head}",
|
||||
"merges_url": "https://api.github.com/repos/mgree/ffs/merges",
|
||||
"archive_url": "https://api.github.com/repos/mgree/ffs/{archive_format}{/ref}",
|
||||
"downloads_url": "https://api.github.com/repos/mgree/ffs/downloads",
|
||||
"issues_url": "https://api.github.com/repos/mgree/ffs/issues{/number}",
|
||||
"pulls_url": "https://api.github.com/repos/mgree/ffs/pulls{/number}",
|
||||
"milestones_url": "https://api.github.com/repos/mgree/ffs/milestones{/number}",
|
||||
"notifications_url": "https://api.github.com/repos/mgree/ffs/notifications{?since,all,participating}",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/labels{/name}",
|
||||
"releases_url": "https://api.github.com/repos/mgree/ffs/releases{/id}",
|
||||
"deployments_url": "https://api.github.com/repos/mgree/ffs/deployments",
|
||||
"created_at": "2021-06-07T15:22:28Z",
|
||||
"updated_at": "2021-07-22T21:09:54Z",
|
||||
"pushed_at": "2021-07-27T14:07:46Z",
|
||||
"git_url": "git://github.com/mgree/ffs.git",
|
||||
"ssh_url": "git@github.com:mgree/ffs.git",
|
||||
"clone_url": "https://github.com/mgree/ffs.git",
|
||||
"svn_url": "https://github.com/mgree/ffs",
|
||||
"homepage": "https://mgree.github.io/ffs/",
|
||||
"size": 1011,
|
||||
"stargazers_count": 109,
|
||||
"watchers_count": 109,
|
||||
"language": "Rust",
|
||||
"has_issues": true,
|
||||
"has_projects": true,
|
||||
"has_downloads": true,
|
||||
"has_wiki": true,
|
||||
"has_pages": true,
|
||||
"forks_count": 3,
|
||||
"mirror_url": null,
|
||||
"archived": false,
|
||||
"disabled": false,
|
||||
"open_issues_count": 15,
|
||||
"license": {
|
||||
"key": "gpl-3.0",
|
||||
"name": "GNU General Public License v3.0",
|
||||
"spdx_id": "GPL-3.0",
|
||||
"url": "https://api.github.com/licenses/gpl-3.0",
|
||||
"node_id": "MDc6TGljZW5zZTk="
|
||||
},
|
||||
"forks": 3,
|
||||
"open_issues": 15,
|
||||
"watchers": 109,
|
||||
"default_branch": "main",
|
||||
"temp_clone_token": null,
|
||||
"network_count": 3,
|
||||
"subscribers_count": 1
|
||||
}
|
926
bench/gh/ffs_issues.json
Normal file
926
bench/gh/ffs_issues.json
Normal file
@ -0,0 +1,926 @@
|
||||
[
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/37",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/37/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/37/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/37/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/37",
|
||||
"id": 936563865,
|
||||
"node_id": "MDU6SXNzdWU5MzY1NjM4NjU=",
|
||||
"number": 37,
|
||||
"title": "Debian package",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390728,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI4",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/help%20wanted",
|
||||
"name": "help wanted",
|
||||
"color": "008672",
|
||||
"default": true,
|
||||
"description": "Extra attention is needed"
|
||||
},
|
||||
{
|
||||
"id": 3141103140,
|
||||
"node_id": "MDU6TGFiZWwzMTQxMTAzMTQw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/install",
|
||||
"name": "install",
|
||||
"color": "790BD4",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-07-04T23:41:37Z",
|
||||
"updated_at": "2021-07-04T23:45:07Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Would be good to build a `.deb` file for this.\r\n\r\nhttps://github.com/mmstick/cargo-deb seems promising.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/36",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/36/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/36/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/36/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/36",
|
||||
"id": 936563859,
|
||||
"node_id": "MDU6SXNzdWU5MzY1NjM4NTk=",
|
||||
"number": 36,
|
||||
"title": "homebrew package",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390728,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI4",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/help%20wanted",
|
||||
"name": "help wanted",
|
||||
"color": "008672",
|
||||
"default": true,
|
||||
"description": "Extra attention is needed"
|
||||
},
|
||||
{
|
||||
"id": 3141103140,
|
||||
"node_id": "MDU6TGFiZWwzMTQxMTAzMTQw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/install",
|
||||
"name": "install",
|
||||
"color": "790BD4",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-07-04T23:41:34Z",
|
||||
"updated_at": "2021-07-04T23:43:47Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Started working in https://github.com/mgree/ffs/tree/homebrew.\r\n\r\nReally, no idea what I'm doing. Not sure how to depend on a cask (macfuse) and I have the sinking feeling that you can't. Oy.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/28",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/28/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/28/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/28/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/28",
|
||||
"id": 932778160,
|
||||
"node_id": "MDU6SXNzdWU5MzI3NzgxNjA=",
|
||||
"number": 28,
|
||||
"title": "PDF (?!)",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
},
|
||||
{
|
||||
"id": 3126904200,
|
||||
"node_id": "MDU6TGFiZWwzMTI2OTA0MjAw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/format",
|
||||
"name": "format",
|
||||
"color": "44EE79",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-29T14:46:21Z",
|
||||
"updated_at": "2021-06-29T14:46:21Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Request: https://twitter.com/wtfpdf/status/1409883313888804868\r\n\r\nPromising lead on a Rust library: https://github.com/J-F-Liu/lopdf with [Document::load](https://docs.rs/lopdf/0.26.0/lopdf/struct.Document.html#method.load) and [Document.*](https://docs.rs/lopdf/0.26.0/lopdf/struct.Document.html#fields)",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/23",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/23/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/23/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/23/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/23",
|
||||
"id": 929208382,
|
||||
"node_id": "MDU6SXNzdWU5MjkyMDgzODI=",
|
||||
"number": 23,
|
||||
"title": "Sync/live flags",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-24T13:04:05Z",
|
||||
"updated_at": "2021-06-24T13:04:05Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "A `--live` flag to sync the JSON out on every write.\r\n\r\nA `--watch` flag to notice updates to the JSON file and rebuild the FS.\r\n\r\nWith lazy/incremental, this would be complicated.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/21",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/21/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/21/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/21/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/21",
|
||||
"id": 928742395,
|
||||
"node_id": "MDU6SXNzdWU5Mjg3NDIzOTU=",
|
||||
"number": 21,
|
||||
"title": "Support `copy_file_range`",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-24T00:29:41Z",
|
||||
"updated_at": "2021-07-03T22:22:01Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": null,
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/20",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/20/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/20/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/20/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/20",
|
||||
"id": 928568009,
|
||||
"node_id": "MDU6SXNzdWU5Mjg1NjgwMDk=",
|
||||
"number": 20,
|
||||
"title": "Alternative models",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3095291610,
|
||||
"node_id": "MDU6TGFiZWwzMDk1MjkxNjEw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/research",
|
||||
"name": "research",
|
||||
"color": "6B832F",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-23T19:21:20Z",
|
||||
"updated_at": "2021-07-04T23:47:01Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Lazy loading (scan but don't parse into structures until demanded).\r\n\r\nAhead-of-time mappings (literally build/unbuild FS).\r\n\r\nUse 9p, per [Jay McCarthy](http://www.weaselhat.com/2021/06/29/processing-semi-structured-data-in-the-unix-shell/#comment-187595). Or use the Bento FS thing?",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/19",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/19/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/19/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/19/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/19",
|
||||
"id": 928565560,
|
||||
"node_id": "MDU6SXNzdWU5Mjg1NjU1NjA=",
|
||||
"number": 19,
|
||||
"title": "Reconsider mount options",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-23T19:17:48Z",
|
||||
"updated_at": "2021-06-24T14:14:59Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "There are plenty of interesting options on https://man7.org/linux/man-pages/man8/mount.fuse3.8.html.\r\n\r\n- default_permissions\r\n- allow_other\r\n- ~~auto_unmount always on?~~ a02d674\r\n- kernel_cache",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/16",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/16/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/16/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/16/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/16",
|
||||
"id": 926721477,
|
||||
"node_id": "MDU6SXNzdWU5MjY3MjE0Nzc=",
|
||||
"number": 16,
|
||||
"title": "Speculative format detection",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
},
|
||||
{
|
||||
"id": 3126904200,
|
||||
"node_id": "MDU6TGFiZWwzMTI2OTA0MjAw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/format",
|
||||
"name": "format",
|
||||
"color": "44EE79",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-22T00:45:53Z",
|
||||
"updated_at": "2021-06-29T14:46:54Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Use a short buffer and some heuristic ([xdg-mime](https://crates.io/crates/xdg-mime) or [infer](https://crates.io/crates/infer), but really probably custom heuristics) to detect file types.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/15",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/15/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/15/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/15/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/15",
|
||||
"id": 926720138,
|
||||
"node_id": "MDU6SXNzdWU5MjY3MjAxMzg=",
|
||||
"number": 15,
|
||||
"title": "Support XML",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
},
|
||||
{
|
||||
"id": 3126904200,
|
||||
"node_id": "MDU6TGFiZWwzMTI2OTA0MjAw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/format",
|
||||
"name": "format",
|
||||
"color": "44EE79",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-22T00:41:34Z",
|
||||
"updated_at": "2021-06-29T14:46:36Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Depends on #2 in part.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/13",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/13/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/13/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/13/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/13",
|
||||
"id": 926529509,
|
||||
"node_id": "MDU6SXNzdWU5MjY1Mjk1MDk=",
|
||||
"number": 13,
|
||||
"title": "GC `unlink`ed/`rmdir`ed inodes",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-21T19:34:45Z",
|
||||
"updated_at": "2021-06-23T12:52:00Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Keep a free list, and reuse inode numbers.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/10",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/10/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/10/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/10/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/10",
|
||||
"id": 925383896,
|
||||
"node_id": "MDU6SXNzdWU5MjUzODM4OTY=",
|
||||
"number": 10,
|
||||
"title": "Use `Filesystem::destroy` instead of `Drop::drop`",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
},
|
||||
{
|
||||
"id": 3106124865,
|
||||
"node_id": "MDU6TGFiZWwzMTA2MTI0ODY1",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/upstream",
|
||||
"name": "upstream",
|
||||
"color": "28A5CF",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 1,
|
||||
"created_at": "2021-06-19T12:23:52Z",
|
||||
"updated_at": "2021-06-22T00:47:26Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Per https://github.com/cberner/fuser/issues/153#issuecomment-864348771, better to rely on the explicit contract than on the the current implementation in fuser calling `mem::drop`.",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/9",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/9/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/9/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/9/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/9",
|
||||
"id": 924150016,
|
||||
"node_id": "MDU6SXNzdWU5MjQxNTAwMTY=",
|
||||
"number": 9,
|
||||
"title": "Performance benchmarking",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3095291610,
|
||||
"node_id": "MDU6TGFiZWwzMDk1MjkxNjEw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/research",
|
||||
"name": "research",
|
||||
"color": "6B832F",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 1,
|
||||
"created_at": "2021-06-17T16:58:38Z",
|
||||
"updated_at": "2021-07-03T15:01:23Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Timing: use https://crates.io/crates/tracing-timing?\r\n\r\nMicrobenchmarks\r\n\r\n- read\r\n- write\r\n\r\nMacrobenchmarks\r\n\r\n- tasks?\r\n\r\nCompare against\r\n\r\n- FS (various hdd configs) as baseline\r\n- ramdisk as memory FS baseline\r\n- jq\r\n- js\r\n- python\r\n- native rust",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/7",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/7/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/7/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/7/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/7",
|
||||
"id": 921731087,
|
||||
"node_id": "MDU6SXNzdWU5MjE3MzEwODc=",
|
||||
"number": 7,
|
||||
"title": "Missing tests",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-15T19:34:07Z",
|
||||
"updated_at": "2021-06-22T01:10:13Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "+ [ ] `access`, `fallocate`\r\n+ [ ] multi-user stuff\r\n+ [ ] error code coverage\r\n+ [x] ~~TOML~~ 476f3a1 and 8cac6d2\r\n+ [x] ~~run testing in parallel~~ 2ec8fa6",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/2",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/2/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/2/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/2/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/2",
|
||||
"id": 921729354,
|
||||
"node_id": "MDU6SXNzdWU5MjE3MjkzNTQ=",
|
||||
"number": 2,
|
||||
"title": "Metadata support",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390726,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzI2",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/enhancement",
|
||||
"name": "enhancement",
|
||||
"color": "a2eeef",
|
||||
"default": true,
|
||||
"description": "New feature or request"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 2,
|
||||
"created_at": "2021-06-15T19:31:44Z",
|
||||
"updated_at": "2021-07-02T00:20:01Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "+ [ ] Options for naming of ListDirectory elements (prefix/suffix? format string?)\r\n+ [ ] Metadata\r\n - [ ] extensions\r\n - [ ] dotfiles\r\n - [x] ~~xattrs~~ in #30\r\n",
|
||||
"performed_via_github_app": null
|
||||
},
|
||||
{
|
||||
"url": "https://api.github.com/repos/mgree/ffs/issues/1",
|
||||
"repository_url": "https://api.github.com/repos/mgree/ffs",
|
||||
"labels_url": "https://api.github.com/repos/mgree/ffs/issues/1/labels{/name}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/ffs/issues/1/comments",
|
||||
"events_url": "https://api.github.com/repos/mgree/ffs/issues/1/events",
|
||||
"html_url": "https://github.com/mgree/ffs/issues/1",
|
||||
"id": 920859719,
|
||||
"node_id": "MDU6SXNzdWU5MjA4NTk3MTk=",
|
||||
"number": 1,
|
||||
"title": "Invalid unmount on macOS",
|
||||
"user": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"id": 3066390720,
|
||||
"node_id": "MDU6TGFiZWwzMDY2MzkwNzIw",
|
||||
"url": "https://api.github.com/repos/mgree/ffs/labels/bug",
|
||||
"name": "bug",
|
||||
"color": "d73a4a",
|
||||
"default": true,
|
||||
"description": "Something isn't working"
|
||||
}
|
||||
],
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"comments": 0,
|
||||
"created_at": "2021-06-14T23:51:13Z",
|
||||
"updated_at": "2021-06-15T19:30:59Z",
|
||||
"closed_at": null,
|
||||
"author_association": "OWNER",
|
||||
"active_lock_reason": null,
|
||||
"body": "Investigate weird unmounts on macOS, producing:\r\n\r\n```\r\nWARN fuser::mnt::fuse2: umount failed with Os { code: 22, kind: InvalidInput, message: \"Invalid argument\" }\r\n```\r\n\r\nSee [actions log](https://github.com/mgree/ffs/runs/2821652281?check_suite_focus=true#step:5:88). Linux seems fine.",
|
||||
"performed_via_github_app": null
|
||||
}
|
||||
]
|
28
bench/gh/gh_apache2.json
Normal file
28
bench/gh/gh_apache2.json
Normal file
File diff suppressed because one or more lines are too long
1876
bench/gh/gh_emoji.json
Normal file
1876
bench/gh/gh_emoji.json
Normal file
File diff suppressed because it is too large
Load Diff
1410
bench/gh/gh_events.json
Normal file
1410
bench/gh/gh_events.json
Normal file
File diff suppressed because one or more lines are too long
29
bench/gh/gh_gpl3.json
Normal file
29
bench/gh/gh_gpl3.json
Normal file
File diff suppressed because one or more lines are too long
93
bench/gh/gh_licenses.json
Normal file
93
bench/gh/gh_licenses.json
Normal file
@ -0,0 +1,93 @@
|
||||
[
|
||||
{
|
||||
"key": "agpl-3.0",
|
||||
"name": "GNU Affero General Public License v3.0",
|
||||
"spdx_id": "AGPL-3.0",
|
||||
"url": "https://api.github.com/licenses/agpl-3.0",
|
||||
"node_id": "MDc6TGljZW5zZTE="
|
||||
},
|
||||
{
|
||||
"key": "apache-2.0",
|
||||
"name": "Apache License 2.0",
|
||||
"spdx_id": "Apache-2.0",
|
||||
"url": "https://api.github.com/licenses/apache-2.0",
|
||||
"node_id": "MDc6TGljZW5zZTI="
|
||||
},
|
||||
{
|
||||
"key": "bsd-2-clause",
|
||||
"name": "BSD 2-Clause \"Simplified\" License",
|
||||
"spdx_id": "BSD-2-Clause",
|
||||
"url": "https://api.github.com/licenses/bsd-2-clause",
|
||||
"node_id": "MDc6TGljZW5zZTQ="
|
||||
},
|
||||
{
|
||||
"key": "bsd-3-clause",
|
||||
"name": "BSD 3-Clause \"New\" or \"Revised\" License",
|
||||
"spdx_id": "BSD-3-Clause",
|
||||
"url": "https://api.github.com/licenses/bsd-3-clause",
|
||||
"node_id": "MDc6TGljZW5zZTU="
|
||||
},
|
||||
{
|
||||
"key": "bsl-1.0",
|
||||
"name": "Boost Software License 1.0",
|
||||
"spdx_id": "BSL-1.0",
|
||||
"url": "https://api.github.com/licenses/bsl-1.0",
|
||||
"node_id": "MDc6TGljZW5zZTI4"
|
||||
},
|
||||
{
|
||||
"key": "cc0-1.0",
|
||||
"name": "Creative Commons Zero v1.0 Universal",
|
||||
"spdx_id": "CC0-1.0",
|
||||
"url": "https://api.github.com/licenses/cc0-1.0",
|
||||
"node_id": "MDc6TGljZW5zZTY="
|
||||
},
|
||||
{
|
||||
"key": "epl-2.0",
|
||||
"name": "Eclipse Public License 2.0",
|
||||
"spdx_id": "EPL-2.0",
|
||||
"url": "https://api.github.com/licenses/epl-2.0",
|
||||
"node_id": "MDc6TGljZW5zZTMy"
|
||||
},
|
||||
{
|
||||
"key": "gpl-2.0",
|
||||
"name": "GNU General Public License v2.0",
|
||||
"spdx_id": "GPL-2.0",
|
||||
"url": "https://api.github.com/licenses/gpl-2.0",
|
||||
"node_id": "MDc6TGljZW5zZTg="
|
||||
},
|
||||
{
|
||||
"key": "gpl-3.0",
|
||||
"name": "GNU General Public License v3.0",
|
||||
"spdx_id": "GPL-3.0",
|
||||
"url": "https://api.github.com/licenses/gpl-3.0",
|
||||
"node_id": "MDc6TGljZW5zZTk="
|
||||
},
|
||||
{
|
||||
"key": "lgpl-2.1",
|
||||
"name": "GNU Lesser General Public License v2.1",
|
||||
"spdx_id": "LGPL-2.1",
|
||||
"url": "https://api.github.com/licenses/lgpl-2.1",
|
||||
"node_id": "MDc6TGljZW5zZTEx"
|
||||
},
|
||||
{
|
||||
"key": "mit",
|
||||
"name": "MIT License",
|
||||
"spdx_id": "MIT",
|
||||
"url": "https://api.github.com/licenses/mit",
|
||||
"node_id": "MDc6TGljZW5zZTEz"
|
||||
},
|
||||
{
|
||||
"key": "mpl-2.0",
|
||||
"name": "Mozilla Public License 2.0",
|
||||
"spdx_id": "MPL-2.0",
|
||||
"url": "https://api.github.com/licenses/mpl-2.0",
|
||||
"node_id": "MDc6TGljZW5zZTE0"
|
||||
},
|
||||
{
|
||||
"key": "unlicense",
|
||||
"name": "The Unlicense",
|
||||
"spdx_id": "Unlicense",
|
||||
"url": "https://api.github.com/licenses/unlicense",
|
||||
"node_id": "MDc6TGljZW5zZTE1"
|
||||
}
|
||||
]
|
3546
bench/gh/gh_mgree_events.json
Normal file
3546
bench/gh/gh_mgree_events.json
Normal file
File diff suppressed because it is too large
Load Diff
103
bench/gh/kmt.json
Normal file
103
bench/gh/kmt.json
Normal file
@ -0,0 +1,103 @@
|
||||
{
|
||||
"id": 149648258,
|
||||
"node_id": "MDEwOlJlcG9zaXRvcnkxNDk2NDgyNTg=",
|
||||
"name": "kmt",
|
||||
"full_name": "mgree/kmt",
|
||||
"private": false,
|
||||
"owner": {
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"html_url": "https://github.com/mgree/kmt",
|
||||
"description": "Kleene algebra modulo theories",
|
||||
"fork": false,
|
||||
"url": "https://api.github.com/repos/mgree/kmt",
|
||||
"forks_url": "https://api.github.com/repos/mgree/kmt/forks",
|
||||
"keys_url": "https://api.github.com/repos/mgree/kmt/keys{/key_id}",
|
||||
"collaborators_url": "https://api.github.com/repos/mgree/kmt/collaborators{/collaborator}",
|
||||
"teams_url": "https://api.github.com/repos/mgree/kmt/teams",
|
||||
"hooks_url": "https://api.github.com/repos/mgree/kmt/hooks",
|
||||
"issue_events_url": "https://api.github.com/repos/mgree/kmt/issues/events{/number}",
|
||||
"events_url": "https://api.github.com/repos/mgree/kmt/events",
|
||||
"assignees_url": "https://api.github.com/repos/mgree/kmt/assignees{/user}",
|
||||
"branches_url": "https://api.github.com/repos/mgree/kmt/branches{/branch}",
|
||||
"tags_url": "https://api.github.com/repos/mgree/kmt/tags",
|
||||
"blobs_url": "https://api.github.com/repos/mgree/kmt/git/blobs{/sha}",
|
||||
"git_tags_url": "https://api.github.com/repos/mgree/kmt/git/tags{/sha}",
|
||||
"git_refs_url": "https://api.github.com/repos/mgree/kmt/git/refs{/sha}",
|
||||
"trees_url": "https://api.github.com/repos/mgree/kmt/git/trees{/sha}",
|
||||
"statuses_url": "https://api.github.com/repos/mgree/kmt/statuses/{sha}",
|
||||
"languages_url": "https://api.github.com/repos/mgree/kmt/languages",
|
||||
"stargazers_url": "https://api.github.com/repos/mgree/kmt/stargazers",
|
||||
"contributors_url": "https://api.github.com/repos/mgree/kmt/contributors",
|
||||
"subscribers_url": "https://api.github.com/repos/mgree/kmt/subscribers",
|
||||
"subscription_url": "https://api.github.com/repos/mgree/kmt/subscription",
|
||||
"commits_url": "https://api.github.com/repos/mgree/kmt/commits{/sha}",
|
||||
"git_commits_url": "https://api.github.com/repos/mgree/kmt/git/commits{/sha}",
|
||||
"comments_url": "https://api.github.com/repos/mgree/kmt/comments{/number}",
|
||||
"issue_comment_url": "https://api.github.com/repos/mgree/kmt/issues/comments{/number}",
|
||||
"contents_url": "https://api.github.com/repos/mgree/kmt/contents/{+path}",
|
||||
"compare_url": "https://api.github.com/repos/mgree/kmt/compare/{base}...{head}",
|
||||
"merges_url": "https://api.github.com/repos/mgree/kmt/merges",
|
||||
"archive_url": "https://api.github.com/repos/mgree/kmt/{archive_format}{/ref}",
|
||||
"downloads_url": "https://api.github.com/repos/mgree/kmt/downloads",
|
||||
"issues_url": "https://api.github.com/repos/mgree/kmt/issues{/number}",
|
||||
"pulls_url": "https://api.github.com/repos/mgree/kmt/pulls{/number}",
|
||||
"milestones_url": "https://api.github.com/repos/mgree/kmt/milestones{/number}",
|
||||
"notifications_url": "https://api.github.com/repos/mgree/kmt/notifications{?since,all,participating}",
|
||||
"labels_url": "https://api.github.com/repos/mgree/kmt/labels{/name}",
|
||||
"releases_url": "https://api.github.com/repos/mgree/kmt/releases{/id}",
|
||||
"deployments_url": "https://api.github.com/repos/mgree/kmt/deployments",
|
||||
"created_at": "2018-09-20T17:48:53Z",
|
||||
"updated_at": "2021-07-22T08:12:29Z",
|
||||
"pushed_at": "2020-04-06T18:19:54Z",
|
||||
"git_url": "git://github.com/mgree/kmt.git",
|
||||
"ssh_url": "git@github.com:mgree/kmt.git",
|
||||
"clone_url": "https://github.com/mgree/kmt.git",
|
||||
"svn_url": "https://github.com/mgree/kmt",
|
||||
"homepage": null,
|
||||
"size": 207,
|
||||
"stargazers_count": 15,
|
||||
"watchers_count": 15,
|
||||
"language": "OCaml",
|
||||
"has_issues": true,
|
||||
"has_projects": true,
|
||||
"has_downloads": true,
|
||||
"has_wiki": true,
|
||||
"has_pages": false,
|
||||
"forks_count": 1,
|
||||
"mirror_url": null,
|
||||
"archived": false,
|
||||
"disabled": false,
|
||||
"open_issues_count": 0,
|
||||
"license": {
|
||||
"key": "mit",
|
||||
"name": "MIT License",
|
||||
"spdx_id": "MIT",
|
||||
"url": "https://api.github.com/licenses/mit",
|
||||
"node_id": "MDc6TGljZW5zZTEz"
|
||||
},
|
||||
"forks": 1,
|
||||
"open_issues": 0,
|
||||
"watchers": 15,
|
||||
"default_branch": "master",
|
||||
"temp_clone_token": null,
|
||||
"network_count": 1,
|
||||
"subscribers_count": 2
|
||||
}
|
34
bench/gh/mgree.json
Normal file
34
bench/gh/mgree.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"login": "mgree",
|
||||
"id": 505088,
|
||||
"node_id": "MDQ6VXNlcjUwNTA4OA==",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/505088?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/mgree",
|
||||
"html_url": "https://github.com/mgree",
|
||||
"followers_url": "https://api.github.com/users/mgree/followers",
|
||||
"following_url": "https://api.github.com/users/mgree/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/mgree/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/mgree/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/mgree/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/mgree/orgs",
|
||||
"repos_url": "https://api.github.com/users/mgree/repos",
|
||||
"events_url": "https://api.github.com/users/mgree/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/mgree/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false,
|
||||
"name": "Michael Greenberg",
|
||||
"company": "Stevens Institute of Technology",
|
||||
"blog": "https://mgree.github.io",
|
||||
"location": "Hoboken, NJ",
|
||||
"email": null,
|
||||
"hireable": null,
|
||||
"bio": null,
|
||||
"twitter_username": "mgrnbrg",
|
||||
"public_repos": 52,
|
||||
"public_gists": 0,
|
||||
"followers": 38,
|
||||
"following": 7,
|
||||
"created_at": "2010-12-01T15:00:44Z",
|
||||
"updated_at": "2021-07-22T14:27:18Z"
|
||||
}
|
2930
bench/gh/mgree_repos.json
Normal file
2930
bench/gh/mgree_repos.json
Normal file
File diff suppressed because it is too large
Load Diff
1
bench/gov.uk/bank-holidays.json
Normal file
1
bench/gov.uk/bank-holidays.json
Normal file
File diff suppressed because one or more lines are too long
22
bench/json.org/json_eg1.json
Normal file
22
bench/json.org/json_eg1.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"glossary": {
|
||||
"title": "example glossary",
|
||||
"GlossDiv": {
|
||||
"title": "S",
|
||||
"GlossList": {
|
||||
"GlossEntry": {
|
||||
"ID": "SGML",
|
||||
"SortAs": "SGML",
|
||||
"GlossTerm": "Standard Generalized Markup Language",
|
||||
"Acronym": "SGML",
|
||||
"Abbrev": "ISO 8879:1986",
|
||||
"GlossDef": {
|
||||
"para": "A meta-markup language, used to create markup languages such as DocBook.",
|
||||
"GlossSeeAlso": ["GML", "XML"]
|
||||
},
|
||||
"GlossSee": "markup"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
11
bench/json.org/json_eg2.json
Normal file
11
bench/json.org/json_eg2.json
Normal file
@ -0,0 +1,11 @@
|
||||
{"menu": {
|
||||
"id": "file",
|
||||
"value": "File",
|
||||
"popup": {
|
||||
"menuitem": [
|
||||
{"value": "New", "onclick": "CreateNewDoc()"},
|
||||
{"value": "Open", "onclick": "OpenDoc()"},
|
||||
{"value": "Close", "onclick": "CloseDoc()"}
|
||||
]
|
||||
}
|
||||
}}
|
26
bench/json.org/json_eg3.json
Normal file
26
bench/json.org/json_eg3.json
Normal file
@ -0,0 +1,26 @@
|
||||
{"widget": {
|
||||
"debug": "on",
|
||||
"window": {
|
||||
"title": "Sample Konfabulator Widget",
|
||||
"name": "main_window",
|
||||
"width": 500,
|
||||
"height": 500
|
||||
},
|
||||
"image": {
|
||||
"src": "Images/Sun.png",
|
||||
"name": "sun1",
|
||||
"hOffset": 250,
|
||||
"vOffset": 250,
|
||||
"alignment": "center"
|
||||
},
|
||||
"text": {
|
||||
"data": "Click Here",
|
||||
"size": 36,
|
||||
"style": "bold",
|
||||
"name": "text1",
|
||||
"hOffset": 250,
|
||||
"vOffset": 100,
|
||||
"alignment": "center",
|
||||
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
|
||||
}
|
||||
}}
|
88
bench/json.org/json_eg4.json
Normal file
88
bench/json.org/json_eg4.json
Normal file
@ -0,0 +1,88 @@
|
||||
{"web-app": {
|
||||
"servlet": [
|
||||
{
|
||||
"servlet-name": "cofaxCDS",
|
||||
"servlet-class": "org.cofax.cds.CDSServlet",
|
||||
"init-param": {
|
||||
"configGlossary:installationAt": "Philadelphia, PA",
|
||||
"configGlossary:adminEmail": "ksm@pobox.com",
|
||||
"configGlossary:poweredBy": "Cofax",
|
||||
"configGlossary:poweredByIcon": "/images/cofax.gif",
|
||||
"configGlossary:staticPath": "/content/static",
|
||||
"templateProcessorClass": "org.cofax.WysiwygTemplate",
|
||||
"templateLoaderClass": "org.cofax.FilesTemplateLoader",
|
||||
"templatePath": "templates",
|
||||
"templateOverridePath": "",
|
||||
"defaultListTemplate": "listTemplate.htm",
|
||||
"defaultFileTemplate": "articleTemplate.htm",
|
||||
"useJSP": false,
|
||||
"jspListTemplate": "listTemplate.jsp",
|
||||
"jspFileTemplate": "articleTemplate.jsp",
|
||||
"cachePackageTagsTrack": 200,
|
||||
"cachePackageTagsStore": 200,
|
||||
"cachePackageTagsRefresh": 60,
|
||||
"cacheTemplatesTrack": 100,
|
||||
"cacheTemplatesStore": 50,
|
||||
"cacheTemplatesRefresh": 15,
|
||||
"cachePagesTrack": 200,
|
||||
"cachePagesStore": 100,
|
||||
"cachePagesRefresh": 10,
|
||||
"cachePagesDirtyRead": 10,
|
||||
"searchEngineListTemplate": "forSearchEnginesList.htm",
|
||||
"searchEngineFileTemplate": "forSearchEngines.htm",
|
||||
"searchEngineRobotsDb": "WEB-INF/robots.db",
|
||||
"useDataStore": true,
|
||||
"dataStoreClass": "org.cofax.SqlDataStore",
|
||||
"redirectionClass": "org.cofax.SqlRedirection",
|
||||
"dataStoreName": "cofax",
|
||||
"dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
|
||||
"dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
|
||||
"dataStoreUser": "sa",
|
||||
"dataStorePassword": "dataStoreTestQuery",
|
||||
"dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
|
||||
"dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
|
||||
"dataStoreInitConns": 10,
|
||||
"dataStoreMaxConns": 100,
|
||||
"dataStoreConnUsageLimit": 100,
|
||||
"dataStoreLogLevel": "debug",
|
||||
"maxUrlLength": 500}},
|
||||
{
|
||||
"servlet-name": "cofaxEmail",
|
||||
"servlet-class": "org.cofax.cds.EmailServlet",
|
||||
"init-param": {
|
||||
"mailHost": "mail1",
|
||||
"mailHostOverride": "mail2"}},
|
||||
{
|
||||
"servlet-name": "cofaxAdmin",
|
||||
"servlet-class": "org.cofax.cds.AdminServlet"},
|
||||
|
||||
{
|
||||
"servlet-name": "fileServlet",
|
||||
"servlet-class": "org.cofax.cds.FileServlet"},
|
||||
{
|
||||
"servlet-name": "cofaxTools",
|
||||
"servlet-class": "org.cofax.cms.CofaxToolsServlet",
|
||||
"init-param": {
|
||||
"templatePath": "toolstemplates/",
|
||||
"log": 1,
|
||||
"logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
|
||||
"logMaxSize": "",
|
||||
"dataLog": 1,
|
||||
"dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
|
||||
"dataLogMaxSize": "",
|
||||
"removePageCache": "/content/admin/remove?cache=pages&id=",
|
||||
"removeTemplateCache": "/content/admin/remove?cache=templates&id=",
|
||||
"fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
|
||||
"lookInContext": 1,
|
||||
"adminGroupID": 4,
|
||||
"betaServer": true}}],
|
||||
"servlet-mapping": {
|
||||
"cofaxCDS": "/",
|
||||
"cofaxEmail": "/cofaxutil/aemail/*",
|
||||
"cofaxAdmin": "/admin/*",
|
||||
"fileServlet": "/static/*",
|
||||
"cofaxTools": "/tools/*"},
|
||||
|
||||
"taglib": {
|
||||
"taglib-uri": "cofax.tld",
|
||||
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
|
27
bench/json.org/json_eg5.json
Normal file
27
bench/json.org/json_eg5.json
Normal file
@ -0,0 +1,27 @@
|
||||
{"menu": {
|
||||
"header": "SVG Viewer",
|
||||
"items": [
|
||||
{"id": "Open"},
|
||||
{"id": "OpenNew", "label": "Open New"},
|
||||
null,
|
||||
{"id": "ZoomIn", "label": "Zoom In"},
|
||||
{"id": "ZoomOut", "label": "Zoom Out"},
|
||||
{"id": "OriginalView", "label": "Original View"},
|
||||
null,
|
||||
{"id": "Quality"},
|
||||
{"id": "Pause"},
|
||||
{"id": "Mute"},
|
||||
null,
|
||||
{"id": "Find", "label": "Find..."},
|
||||
{"id": "FindAgain", "label": "Find Again"},
|
||||
{"id": "Copy"},
|
||||
{"id": "CopyAgain", "label": "Copy Again"},
|
||||
{"id": "CopySVG", "label": "Copy SVG"},
|
||||
{"id": "ViewSVG", "label": "View SVG"},
|
||||
{"id": "ViewSource", "label": "View Source"},
|
||||
{"id": "SaveAs", "label": "Save As"},
|
||||
null,
|
||||
{"id": "Help"},
|
||||
{"id": "About", "label": "About Adobe CVG Viewer..."}
|
||||
]
|
||||
}}
|
25
bench/mk_micro.sh
Executable file
25
bench/mk_micro.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -d micro ] && rm -r micro
|
||||
mkdir micro
|
||||
for size in 1 2 4 8 16 32 64 128 256
|
||||
do
|
||||
for approach in deep wide
|
||||
do
|
||||
# if [ "$approach" = "deep" ] && [ "$size" -ge 128 ]
|
||||
# then
|
||||
# continue
|
||||
# fi
|
||||
|
||||
for kind in list named
|
||||
do
|
||||
file="micro/${kind}_${approach}_${size}.json"
|
||||
../utils/synth_json $kind $approach $size >$file 2>/dev/null
|
||||
if [ $? -ne 0 ] || ! [ -s $file ]
|
||||
then
|
||||
echo "Couldn't build $file."
|
||||
rm $file
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
1
bench/ncdc/ncdc_07030.json
Normal file
1
bench/ncdc/ncdc_07030.json
Normal file
@ -0,0 +1 @@
|
||||
{"mindate":"1995-04-26","maxdate":"2021-07-25","name":"Hoboken, NJ 07030","datacoverage":0.95,"id":"ZIP:07030"}
|
1
bench/ncdc/ncdc_07030_stations.json
Normal file
1
bench/ncdc/ncdc_07030_stations.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":7,"limit":25}},"results":[{"elevation":519.2,"mindate":"1995-05-09","maxdate":"2021-07-25","latitude":42.199694,"name":"BINGHAMTON, NY US","datacoverage":0.95,"id":"NEXRAD:KBGM","elevationUnit":"METERS","longitude":-75.984722},{"elevation":70.1,"mindate":"1995-04-26","maxdate":"2021-07-25","latitude":39.947089,"name":"PHILADELPHIA, NJ US","datacoverage":0.95,"id":"NEXRAD:KDIX","elevationUnit":"METERS","longitude":-74.410731},{"elevation":589.7,"mindate":"1995-05-09","maxdate":"2021-07-25","latitude":42.586556,"name":"ALBANY, NY US","datacoverage":0.95,"id":"NEXRAD:KENX","elevationUnit":"METERS","longitude":-74.064083},{"elevation":60.6,"mindate":"1995-04-27","maxdate":"2021-07-25","latitude":40.865528,"name":"NEW YORK CITY, NY US","datacoverage":0.95,"id":"NEXRAD:KOKX","elevationUnit":"METERS","longitude":-72.863917},{"elevation":41.1,"mindate":"2008-12-09","maxdate":"2021-07-25","latitude":40.593056,"name":"NEWARK, NJ US","datacoverage":0.95,"id":"NEXRAD:TEWR","elevationUnit":"METERS","longitude":-74.27},{"elevation":34.1,"mindate":"2009-02-19","maxdate":"2021-07-25","latitude":40.588889,"name":"NEW YORK CITY JFK, NY US","datacoverage":0.95,"id":"NEXRAD:TJFK","elevationUnit":"METERS","longitude":-73.881111},{"elevation":46.9,"mindate":"2009-03-25","maxdate":"2021-07-25","latitude":39.948889,"name":"PHILADELPHIA, NJ US","datacoverage":0.95,"id":"NEXRAD:TPHL","elevationUnit":"METERS","longitude":-75.068889}]}
|
1
bench/ncdc/ncdc_datacategories.json
Normal file
1
bench/ncdc/ncdc_datacategories.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":42,"limit":25}},"results":[{"name":"Annual Agricultural","id":"ANNAGR"},{"name":"Annual Degree Days","id":"ANNDD"},{"name":"Annual Precipitation","id":"ANNPRCP"},{"name":"Annual Temperature","id":"ANNTEMP"},{"name":"Autumn Agricultural","id":"AUAGR"},{"name":"Autumn Degree Days","id":"AUDD"},{"name":"Autumn Precipitation","id":"AUPRCP"},{"name":"Autumn Temperature","id":"AUTEMP"},{"name":"Computed","id":"COMP"},{"name":"Computed Agricultural","id":"COMPAGR"},{"name":"Degree Days","id":"DD"},{"name":"Dual-Pol Moments","id":"DUALPOLMOMENT"},{"name":"Echo Tops","id":"ECHOTOP"},{"name":"Evaporation","id":"EVAP"},{"name":"Hydrometeor Type","id":"HYDROMETEOR"},{"name":"Land","id":"LAND"},{"name":"Miscellany","id":"MISC"},{"name":"Other","id":"OTHER"},{"name":"Overlay","id":"OVERLAY"},{"name":"Precipitation","id":"PRCP"},{"name":"Pressure","id":"PRES"},{"name":"Reflectivity","id":"REFLECTIVITY"},{"name":"Sky cover & clouds","id":"SKY"},{"name":"Spring Agricultural","id":"SPAGR"},{"name":"Spring Degree Days","id":"SPDD"}]}
|
1
bench/ncdc/ncdc_datasets.json
Normal file
1
bench/ncdc/ncdc_datasets.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":11,"limit":25}},"results":[{"uid":"gov.noaa.ncdc:C00861","mindate":"1763-01-01","maxdate":"2021-07-25","name":"Daily Summaries","datacoverage":1,"id":"GHCND"},{"uid":"gov.noaa.ncdc:C00946","mindate":"1763-01-01","maxdate":"2021-07-01","name":"Global Summary of the Month","datacoverage":1,"id":"GSOM"},{"uid":"gov.noaa.ncdc:C00947","mindate":"1763-01-01","maxdate":"2021-01-01","name":"Global Summary of the Year","datacoverage":1,"id":"GSOY"},{"uid":"gov.noaa.ncdc:C00345","mindate":"1991-06-05","maxdate":"2021-07-25","name":"Weather Radar (Level II)","datacoverage":0.95,"id":"NEXRAD2"},{"uid":"gov.noaa.ncdc:C00708","mindate":"1994-05-20","maxdate":"2021-07-24","name":"Weather Radar (Level III)","datacoverage":0.95,"id":"NEXRAD3"},{"uid":"gov.noaa.ncdc:C00821","mindate":"2010-01-01","maxdate":"2010-01-01","name":"Normals Annual/Seasonal","datacoverage":1,"id":"NORMAL_ANN"},{"uid":"gov.noaa.ncdc:C00823","mindate":"2010-01-01","maxdate":"2010-12-31","name":"Normals Daily","datacoverage":1,"id":"NORMAL_DLY"},{"uid":"gov.noaa.ncdc:C00824","mindate":"2010-01-01","maxdate":"2010-12-31","name":"Normals Hourly","datacoverage":1,"id":"NORMAL_HLY"},{"uid":"gov.noaa.ncdc:C00822","mindate":"2010-01-01","maxdate":"2010-12-01","name":"Normals Monthly","datacoverage":1,"id":"NORMAL_MLY"},{"uid":"gov.noaa.ncdc:C00505","mindate":"1970-05-12","maxdate":"2014-01-01","name":"Precipitation 15 Minute","datacoverage":0.25,"id":"PRECIP_15"},{"uid":"gov.noaa.ncdc:C00313","mindate":"1900-01-01","maxdate":"2014-01-01","name":"Precipitation Hourly","datacoverage":1,"id":"PRECIP_HLY"}]}
|
1
bench/ncdc/ncdc_datatypes.json
Normal file
1
bench/ncdc/ncdc_datatypes.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":1565,"limit":25}},"results":[{"mindate":"1994-03-19","maxdate":"1996-05-28","name":"Average cloudiness midnight to midnight from 30-second ceilometer data","datacoverage":1,"id":"ACMC"},{"mindate":"1965-01-01","maxdate":"2005-12-31","name":"Average cloudiness midnight to midnight from manual observations","datacoverage":1,"id":"ACMH"},{"mindate":"1994-02-01","maxdate":"1996-05-28","name":"Average cloudiness sunrise to sunset from 30-second ceilometer data","datacoverage":1,"id":"ACSC"},{"mindate":"1965-01-01","maxdate":"2005-12-31","name":"Average cloudiness sunrise to sunset from manual observations","datacoverage":1,"id":"ACSH"},{"mindate":"1991-06-05","maxdate":"2021-07-25","name":"Base Data","datacoverage":0.95,"id":"ALL"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 45F","datacoverage":1,"id":"ANN-CLDD-BASE45"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 50F","datacoverage":1,"id":"ANN-CLDD-BASE50"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 55F","datacoverage":1,"id":"ANN-CLDD-BASE55"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 57F","datacoverage":1,"id":"ANN-CLDD-BASE57"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 60F","datacoverage":1,"id":"ANN-CLDD-BASE60"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 70F","datacoverage":1,"id":"ANN-CLDD-BASE70"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 72F","datacoverage":1,"id":"ANN-CLDD-BASE72"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual cooling degree days with base 65F","datacoverage":1,"id":"ANN-CLDD-NORMAL"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual diurnal temperature range","datacoverage":1,"id":"ANN-DUTR-NORMAL"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 40F","datacoverage":1,"id":"ANN-GRDD-BASE40"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 45F","datacoverage":1,"id":"ANN-GRDD-BASE45"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 50F","datacoverage":1,"id":"ANN-GRDD-BASE50"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 55F","datacoverage":1,"id":"ANN-GRDD-BASE55"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 57F","datacoverage":1,"id":"ANN-GRDD-BASE57"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 60F","datacoverage":1,"id":"ANN-GRDD-BASE60"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 65F","datacoverage":1,"id":"ANN-GRDD-BASE65"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 70F","datacoverage":1,"id":"ANN-GRDD-BASE70"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with base 72F","datacoverage":1,"id":"ANN-GRDD-BASE72"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with truncated bases 48F and 86F","datacoverage":1,"id":"ANN-GRDD-TB4886"},{"mindate":"2010-01-01","maxdate":"2010-01-01","name":"Long-term averages of annual growing degree days with truncated bases 50F and 86F","datacoverage":1,"id":"ANN-GRDD-TB5086"}]}
|
1
bench/ncdc/ncdc_ewr_station.json
Normal file
1
bench/ncdc/ncdc_ewr_station.json
Normal file
@ -0,0 +1 @@
|
||||
{"elevation":41.1,"mindate":"2008-12-09","maxdate":"2021-07-25","latitude":40.593056,"name":"NEWARK, NJ US","datacoverage":0.95,"id":"NEXRAD:TEWR","elevationUnit":"METERS","longitude":-74.27}
|
1
bench/ncdc/ncdc_gsom_sample.json
Normal file
1
bench/ncdc/ncdc_gsom_sample.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":156,"limit":25}},"results":[{"date":"2009-05-01T00:00:00","datatype":"DP01","station":"GHCND:USC00010008","attributes":",0","value":14},{"date":"2009-05-01T00:00:00","datatype":"DP10","station":"GHCND:USC00010008","attributes":",0","value":14},{"date":"2009-05-01T00:00:00","datatype":"DP1X","station":"GHCND:USC00010008","attributes":",0","value":3},{"date":"2009-05-01T00:00:00","datatype":"DSND","station":"GHCND:USC00010008","attributes":"1,0","value":0},{"date":"2009-05-01T00:00:00","datatype":"DSNW","station":"GHCND:USC00010008","attributes":",0","value":0},{"date":"2009-05-01T00:00:00","datatype":"DYSD","station":"GHCND:USC00010008","attributes":"+,1,0","value":20090531},{"date":"2009-05-01T00:00:00","datatype":"DYSN","station":"GHCND:USC00010008","attributes":"+,,0","value":20090531},{"date":"2009-05-01T00:00:00","datatype":"DYXP","station":"GHCND:USC00010008","attributes":",,0","value":20090516},{"date":"2009-05-01T00:00:00","datatype":"EMSD","station":"GHCND:USC00010008","attributes":"1,,0,31,+","value":0.0},{"date":"2009-05-01T00:00:00","datatype":"EMSN","station":"GHCND:USC00010008","attributes":",,0,31,+","value":0.0},{"date":"2009-05-01T00:00:00","datatype":"EMXP","station":"GHCND:USC00010008","attributes":",,0,16,","value":1.43},{"date":"2009-05-01T00:00:00","datatype":"PRCP","station":"GHCND:USC00010008","attributes":",,,0","value":8.24},{"date":"2009-05-01T00:00:00","datatype":"SNOW","station":"GHCND:USC00010008","attributes":",,,0","value":0.0},{"date":"2009-06-01T00:00:00","datatype":"DP01","station":"GHCND:USC00010008","attributes":",0","value":3},{"date":"2009-06-01T00:00:00","datatype":"DP10","station":"GHCND:USC00010008","attributes":",0","value":3},{"date":"2009-06-01T00:00:00","datatype":"DP1X","station":"GHCND:USC00010008","attributes":",0","value":3},{"date":"2009-06-01T00:00:00","datatype":"DSND","station":"GHCND:USC00010008","attributes":",0","value":0},{"date":"2009-06-01T00:00:00","datatype":"DSNW","station":"GHCND:USC00010008","attributes":",0","value":0},{"date":"2009-06-01T00:00:00","datatype":"DYSD","station":"GHCND:USC00010008","attributes":"+,,0","value":20090630},{"date":"2009-06-01T00:00:00","datatype":"DYSN","station":"GHCND:USC00010008","attributes":"+,,0","value":20090630},{"date":"2009-06-01T00:00:00","datatype":"DYXP","station":"GHCND:USC00010008","attributes":",,0","value":20090615},{"date":"2009-06-01T00:00:00","datatype":"EMSD","station":"GHCND:USC00010008","attributes":",,0,30,+","value":0.0},{"date":"2009-06-01T00:00:00","datatype":"EMSN","station":"GHCND:USC00010008","attributes":",,0,30,+","value":0.0},{"date":"2009-06-01T00:00:00","datatype":"EMXP","station":"GHCND:USC00010008","attributes":",,0,15,","value":2.0},{"date":"2009-06-01T00:00:00","datatype":"PRCP","station":"GHCND:USC00010008","attributes":",,,0","value":4.43}]}
|
1
bench/ncdc/ncdc_locationcategories.json
Normal file
1
bench/ncdc/ncdc_locationcategories.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":12,"limit":25}},"results":[{"name":"City","id":"CITY"},{"name":"Climate Division","id":"CLIM_DIV"},{"name":"Climate Region","id":"CLIM_REG"},{"name":"Country","id":"CNTRY"},{"name":"County","id":"CNTY"},{"name":"Hydrologic Accounting Unit","id":"HYD_ACC"},{"name":"Hydrologic Cataloging Unit","id":"HYD_CAT"},{"name":"Hydrologic Region","id":"HYD_REG"},{"name":"Hydrologic Subregion","id":"HYD_SUB"},{"name":"State","id":"ST"},{"name":"US Territory","id":"US_TERR"},{"name":"Zip Code","id":"ZIP"}]}
|
1
bench/ncdc/ncdc_locations.json
Normal file
1
bench/ncdc/ncdc_locations.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":38862,"limit":25}},"results":[{"mindate":"1983-01-01","maxdate":"2021-07-24","name":"Abu Dhabi, AE","datacoverage":0.9977,"id":"CITY:AE000001"},{"mindate":"1944-03-01","maxdate":"2021-07-24","name":"Ajman, AE","datacoverage":0.9991,"id":"CITY:AE000002"},{"mindate":"1944-03-01","maxdate":"2021-07-24","name":"Dubai, AE","datacoverage":0.9991,"id":"CITY:AE000003"},{"mindate":"1944-03-01","maxdate":"2021-07-24","name":"Sharjah, AE","datacoverage":0.9991,"id":"CITY:AE000006"},{"mindate":"1966-03-02","maxdate":"2021-07-24","name":"Kabul, AF","datacoverage":0.9969,"id":"CITY:AF000007"},{"mindate":"1973-01-02","maxdate":"2020-12-31","name":"Kandahar, AF","datacoverage":1,"id":"CITY:AF000008"},{"mindate":"1877-04-01","maxdate":"2021-07-24","name":"Algiers, AG","datacoverage":1,"id":"CITY:AG000001"},{"mindate":"1909-11-01","maxdate":"2021-07-24","name":"Annaba, AG","datacoverage":1,"id":"CITY:AG000002"},{"mindate":"1973-04-01","maxdate":"2021-07-24","name":"Batna, AG","datacoverage":1,"id":"CITY:AG000003"},{"mindate":"1957-01-01","maxdate":"2021-07-24","name":"Bechar, AG","datacoverage":1,"id":"CITY:AG000004"},{"mindate":"1909-11-01","maxdate":"2021-07-24","name":"Bejaia, AG","datacoverage":1,"id":"CITY:AG000005"},{"mindate":"1880-05-01","maxdate":"2021-07-24","name":"Constantine, AG","datacoverage":1,"id":"CITY:AG000006"},{"mindate":"1995-10-01","maxdate":"2021-07-24","name":"Guelma, AG","datacoverage":1,"id":"CITY:AG000007"},{"mindate":"1888-01-01","maxdate":"2021-07-24","name":"Laghouat, AG","datacoverage":1,"id":"CITY:AG000008"},{"mindate":"1995-10-01","maxdate":"2021-07-24","name":"Medea, AG","datacoverage":0.9904,"id":"CITY:AG000009"},{"mindate":"1976-04-01","maxdate":"2021-07-24","name":"Mostaganem, AG","datacoverage":1,"id":"CITY:AG000010"},{"mindate":"1957-01-01","maxdate":"2021-07-24","name":"Oran, AG","datacoverage":1,"id":"CITY:AG000011"},{"mindate":"1985-02-01","maxdate":"2021-07-24","name":"Oum el Bouaghi, AG","datacoverage":1,"id":"CITY:AG000012"},{"mindate":"1981-01-01","maxdate":"2021-07-24","name":"Saida, AG","datacoverage":1,"id":"CITY:AG000013"},{"mindate":"1995-10-01","maxdate":"2021-07-24","name":"Sidi-Bel-Abbes, AG","datacoverage":0.9995,"id":"CITY:AG000014"},{"mindate":"1957-12-31","maxdate":"2021-07-24","name":"Skikda, AG","datacoverage":0.9993,"id":"CITY:AG000015"},{"mindate":"1940-01-01","maxdate":"2014-02-01","name":"Tamanrasset, AG","datacoverage":0.9973,"id":"CITY:AG000016"},{"mindate":"1981-01-01","maxdate":"2021-07-24","name":"Tlemcen, AG","datacoverage":1,"id":"CITY:AG000017"},{"mindate":"1881-07-01","maxdate":"1992-01-31","name":"Baku, AJ","datacoverage":0.991,"id":"CITY:AJ000001"},{"mindate":"1925-09-01","maxdate":"1991-12-31","name":"Naxcivian, AJ","datacoverage":1,"id":"CITY:AJ000002"}]}
|
1
bench/ncdc/ncdc_stations_big.json
Normal file
1
bench/ncdc/ncdc_stations_big.json
Normal file
File diff suppressed because one or more lines are too long
1
bench/ncdc/ncdc_zips.json
Normal file
1
bench/ncdc/ncdc_zips.json
Normal file
@ -0,0 +1 @@
|
||||
{"metadata":{"resultset":{"offset":1,"count":30415,"limit":25}},"results":[{"mindate":"1995-05-11","maxdate":"2021-07-25","name":"Zwolle, LA 71486","datacoverage":0.95,"id":"ZIP:71486"},{"mindate":"1995-04-13","maxdate":"2021-07-25","name":"Zwingle, IA 52079","datacoverage":0.95,"id":"ZIP:52079"},{"mindate":"1995-05-04","maxdate":"2021-07-25","name":"Zuni, VA 23898","datacoverage":0.95,"id":"ZIP:23898"},{"mindate":"1908-06-01","maxdate":"2021-07-25","name":"Zuni, NM 87327","datacoverage":1,"id":"ZIP:87327"},{"mindate":"1894-12-15","maxdate":"2021-07-25","name":"Zumbrota, MN 55992","datacoverage":1,"id":"ZIP:55992"},{"mindate":"1948-12-01","maxdate":"2021-07-25","name":"Zumbro Falls, MN 55991","datacoverage":1,"id":"ZIP:55991"},{"mindate":"1913-12-08","maxdate":"2021-07-25","name":"Zortman, MT 59546","datacoverage":1,"id":"ZIP:59546"},{"mindate":"1994-03-30","maxdate":"2021-07-25","name":"Zolfo Springs, FL 33890","datacoverage":1,"id":"ZIP:33890"},{"mindate":"1995-05-09","maxdate":"2021-07-25","name":"Zoe, KY 41397","datacoverage":0.95,"id":"ZIP:41397"},{"mindate":"1949-01-01","maxdate":"2021-07-25","name":"Zirconia, NC 28790","datacoverage":1,"id":"ZIP:28790"},{"mindate":"1948-01-01","maxdate":"2021-07-25","name":"Zionville, NC 28698","datacoverage":1,"id":"ZIP:28698"},{"mindate":"1950-10-17","maxdate":"2021-07-25","name":"Zionsville, PA 18092","datacoverage":0.9997,"id":"ZIP:18092"},{"mindate":"1957-12-01","maxdate":"2021-07-25","name":"Zionsville, IN 46077","datacoverage":1,"id":"ZIP:46077"},{"mindate":"1995-04-13","maxdate":"2021-07-25","name":"Zion, IL 60099","datacoverage":1,"id":"ZIP:60099"},{"mindate":"1951-11-01","maxdate":"2021-07-25","name":"Zion Grove, PA 17985","datacoverage":1,"id":"ZIP:17985"},{"mindate":"1995-11-01","maxdate":"2021-07-25","name":"Zimmerman, MN 55398","datacoverage":1,"id":"ZIP:55398"},{"mindate":"1911-05-01","maxdate":"2021-07-25","name":"Zillah, WA 98953","datacoverage":1,"id":"ZIP:98953"},{"mindate":"1994-06-15","maxdate":"2021-07-25","name":"Zieglerville, PA 19492","datacoverage":1,"id":"ZIP:19492"},{"mindate":"1994-03-30","maxdate":"2021-07-25","name":"Zephyrhills, FL 33542","datacoverage":1,"id":"ZIP:33542"},{"mindate":"1994-03-30","maxdate":"2021-07-25","name":"Zephyrhills, FL 33541","datacoverage":1,"id":"ZIP:33541"},{"mindate":"1994-03-30","maxdate":"2021-07-25","name":"Zephyrhills, FL 33540","datacoverage":1,"id":"ZIP:33540"},{"mindate":"1994-12-15","maxdate":"2021-07-25","name":"Zephyr, TX 76890","datacoverage":0.95,"id":"ZIP:76890"},{"mindate":"1995-05-09","maxdate":"2021-07-25","name":"Zephyr Cove, NV 89448","datacoverage":0.95,"id":"ZIP:89448"},{"mindate":"1969-11-19","maxdate":"2021-07-25","name":"Zenia, CA 95595","datacoverage":1,"id":"ZIP:95595"},{"mindate":"1994-04-01","maxdate":"2021-07-25","name":"Zenda, KS 67159","datacoverage":1,"id":"ZIP:67159"}]}
|
1
bench/penguin/bsd.json
Normal file
1
bench/penguin/bsd.json
Normal file
File diff suppressed because one or more lines are too long
1
bench/penguin/dekeijzer.json
Normal file
1
bench/penguin/dekeijzer.json
Normal file
@ -0,0 +1 @@
|
||||
{"@uri":"https://reststop.randomhouse.com/resources/authors?lastName=de%20Keijzer","author":{"@uri":"https://reststop.randomhouse.com/resources/authors/2180608","approved":"X","authordisplay":"Maja S.M. De Keijzer","authorfirst":"Maja S.M.","authorfirstlc":"maja s.m.","authorid":"2180608","authorlast":"De Keijzer","authorlastfirst":"DE KEIJZER, MAJA S.M.","authorlastlc":"de keijzer","titles":null,"lastinitial":"d","works":{"works":"586956"}}}
|
1
bench/penguin/grisham.json
Normal file
1
bench/penguin/grisham.json
Normal file
File diff suppressed because one or more lines are too long
1
bench/penguin/linux.json
Normal file
1
bench/penguin/linux.json
Normal file
File diff suppressed because one or more lines are too long
1
bench/penguin/rust.json
Normal file
1
bench/penguin/rust.json
Normal file
File diff suppressed because one or more lines are too long
44859
bench/penn/historic-20181028.json
Normal file
44859
bench/penn/historic-20181028.json
Normal file
File diff suppressed because it is too large
Load Diff
3926
bench/rv/agni.json
Normal file
3926
bench/rv/agni.json
Normal file
File diff suppressed because it is too large
Load Diff
317
bench/rv/animal.json
Normal file
317
bench/rv/animal.json
Normal file
@ -0,0 +1,317 @@
|
||||
[
|
||||
{
|
||||
"mandal": 1,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 162,
|
||||
"sungby": "Dirghatamas Auchathya",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Horse",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 1,
|
||||
"meter": "Jagati",
|
||||
"sukta": 162,
|
||||
"sungby": "Dirghatamas Auchathya",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Horse",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 2,
|
||||
"meter": "Jagati",
|
||||
"sukta": 42,
|
||||
"sungby": "Gritasmad Bhargav Shaunak",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Birds",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 2,
|
||||
"meter": "Shakchari",
|
||||
"sukta": 42,
|
||||
"sungby": "Gritasmad Bhargav Shaunak",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Birds",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 3,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 20,
|
||||
"sungby": "Gathi Kaushik",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 26,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Hawk",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 27,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Hawk",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 38,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 39,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Anushtup",
|
||||
"sukta": 39,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 40,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Jagati",
|
||||
"sukta": 40,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Anushtup",
|
||||
"sukta": 57,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Ox",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 4,
|
||||
"meter": "Ushnik",
|
||||
"sukta": 57,
|
||||
"sungby": "Vamadev Gautam",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Ox",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 5,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 43,
|
||||
"sungby": "Atri Bhaum",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 5,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 45,
|
||||
"sungby": "Sadaprin Atreya",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Sarama",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 28,
|
||||
"sungby": "Bharadwaj Barhaspatya",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Anushtup",
|
||||
"sukta": 28,
|
||||
"sungby": "Bharadwaj Barhaspatya",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Kakup",
|
||||
"sukta": 48,
|
||||
"sungby": "Shanyu Bharadwaj",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Ushnik",
|
||||
"sukta": 48,
|
||||
"sungby": "Shanyu Bharadwaj",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 50,
|
||||
"sungby": "Rijishwa Bharadwaj",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 6,
|
||||
"meter": "Jagati",
|
||||
"sukta": 75,
|
||||
"sungby": "Payu Bharadwaj",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Horse",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 7,
|
||||
"meter": "Jagati",
|
||||
"sukta": 44,
|
||||
"sungby": "Vasishth Maitravaruni",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 7,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 44,
|
||||
"sungby": "Vasishth Maitravaruni",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 7,
|
||||
"meter": "Brihati",
|
||||
"sukta": 55,
|
||||
"sungby": "Vasishth Maitravaruni",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Sarama",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 7,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 103,
|
||||
"sungby": "Vasishth Maitravaruni",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Frogs",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 7,
|
||||
"meter": "Anushtup",
|
||||
"sukta": 103,
|
||||
"sungby": "Vasishth Maitravaruni",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Frogs",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 8,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 101,
|
||||
"sungby": "Jamadagni Bhargav",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 14,
|
||||
"sungby": "Yama Vaivasvat",
|
||||
"sungbycategory": "divine male",
|
||||
"sungfor": "Dogs",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Anushtup",
|
||||
"sukta": 19,
|
||||
"sungby": "Mathit Yamayan",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Jagati",
|
||||
"sukta": 65,
|
||||
"sungby": "Vasukarn Vasukra",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 101,
|
||||
"sungby": "Budh Saumya",
|
||||
"sungbycategory": "divine male",
|
||||
"sungfor": "Dadhikra",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 108,
|
||||
"sungby": "Pani",
|
||||
"sungbycategory": "demon male",
|
||||
"sungfor": "Sarama",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 165,
|
||||
"sungby": "Kapot Nairrit",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Pigeon",
|
||||
"sungforcategory": "animal"
|
||||
},
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 169,
|
||||
"sungby": "Shambar Kakshivat",
|
||||
"sungbycategory": "human male",
|
||||
"sungfor": "Cow",
|
||||
"sungforcategory": "animal"
|
||||
}
|
||||
]
|
11
bench/rv/demons.json
Normal file
11
bench/rv/demons.json
Normal file
@ -0,0 +1,11 @@
|
||||
[
|
||||
{
|
||||
"mandal": 10,
|
||||
"meter": "Trishtup",
|
||||
"sukta": 108,
|
||||
"sungby": "Pani",
|
||||
"sungbycategory": "demon male",
|
||||
"sungfor": "Sarama",
|
||||
"sungforcategory": "animal"
|
||||
}
|
||||
]
|
26255
bench/rv/human_male.json
Normal file
26255
bench/rv/human_male.json
Normal file
File diff suppressed because it is too large
Load Diff
1
bench/synthetic/list2.json
Normal file
1
bench/synthetic/list2.json
Normal file
@ -0,0 +1 @@
|
||||
[0,1,2,3,4,5,6,7,8,9,10]
|
1
bench/synthetic/obj_rename.json
Normal file
1
bench/synthetic/obj_rename.json
Normal file
@ -0,0 +1 @@
|
||||
{ ".": "first", "..": "second", "dot": "third", "dotdot": "fourth" }
|
1
bench/synthetic/object.json
Normal file
1
bench/synthetic/object.json
Normal file
@ -0,0 +1 @@
|
||||
{ "name": "Michael Greenberg", "eyes": 2, "fingernails": 10, "human": true }
|
1
bench/synthetic/object_null.json
Normal file
1
bench/synthetic/object_null.json
Normal file
@ -0,0 +1 @@
|
||||
{ "name": "Michael Greenberg", "eyes": 2, "fingernails": 10, "human": true, "problems": null }
|
4
completions/Makefile
Normal file
4
completions/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all:
|
||||
for x in bash fish zsh; do cargo run -- --completions $$x >ffs.$$x; done
|
@ -20,7 +20,7 @@ _ffs() {
|
||||
|
||||
case "${cmd}" in
|
||||
ffs)
|
||||
opts=" -q -d -i -h -V -u -g -o -s -t -m --quiet --debug --exact --no-xattr --keep-macos-xattr --unpadded --readonly --no-output --in-place --pretty --help --version --completions --uid --gid --mode --dirmode --munge --output --source --target --mount --new <INPUT> "
|
||||
opts=" -q -d -i -h -V -u -g -o -s -t -m --quiet --time --debug --exact --no-xattr --keep-macos-xattr --unpadded --readonly --no-output --in-place --pretty --help --version --completions --uid --gid --mode --dirmode --munge --output --source --target --mount --new <INPUT> "
|
||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||
return 0
|
||||
|
@ -10,6 +10,7 @@ complete -c ffs -n "__fish_use_subcommand" -s t -l target -d 'Specify the target
|
||||
complete -c ffs -n "__fish_use_subcommand" -s m -l mount -d 'Sets the mountpoint; will be inferred when using a file, but must be specified when running on stdin'
|
||||
complete -c ffs -n "__fish_use_subcommand" -l new -d 'Mounts an empty filesystem, inferring a mountpoint and output format'
|
||||
complete -c ffs -n "__fish_use_subcommand" -s q -l quiet -d 'Quiet mode (turns off all errors and warnings, enables `--no-output`)'
|
||||
complete -c ffs -n "__fish_use_subcommand" -l time -d 'Emit timing information on stderr in an \'event,time\' format; time is in nanoseconds'
|
||||
complete -c ffs -n "__fish_use_subcommand" -s d -l debug -d 'Give debug output on stderr'
|
||||
complete -c ffs -n "__fish_use_subcommand" -l exact -d 'Don\'t add newlines to the end of values that don\'t already have them (or strip them when loading)'
|
||||
complete -c ffs -n "__fish_use_subcommand" -l no-xattr -d 'Don\'t use extended attributes to track metadata (see `man xattr`)'
|
||||
|
@ -34,6 +34,7 @@ _ffs() {
|
||||
'(-i --in-place -s --source -o --output)--new=[Mounts an empty filesystem, inferring a mountpoint and output format]' \
|
||||
'-q[Quiet mode (turns off all errors and warnings, enables `--no-output`)]' \
|
||||
'--quiet[Quiet mode (turns off all errors and warnings, enables `--no-output`)]' \
|
||||
'--time[Emit timing information on stderr in an '\''event,time'\'' format; time is in nanoseconds]' \
|
||||
'-d[Give debug output on stderr]' \
|
||||
'--debug[Give debug output on stderr]' \
|
||||
'--exact[Don'\''t add newlines to the end of values that don'\''t already have them (or strip them when loading)]' \
|
||||
|
@ -1,4 +1,4 @@
|
||||
% FFS(1) Version 0.1.0 | File Filesystem Documentation
|
||||
% FFS(1) Version 0.1.1 | File Filesystem Documentation
|
||||
% Michael Greenberg
|
||||
|
||||
# NAME
|
||||
@ -57,6 +57,10 @@ installed on your system to use *ffs*.
|
||||
|
||||
: Mounted filesystem will be readonly
|
||||
|
||||
--time
|
||||
|
||||
: Emit timing information on stderr in an 'event,time' format; time is in nanoseconds
|
||||
|
||||
--unpadded
|
||||
|
||||
: Don't pad the numeric names of list elements with zeroes; will not
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Automatically generated by Pandoc 2.9.1.1
|
||||
.\"
|
||||
.TH "FFS" "1" "" "Version 0.1.0" "File Filesystem Documentation"
|
||||
.TH "FFS" "1" "" "Version 0.1.1" "File Filesystem Documentation"
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
@ -59,6 +59,10 @@ Quiet mode (turns off all errors and warnings, enables
|
||||
--readonly
|
||||
Mounted filesystem will be readonly
|
||||
.TP
|
||||
--time
|
||||
Emit timing information on stderr in an \[aq]event,time\[aq] format;
|
||||
time is in nanoseconds
|
||||
.TP
|
||||
--unpadded
|
||||
Don\[aq]t pad the numeric names of list elements with zeroes; will not
|
||||
sort properly
|
||||
|
47
run_bench.sh
Executable file
47
run_bench.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H:%M:%S")
|
||||
|
||||
usage() {
|
||||
exec >&2
|
||||
printf "Usage: %s [-n NUM_RUNS]\n\n" "$(basename $0)"
|
||||
printf " -n NUM_RUNS the number of runs for each test case (defaults to $NUM_RUNS_DEFAULT)\n"
|
||||
exit 2
|
||||
}
|
||||
|
||||
ARGS=""
|
||||
while getopts ":n:h" opt
|
||||
do
|
||||
case "$opt" in
|
||||
(n) if [ $((OPTARG)) -le 0 ]
|
||||
then
|
||||
printf "NUM_RUNS must be a positive number; got '%s'\n\n" "$OPTARG"
|
||||
usage
|
||||
fi
|
||||
ARGS="$ARGS -n $OPTARG"
|
||||
;;
|
||||
(h) usage
|
||||
;;
|
||||
(*) printf "Unrecognized argument '%s'\n\n" "$OPTARG"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
[ $# -eq 0 ] || usage
|
||||
|
||||
cd bench
|
||||
|
||||
BENCH="../${TIMESTAMP}_bench.log"
|
||||
./bench.sh $ARGS >"$BENCH"
|
||||
|
||||
./mk_micro.sh
|
||||
MICRO_RAW=$(mktemp)
|
||||
./bench.sh -d micro $ARGS >"$MICRO_RAW"
|
||||
MICRO="../${TIMESTAMP}_micro.log"
|
||||
./fixup_micro.sh "$MICRO_RAW" >"$MICRO"
|
||||
rm "$MICRO_RAW"
|
||||
|
||||
./generate_charts.R "$BENCH" "$MICRO"
|
@ -25,6 +25,11 @@ pub fn app() -> App<'static, 'static> {
|
||||
.short("q")
|
||||
.overrides_with("DEBUG")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("TIMING")
|
||||
.help("Emit timing information on stderr in an 'event,time' format; time is in nanoseconds")
|
||||
.long("time")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("DEBUG")
|
||||
.help("Give debug output on stderr")
|
||||
|
@ -41,6 +41,7 @@ pub struct Config {
|
||||
pub input: Input,
|
||||
pub output: Output,
|
||||
pub pretty: bool,
|
||||
pub timing: bool,
|
||||
pub mount: Option<PathBuf>,
|
||||
pub cleanup_mount: bool,
|
||||
}
|
||||
@ -146,6 +147,7 @@ impl Config {
|
||||
}
|
||||
|
||||
// simple flags
|
||||
config.timing = args.is_present("TIMING");
|
||||
config.add_newlines = !args.is_present("EXACT");
|
||||
config.pad_element_names = !args.is_present("UNPADDED");
|
||||
config.read_only = args.is_present("READONLY");
|
||||
@ -593,6 +595,7 @@ impl Default for Config {
|
||||
input: Input::Stdin,
|
||||
output: Output::Stdout,
|
||||
pretty: false,
|
||||
timing: false,
|
||||
mount: None,
|
||||
cleanup_mount: false,
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ use tracing::{debug, error, info, instrument, warn};
|
||||
|
||||
use fuser::FileType;
|
||||
|
||||
use super::config::{ERROR_STATUS_FUSE, Config, Input, Munge, Output};
|
||||
use super::config::{Config, Input, Munge, Output, ERROR_STATUS_FUSE};
|
||||
use super::fs::{DirEntry, DirType, Entry, Inode, FS};
|
||||
|
||||
use ::toml as serde_toml;
|
||||
@ -133,6 +133,24 @@ impl Format {
|
||||
/// NB there is no check that `self == fs.config.input_format`!
|
||||
#[instrument(level = "info", skip(config))]
|
||||
pub fn load(&self, config: Config) -> FS {
|
||||
macro_rules! time_ns {
|
||||
($msg:expr, $e:expr) => {{
|
||||
let start = std::time::Instant::now();
|
||||
let v = $e;
|
||||
|
||||
let msg = $msg;
|
||||
let elapsed = start.elapsed().as_nanos();
|
||||
if config.timing {
|
||||
eprintln!("{},{}", msg, elapsed);
|
||||
} else {
|
||||
info!("{} ({}ns)", msg, elapsed);
|
||||
}
|
||||
|
||||
v
|
||||
}};
|
||||
}
|
||||
|
||||
info!("loading");
|
||||
let mut inodes: Vec<Option<Inode>> = Vec::new();
|
||||
|
||||
let reader: Box<dyn std::io::Read> = match &config.input {
|
||||
@ -164,25 +182,19 @@ impl Format {
|
||||
|
||||
match self {
|
||||
Format::Json => {
|
||||
info!("reading json value");
|
||||
let v: serde_json::Value = serde_json::from_reader(reader).expect("JSON");
|
||||
info!("building inodes");
|
||||
fs_from_value(v, &config, &mut inodes);
|
||||
info!("done");
|
||||
let v: serde_json::Value = time_ns!(
|
||||
"reading",
|
||||
serde_json::from_reader(reader).expect("JSON")
|
||||
);
|
||||
time_ns!("loading", fs_from_value(v, &config, &mut inodes));
|
||||
}
|
||||
Format::Toml => {
|
||||
info!("reading toml value");
|
||||
let v = toml::from_reader(reader).expect("TOML");
|
||||
info!("building inodes");
|
||||
fs_from_value(v, &config, &mut inodes);
|
||||
info!("done");
|
||||
let v = time_ns!("reading", toml::from_reader(reader).expect("TOML"));
|
||||
time_ns!("loading", fs_from_value(v, &config, &mut inodes));
|
||||
}
|
||||
Format::Yaml => {
|
||||
info!("reading toml value");
|
||||
let v = yaml::from_reader(reader).expect("YAML");
|
||||
info!("building inodes");
|
||||
fs_from_value(v, &config, &mut inodes);
|
||||
info!("done");
|
||||
let v = time_ns!("reading", yaml::from_reader(reader).expect("YAML"));
|
||||
time_ns!("loading", fs_from_value(v, &config, &mut inodes));
|
||||
}
|
||||
};
|
||||
|
||||
@ -195,6 +207,22 @@ impl Format {
|
||||
/// NB there is no check that `self == fs.config.output_format`!
|
||||
#[instrument(level = "info", skip(fs))]
|
||||
pub fn save(&self, fs: &FS) {
|
||||
macro_rules! time_ns {
|
||||
($msg:expr, $e:expr) => {{
|
||||
let start = std::time::Instant::now();
|
||||
let v = $e;
|
||||
|
||||
let msg = $msg;
|
||||
let elapsed = start.elapsed().as_nanos();
|
||||
if fs.config.timing {
|
||||
eprintln!("{},{}", msg, elapsed);
|
||||
} else {
|
||||
info!("{} ({}ns)", msg, elapsed);
|
||||
}
|
||||
v
|
||||
}};
|
||||
}
|
||||
|
||||
let writer: Box<dyn std::io::Write> = match &fs.config.output {
|
||||
Output::Stdout => {
|
||||
debug!("outputting on STDOUT");
|
||||
@ -212,36 +240,35 @@ impl Format {
|
||||
|
||||
match self {
|
||||
Format::Json => {
|
||||
info!("generating json value");
|
||||
let v: serde_json::Value = value_from_fs(fs, fuser::FUSE_ROOT_ID);
|
||||
info!("writing");
|
||||
let v: serde_json::Value =
|
||||
time_ns!("saving", value_from_fs(fs, fuser::FUSE_ROOT_ID));
|
||||
debug!("outputting {}", v);
|
||||
time_ns!(
|
||||
"writing",
|
||||
if fs.config.pretty {
|
||||
serde_json::to_writer_pretty(writer, &v).unwrap();
|
||||
} else {
|
||||
serde_json::to_writer(writer, &v).unwrap();
|
||||
}
|
||||
info!("done")
|
||||
);
|
||||
}
|
||||
Format::Toml => {
|
||||
info!("generating toml value");
|
||||
let v: serde_toml::Value = value_from_fs(fs, fuser::FUSE_ROOT_ID);
|
||||
info!("writing");
|
||||
let v: serde_toml::Value =
|
||||
time_ns!("saving", value_from_fs(fs, fuser::FUSE_ROOT_ID));
|
||||
debug!("outputting {}", v);
|
||||
time_ns!(
|
||||
"writing",
|
||||
if fs.config.pretty {
|
||||
toml::to_writer_pretty(writer, &v).unwrap();
|
||||
} else {
|
||||
toml::to_writer(writer, &v).unwrap();
|
||||
}
|
||||
info!("done");
|
||||
);
|
||||
}
|
||||
Format::Yaml => {
|
||||
info!("generating yaml value");
|
||||
let v: yaml::Value = value_from_fs(fs, fuser::FUSE_ROOT_ID);
|
||||
info!("writing");
|
||||
let v: yaml::Value = time_ns!("saving", value_from_fs(fs, fuser::FUSE_ROOT_ID));
|
||||
debug!("outputting {}", v);
|
||||
yaml::to_writer(writer, &v).unwrap();
|
||||
info!("done");
|
||||
time_ns!("writing", yaml::to_writer(writer, &v).unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
6
tests/README.md
Normal file
6
tests/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
To run tests, run `run_tests.sh` (in the repo root).
|
||||
|
||||
These tests cover a wide variety of features. Testing is slow because
|
||||
mountpoints aren't _immediately_ available after running `ffs` in the
|
||||
background---you need a few milliseconds, but there's no portable way
|
||||
to sleep just a little.
|
@ -13,6 +13,7 @@ fail() {
|
||||
}
|
||||
|
||||
TESTS="$(pwd)"
|
||||
TIMEOUT="$(cd ../utils; pwd)/timeout"
|
||||
|
||||
D=$(mktemp -d)
|
||||
|
||||
@ -29,7 +30,7 @@ chmod -w unwriteable
|
||||
|
||||
# in place mount, mountpoint exists
|
||||
mkdir single
|
||||
"$TESTS"/timeout -t 2 ffs -i single.json 2>single.err
|
||||
"$TIMEOUT" -t 2 ffs -i single.json 2>single.err
|
||||
[ $? -eq 1 ] || fail imountstatus
|
||||
[ -s single.err ] || fail imountmsg
|
||||
rmdir single
|
||||
@ -37,7 +38,7 @@ rm single.err
|
||||
|
||||
# in place, can't make mountpoint
|
||||
cd unwriteable
|
||||
"$TESTS"/timeout -t 2 ffs -i single.json 2>../single.err
|
||||
"$TIMEOUT" -t 2 ffs -i single.json 2>../single.err
|
||||
[ $? -eq 1 ] || fail imkmountstatus
|
||||
cd ..
|
||||
[ -s single.err ] || fail imkmountmsg
|
||||
@ -45,7 +46,7 @@ rm single.err
|
||||
|
||||
# new, mountpoint exists
|
||||
mkdir foo
|
||||
"$TESTS"/timeout -t 2 ffs --new foo.json 2>foo.err
|
||||
"$TIMEOUT" -t 2 ffs --new foo.json 2>foo.err
|
||||
[ $? -eq 1 ] || fail newmountstatus
|
||||
[ -s foo.err ] || fail newmountmsg
|
||||
rmdir foo
|
||||
@ -53,47 +54,47 @@ rm foo.err
|
||||
|
||||
# new, can't make mountpoint
|
||||
cd unwriteable
|
||||
"$TESTS"/timeout -t 2 ffs --new foo.json 2>../foo.err
|
||||
"$TIMEOUT" -t 2 ffs --new foo.json 2>../foo.err
|
||||
[ $? -eq 1 ] || fail newmkmountstatus
|
||||
cd ..
|
||||
[ -s foo.err ] || fail newmkmountmsg
|
||||
rm foo.err
|
||||
|
||||
# input file, can't infer mountpoint
|
||||
"$TESTS"/timeout -t 2 ffs --new .. 2>dotdot.err
|
||||
"$TIMEOUT" -t 2 ffs --new .. 2>dotdot.err
|
||||
[ $? -eq 1 ] || fail newdotdotmountstatus
|
||||
[ -s dotdot.err ] || fail newdotdotmountmsg
|
||||
rm dotdot.err
|
||||
|
||||
# --new, output file exists
|
||||
touch foo.yaml
|
||||
"$TESTS"/timeout -t 2 ffs --new foo.yaml 2>foo.err
|
||||
"$TIMEOUT" -t 2 ffs --new foo.yaml 2>foo.err
|
||||
[ $? -eq 1 ] || fail omountstatus
|
||||
[ -s foo.err ] || fail omountmsg
|
||||
rm foo.yaml
|
||||
rm foo.err
|
||||
|
||||
# --new, mountpoint doesn't exist
|
||||
"$TESTS"/timeout -t 2 ffs -m notthere --new foo.json 2>foo.err
|
||||
"$TIMEOUT" -t 2 ffs -m notthere --new foo.json 2>foo.err
|
||||
[ $? -eq 1 ] || fail mmountstatus1
|
||||
[ -s foo.err ] || fail mmountmsg1
|
||||
rm foo.err
|
||||
|
||||
# mountpoint doesn't exist
|
||||
"$TESTS"/timeout -t 2 ffs -m notthere single.json 2>single.err
|
||||
"$TIMEOUT" -t 2 ffs -m notthere single.json 2>single.err
|
||||
[ $? -eq 1 ] || fail mmountstatus2
|
||||
[ -s single.err ] || fail mmountmsg2
|
||||
rm single.err
|
||||
|
||||
# input file doesn't exists
|
||||
"$TESTS"/timeout -t 2 ffs nonesuch.toml 2>nonesuch.err
|
||||
"$TIMEOUT" -t 2 ffs nonesuch.toml 2>nonesuch.err
|
||||
[ $? -eq 1 ] || fail inputmountstatus1
|
||||
[ -s nonesuch.err ] || fail inputmountmsg1
|
||||
rm nonesuch.err
|
||||
|
||||
# input file, mountpoint exists
|
||||
mkdir single
|
||||
"$TESTS"/timeout -t 2 ffs single.json 2>single.err
|
||||
"$TIMEOUT" -t 2 ffs single.json 2>single.err
|
||||
[ $? -eq 1 ] || fail inputmountstatus2
|
||||
[ -s single.err ] || fail inputmountmsg2
|
||||
rmdir single
|
||||
@ -101,74 +102,74 @@ rm single.err
|
||||
|
||||
# input file, can't make mount point
|
||||
cd unwriteable
|
||||
"$TESTS"/timeout -t 2 ffs ../single.json 2>../single.err
|
||||
"$TIMEOUT" -t 2 ffs ../single.json 2>../single.err
|
||||
[ $? -eq 1 ] || fail inputmkmountstatus
|
||||
cd ..
|
||||
[ -s single.err ] || fail inputmkmountmsg
|
||||
rm single.err
|
||||
|
||||
# input file, can't infer mountpoint
|
||||
"$TESTS"/timeout -t 2 ffs .. 2>dotdot.err
|
||||
"$TIMEOUT" -t 2 ffs .. 2>dotdot.err
|
||||
[ $? -eq 1 ] || fail inputdotdotmountstatus
|
||||
[ -s dotdot.err ] || fail inputdotdotmountmsg
|
||||
rm dotdot.err
|
||||
|
||||
# unreadable input
|
||||
"$TESTS"/timeout -t 2 ffs unreadable.json 2>ur.err
|
||||
"$TIMEOUT" -t 2 ffs unreadable.json 2>ur.err
|
||||
[ $? -eq 1 ] || fail unreadablemountstatus
|
||||
[ -s ur.err ] || fail unreadablemountmsg
|
||||
rm ur.err
|
||||
|
||||
# plain value input
|
||||
"$TESTS"/timeout -t 2 ffs false.json 2>false.err
|
||||
"$TIMEOUT" -t 2 ffs false.json 2>false.err
|
||||
[ $? -eq 1 ] || fail falsemountstatus
|
||||
[ -s false.err ] || fail falsemountmsg
|
||||
rm false.err
|
||||
|
||||
# bad mount point (fuser is masking this error)
|
||||
# "$TESTS"/timeout -t 2 ffs /etc single.json 2>etc.err
|
||||
# "$TIMEOUT" -t 2 ffs /etc single.json 2>etc.err
|
||||
# [ $? -eq 1 ] || fail etcmountstatus
|
||||
# [ -s etc.err ] || fail etcmountmsg
|
||||
# rm etc.err
|
||||
|
||||
# bad shell completion
|
||||
"$TESTS"/timeout -t 2 ffs --completions smoosh 2>comp.err
|
||||
"$TIMEOUT" -t 2 ffs --completions smoosh 2>comp.err
|
||||
[ $? -eq 2 ] || fail compmountstatus
|
||||
[ -s comp.err ] || fail compmountmsg
|
||||
rm comp.err
|
||||
|
||||
# bad mode
|
||||
"$TESTS"/timeout -t 2 ffs --mode 888 2>mode.err
|
||||
"$TIMEOUT" -t 2 ffs --mode 888 2>mode.err
|
||||
[ $? -eq 2 ] || fail modemountstatus
|
||||
[ -s mode.err ] || fail modemountmsg
|
||||
rm mode.err
|
||||
|
||||
# bad dirmode
|
||||
"$TESTS"/timeout -t 2 ffs --dirmode 888 2>dirmode.err
|
||||
"$TIMEOUT" -t 2 ffs --dirmode 888 2>dirmode.err
|
||||
[ $? -eq 2 ] || fail dirmodemountstatus
|
||||
[ -s dirmode.err ] || fail dirmodemountmsg
|
||||
rm dirmode.err
|
||||
|
||||
# new and input file
|
||||
"$TESTS"/timeout -t 2 ffs --new foo.json single.json 2>ni.err
|
||||
"$TIMEOUT" -t 2 ffs --new foo.json single.json 2>ni.err
|
||||
[ $? -eq 2 ] || fail nimountstatus
|
||||
[ -s ni.err ] || fail nimountmsg
|
||||
rm ni.err
|
||||
|
||||
# unknown --source
|
||||
"$TESTS"/timeout -t 2 ffs --source hieratic single.json 2>source.err
|
||||
"$TIMEOUT" -t 2 ffs --source hieratic single.json 2>source.err
|
||||
[ $? -eq 2 ] || fail sourcemountstatus
|
||||
[ -s source.err ] || fail sourcemountmsg
|
||||
rm source.err
|
||||
|
||||
# unknown --target
|
||||
"$TESTS"/timeout -t 2 ffs --target hieratic single.json 2>target.err
|
||||
"$TIMEOUT" -t 2 ffs --target hieratic single.json 2>target.err
|
||||
[ $? -eq 2 ] || fail targetmountstatus
|
||||
[ -s target.err ] || fail targetmountmsg
|
||||
rm target.err
|
||||
|
||||
# stdin read, no mountpoint
|
||||
"$TESTS"/timeout -t 2 ffs 2>im.err
|
||||
"$TIMEOUT" -t 2 ffs 2>im.err
|
||||
[ $? -eq 2 ] || fail immountstatus
|
||||
[ -s im.err ] || fail immountmsg
|
||||
rm im.err
|
||||
|
@ -13,6 +13,7 @@ fail() {
|
||||
}
|
||||
|
||||
TESTS="$(pwd)"
|
||||
TIMEOUT="$(cd ../utils; pwd)/timeout"
|
||||
|
||||
D=$(mktemp -d)
|
||||
|
||||
@ -35,7 +36,7 @@ esac
|
||||
|
||||
cp ../single.json .
|
||||
|
||||
"${TESTS}"/timeout -t 3 -l single.timeout ffs -i single.json 2>single.err
|
||||
"$TIMEOUT" -t 3 -l single.timeout ffs -i single.json 2>single.err
|
||||
NESTEDSTATUS=$?
|
||||
[ -f single.timeout ] && fail timeout
|
||||
[ -s single.err ] || fail error
|
||||
|
102
utils/synth_json
Executable file
102
utils/synth_json
Executable file
@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from sys import argv, stderr
|
||||
import os
|
||||
import json
|
||||
|
||||
counter = 0
|
||||
letters = list("abcdefghijklmnopqrstuvwxyz")
|
||||
|
||||
def fresh_name():
|
||||
global counter
|
||||
|
||||
num = counter
|
||||
counter = counter + 1
|
||||
|
||||
name = ""
|
||||
while num > 0 or name == "":
|
||||
name += letters[num % 26]
|
||||
num //= 26
|
||||
|
||||
return name
|
||||
|
||||
def object(field,value):
|
||||
o = dict()
|
||||
o[field] = value
|
||||
return o
|
||||
|
||||
def deep(kind, depth):
|
||||
if kind == "list":
|
||||
if depth <= 0:
|
||||
return list()
|
||||
|
||||
f = lambda v: [v]
|
||||
elif kind == "named":
|
||||
if depth <= 0:
|
||||
return dict()
|
||||
|
||||
def f(v):
|
||||
o = dict()
|
||||
o[fresh_name()] = v
|
||||
return o
|
||||
else:
|
||||
raise(ValueError("Unknown kind '{}'".format(kind)))
|
||||
|
||||
v = None
|
||||
for i in range(0,depth):
|
||||
v = f(v)
|
||||
|
||||
return v
|
||||
|
||||
def wide(kind, width):
|
||||
if kind == "list":
|
||||
v = list()
|
||||
|
||||
def f(v):
|
||||
v.append(None)
|
||||
return v
|
||||
elif kind == "named":
|
||||
v = dict()
|
||||
|
||||
def f(v):
|
||||
v[fresh_name()] = None
|
||||
return v
|
||||
else:
|
||||
raise(ValueError("Unknown kind '{}'".format(kind)))
|
||||
|
||||
for i in range(0,width):
|
||||
v = f(v)
|
||||
|
||||
return v
|
||||
|
||||
def usage():
|
||||
print("Usage: {} [list|named] [wide|deep] [size]".format(os.path.basename(argv[0])), file=stderr)
|
||||
exit(2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(argv) != 4:
|
||||
usage()
|
||||
|
||||
kind,approach,size = argv[1:]
|
||||
|
||||
if kind.lower().strip() not in ["named", "list"]:
|
||||
print("Unknown kind '{}' (expected 'list' or 'named')".format(kind), file=stderr)
|
||||
usage()
|
||||
else:
|
||||
kind = kind.lower().strip()
|
||||
|
||||
if approach.lower().strip() == "wide":
|
||||
f = wide
|
||||
elif approach.lower().strip() == "deep":
|
||||
f = deep
|
||||
else:
|
||||
print("Unknown approach '{}' (expected 'wide' or 'deep')".format(kind), file=stderr)
|
||||
usage()
|
||||
|
||||
try:
|
||||
size = int(size)
|
||||
except:
|
||||
print("Unknown size '{}', expected non-negative number".format(size), file=stderr)
|
||||
usage()
|
||||
|
||||
print(json.dumps(f(kind, size), separators=(',', ':')))
|
Loading…
Reference in New Issue
Block a user