kibi-swipl-linux-x64-gnu 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/bin/swipl +0 -0
- package/bin/swipl-win +0 -0
- package/build-manifest.json +70 -0
- package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
- package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
- package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
- package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
- package/lib/swipl/ABI +1 -0
- package/lib/swipl/LICENSE +41 -0
- package/lib/swipl/README.md +116 -0
- package/lib/swipl/app/README.md +25 -0
- package/lib/swipl/app/app.pl +87 -0
- package/lib/swipl/app/pack.pl +350 -0
- package/lib/swipl/app/qlf.pl +521 -0
- package/lib/swipl/app/splfr.pl +177 -0
- package/lib/swipl/app/sys.pl +310 -0
- package/lib/swipl/bin/swipl.home +1 -0
- package/lib/swipl/boot/apply.pl +73 -0
- package/lib/swipl/boot/attvar.pl +344 -0
- package/lib/swipl/boot/autoload.pl +1226 -0
- package/lib/swipl/boot/bags.pl +283 -0
- package/lib/swipl/boot/dcg.pl +388 -0
- package/lib/swipl/boot/dicts.pl +193 -0
- package/lib/swipl/boot/dwim.pl +485 -0
- package/lib/swipl/boot/engines.pl +152 -0
- package/lib/swipl/boot/expand.pl +1628 -0
- package/lib/swipl/boot/gc.pl +65 -0
- package/lib/swipl/boot/history.pl +304 -0
- package/lib/swipl/boot/init.pl +4682 -0
- package/lib/swipl/boot/iri.pl +64 -0
- package/lib/swipl/boot/license.pl +390 -0
- package/lib/swipl/boot/load.pl +81 -0
- package/lib/swipl/boot/messages.pl +2521 -0
- package/lib/swipl/boot/packs.pl +306 -0
- package/lib/swipl/boot/predopts.pl +154 -0
- package/lib/swipl/boot/qlf.pl +141 -0
- package/lib/swipl/boot/rc.pl +263 -0
- package/lib/swipl/boot/syspred.pl +1634 -0
- package/lib/swipl/boot/tabling.pl +2321 -0
- package/lib/swipl/boot/threads.pl +42 -0
- package/lib/swipl/boot/toplevel.pl +2248 -0
- package/lib/swipl/boot/topvars.pl +261 -0
- package/lib/swipl/boot.prc +0 -0
- package/lib/swipl/cmake/swipl.cmake +131 -0
- package/lib/swipl/customize/README.md +23 -0
- package/lib/swipl/customize/edit +101 -0
- package/lib/swipl/customize/init.pl +164 -0
- package/lib/swipl/demo/README.md +33 -0
- package/lib/swipl/demo/likes.pl +44 -0
- package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
- package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
- package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
- package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
- package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
- package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
- package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
- package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
- package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
- package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
- package/lib/swipl/doc/packages/examples/http/README.md +98 -0
- package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
- package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
- package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
- package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
- package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
- package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
- package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
- package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
- package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
- package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
- package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
- package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
- package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
- package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
- package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
- package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
- package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
- package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
- package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
- package/lib/swipl/include/SWI-Prolog.h +1544 -0
- package/lib/swipl/include/SWI-Stream.h +537 -0
- package/lib/swipl/include/Yap/YapInterface.h +283 -0
- package/lib/swipl/include/sicstus/sicstus.h +452 -0
- package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
- package/lib/swipl/lib/x86_64-linux/files.so +0 -0
- package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
- package/lib/swipl/lib/x86_64-linux/json.so +0 -0
- package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
- package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
- package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
- package/lib/swipl/lib/x86_64-linux/process.so +0 -0
- package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
- package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
- package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
- package/lib/swipl/lib/x86_64-linux/time.so +0 -0
- package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
- package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
- package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
- package/lib/swipl/library/INDEX.pl +1020 -0
- package/lib/swipl/library/aggregate.pl +755 -0
- package/lib/swipl/library/ansi_term.pl +653 -0
- package/lib/swipl/library/apply.pl +426 -0
- package/lib/swipl/library/apply_macros.pl +497 -0
- package/lib/swipl/library/arithmetic.pl +320 -0
- package/lib/swipl/library/assoc.pl +522 -0
- package/lib/swipl/library/atom.pl +169 -0
- package/lib/swipl/library/backcomp.pl +688 -0
- package/lib/swipl/library/base32.pl +291 -0
- package/lib/swipl/library/base64.pl +441 -0
- package/lib/swipl/library/broadcast.pl +161 -0
- package/lib/swipl/library/build/cmake.pl +137 -0
- package/lib/swipl/library/build/conan.pl +232 -0
- package/lib/swipl/library/build/make.pl +168 -0
- package/lib/swipl/library/build/tools.pl +825 -0
- package/lib/swipl/library/charsio.pl +195 -0
- package/lib/swipl/library/check.pl +1097 -0
- package/lib/swipl/library/check_installation.pl +912 -0
- package/lib/swipl/library/clp/INDEX.pl +157 -0
- package/lib/swipl/library/clp/bounds.pl +2036 -0
- package/lib/swipl/library/clp/clp_distinct.pl +263 -0
- package/lib/swipl/library/clp/clp_events.pl +92 -0
- package/lib/swipl/library/clp/clpb.pl +1896 -0
- package/lib/swipl/library/clp/clpfd.pl +7906 -0
- package/lib/swipl/library/clp/simplex.pl +1580 -0
- package/lib/swipl/library/codesio.pl +182 -0
- package/lib/swipl/library/coinduction.pl +183 -0
- package/lib/swipl/library/console_input.pl +289 -0
- package/lib/swipl/library/csv.pl +611 -0
- package/lib/swipl/library/ctypes.pl +161 -0
- package/lib/swipl/library/date.pl +370 -0
- package/lib/swipl/library/dcg/INDEX.pl +35 -0
- package/lib/swipl/library/dcg/basics.pl +514 -0
- package/lib/swipl/library/dcg/high_order.pl +227 -0
- package/lib/swipl/library/debug.pl +499 -0
- package/lib/swipl/library/dialect/bim.pl +186 -0
- package/lib/swipl/library/dialect/commons.pl +77 -0
- package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
- package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
- package/lib/swipl/library/dialect/hprolog.pl +314 -0
- package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
- package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
- package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
- package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
- package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
- package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
- package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
- package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
- package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
- package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
- package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
- package/lib/swipl/library/dialect/sicstus.pl +582 -0
- package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
- package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
- package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
- package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
- package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
- package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
- package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
- package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
- package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
- package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
- package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
- package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
- package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
- package/lib/swipl/library/dialect/sicstus4.pl +200 -0
- package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
- package/lib/swipl/library/dialect/xsb/README.md +20 -0
- package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
- package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
- package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
- package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
- package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
- package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
- package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
- package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
- package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
- package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
- package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
- package/lib/swipl/library/dialect/xsb/source.pl +308 -0
- package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
- package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
- package/lib/swipl/library/dialect/xsb/string.pl +76 -0
- package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
- package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
- package/lib/swipl/library/dialect/xsb.pl +688 -0
- package/lib/swipl/library/dialect/yap/README.TXT +8 -0
- package/lib/swipl/library/dialect/yap.pl +283 -0
- package/lib/swipl/library/dialect.pl +123 -0
- package/lib/swipl/library/dicts.pl +399 -0
- package/lib/swipl/library/dif.pl +426 -0
- package/lib/swipl/library/edinburgh.pl +138 -0
- package/lib/swipl/library/edit.pl +783 -0
- package/lib/swipl/library/error.pl +495 -0
- package/lib/swipl/library/exceptions.pl +231 -0
- package/lib/swipl/library/explain.pl +543 -0
- package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
- package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
- package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
- package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
- package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
- package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
- package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
- package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
- package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
- package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
- package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
- package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
- package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
- package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
- package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
- package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
- package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
- package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
- package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
- package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
- package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
- package/lib/swipl/library/ext/chr/chr.pl +686 -0
- package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
- package/lib/swipl/library/ext/clib/cgi.pl +86 -0
- package/lib/swipl/library/ext/clib/crypt.pl +44 -0
- package/lib/swipl/library/ext/clib/filesex.pl +644 -0
- package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
- package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
- package/lib/swipl/library/ext/clib/md5.pl +68 -0
- package/lib/swipl/library/ext/clib/memfile.pl +61 -0
- package/lib/swipl/library/ext/clib/process.pl +573 -0
- package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
- package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
- package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
- package/lib/swipl/library/ext/clib/sched.pl +85 -0
- package/lib/swipl/library/ext/clib/sha.pl +162 -0
- package/lib/swipl/library/ext/clib/socket.pl +1102 -0
- package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
- package/lib/swipl/library/ext/clib/streampool.pl +136 -0
- package/lib/swipl/library/ext/clib/syslog.pl +180 -0
- package/lib/swipl/library/ext/clib/time.pl +194 -0
- package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
- package/lib/swipl/library/ext/clib/uid.pl +220 -0
- package/lib/swipl/library/ext/clib/unix.pl +317 -0
- package/lib/swipl/library/ext/clib/uri.pl +530 -0
- package/lib/swipl/library/ext/clib/uuid.pl +207 -0
- package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
- package/lib/swipl/library/ext/http/http/README.md +34 -0
- package/lib/swipl/library/ext/http/http/ax.pl +189 -0
- package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
- package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
- package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
- package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
- package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
- package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
- package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
- package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
- package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
- package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
- package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
- package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
- package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
- package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
- package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
- package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
- package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
- package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
- package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
- package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
- package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
- package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
- package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
- package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
- package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
- package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
- package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
- package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
- package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
- package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
- package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
- package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
- package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
- package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
- package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
- package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
- package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
- package/lib/swipl/library/ext/http/http/hub.pl +600 -0
- package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
- package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
- package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
- package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
- package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
- package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
- package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
- package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
- package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
- package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
- package/lib/swipl/library/ext/json/INDEX.pl +36 -0
- package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
- package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
- package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
- package/lib/swipl/library/ext/json/http/json.pl +48 -0
- package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
- package/lib/swipl/library/ext/json/json.pl +1215 -0
- package/lib/swipl/library/ext/json/json_convert.pl +681 -0
- package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
- package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
- package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
- package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
- package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
- package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
- package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
- package/lib/swipl/library/ext/nlp/isub.pl +162 -0
- package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
- package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
- package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
- package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
- package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
- package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
- package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
- package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
- package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
- package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
- package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
- package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
- package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
- package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
- package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
- package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
- package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
- package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
- package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
- package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
- package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
- package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
- package/lib/swipl/library/ext/ssl/saml.pl +609 -0
- package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
- package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
- package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
- package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
- package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
- package/lib/swipl/library/fastrw.pl +105 -0
- package/lib/swipl/library/files.pl +80 -0
- package/lib/swipl/library/gensym.pl +111 -0
- package/lib/swipl/library/git.pl +1027 -0
- package/lib/swipl/library/hashtable.pl +365 -0
- package/lib/swipl/library/heaps.pl +252 -0
- package/lib/swipl/library/hotfix.pl +239 -0
- package/lib/swipl/library/http/jquery.pl +103 -0
- package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
- package/lib/swipl/library/increval.pl +217 -0
- package/lib/swipl/library/intercept.pl +263 -0
- package/lib/swipl/library/iostream.pl +237 -0
- package/lib/swipl/library/iri_scheme/file.pl +70 -0
- package/lib/swipl/library/lazy_lists.pl +481 -0
- package/lib/swipl/library/listing.pl +1362 -0
- package/lib/swipl/library/lists.pl +860 -0
- package/lib/swipl/library/lynx/INDEX.pl +14 -0
- package/lib/swipl/library/lynx/format.pl +380 -0
- package/lib/swipl/library/lynx/html_style.pl +129 -0
- package/lib/swipl/library/lynx/html_text.pl +865 -0
- package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
- package/lib/swipl/library/macros.pl +451 -0
- package/lib/swipl/library/main.pl +1200 -0
- package/lib/swipl/library/make.pl +197 -0
- package/lib/swipl/library/modules.pl +129 -0
- package/lib/swipl/library/nb_rbtrees.pl +267 -0
- package/lib/swipl/library/nb_set.pl +203 -0
- package/lib/swipl/library/obfuscate.pl +115 -0
- package/lib/swipl/library/occurs.pl +241 -0
- package/lib/swipl/library/operators.pl +182 -0
- package/lib/swipl/library/option.pl +388 -0
- package/lib/swipl/library/optparse.pl +966 -0
- package/lib/swipl/library/ordsets.pl +518 -0
- package/lib/swipl/library/oset.pl +160 -0
- package/lib/swipl/library/pairs.pl +187 -0
- package/lib/swipl/library/persistency.pl +713 -0
- package/lib/swipl/library/pio.pl +47 -0
- package/lib/swipl/library/portray_text.pl +277 -0
- package/lib/swipl/library/pprint.pl +940 -0
- package/lib/swipl/library/predicate_options.pl +975 -0
- package/lib/swipl/library/prolog_autoload.pl +233 -0
- package/lib/swipl/library/prolog_breakpoints.pl +396 -0
- package/lib/swipl/library/prolog_clause.pl +1104 -0
- package/lib/swipl/library/prolog_code.pl +416 -0
- package/lib/swipl/library/prolog_codewalk.pl +1248 -0
- package/lib/swipl/library/prolog_colour.pl +3301 -0
- package/lib/swipl/library/prolog_colour.qlf +0 -0
- package/lib/swipl/library/prolog_config.pl +154 -0
- package/lib/swipl/library/prolog_coverage.pl +1333 -0
- package/lib/swipl/library/prolog_debug.pl +404 -0
- package/lib/swipl/library/prolog_deps.pl +675 -0
- package/lib/swipl/library/prolog_evaluable.pl +234 -0
- package/lib/swipl/library/prolog_format.pl +219 -0
- package/lib/swipl/library/prolog_history.pl +161 -0
- package/lib/swipl/library/prolog_jiti.pl +333 -0
- package/lib/swipl/library/prolog_locale.pl +61 -0
- package/lib/swipl/library/prolog_metainference.pl +307 -0
- package/lib/swipl/library/prolog_pack.pl +3906 -0
- package/lib/swipl/library/prolog_profile.pl +346 -0
- package/lib/swipl/library/prolog_qlfmake.pl +533 -0
- package/lib/swipl/library/prolog_source.pl +1188 -0
- package/lib/swipl/library/prolog_stack.pl +794 -0
- package/lib/swipl/library/prolog_trace.pl +365 -0
- package/lib/swipl/library/prolog_versions.pl +347 -0
- package/lib/swipl/library/prolog_wrap.pl +164 -0
- package/lib/swipl/library/prolog_xref.pl +3090 -0
- package/lib/swipl/library/prolog_xref.qlf +0 -0
- package/lib/swipl/library/pure_input.pl +266 -0
- package/lib/swipl/library/qpforeign.pl +695 -0
- package/lib/swipl/library/qsave.pl +1516 -0
- package/lib/swipl/library/quasi_quotations.pl +300 -0
- package/lib/swipl/library/quintus.pl +437 -0
- package/lib/swipl/library/random.pl +459 -0
- package/lib/swipl/library/rbtrees.pl +1153 -0
- package/lib/swipl/library/readln.pl +256 -0
- package/lib/swipl/library/readutil.pl +304 -0
- package/lib/swipl/library/record.pl +544 -0
- package/lib/swipl/library/rwlocks.pl +172 -0
- package/lib/swipl/library/sandbox.pl +1384 -0
- package/lib/swipl/library/semweb/dc.rdfs +198 -0
- package/lib/swipl/library/semweb/eor.rdfs +95 -0
- package/lib/swipl/library/semweb/owl.owl +287 -0
- package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
- package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
- package/lib/swipl/library/settings.pl +755 -0
- package/lib/swipl/library/shell.pl +462 -0
- package/lib/swipl/library/shlib.pl +670 -0
- package/lib/swipl/library/solution_sequences.pl +439 -0
- package/lib/swipl/library/sort.pl +119 -0
- package/lib/swipl/library/statistics.pl +541 -0
- package/lib/swipl/library/streams.pl +118 -0
- package/lib/swipl/library/strings.pl +469 -0
- package/lib/swipl/library/system.pl +95 -0
- package/lib/swipl/library/tables.pl +381 -0
- package/lib/swipl/library/tableutil.pl +771 -0
- package/lib/swipl/library/tabling.pl +42 -0
- package/lib/swipl/library/terms.pl +457 -0
- package/lib/swipl/library/theme/auto.pl +61 -0
- package/lib/swipl/library/theme/dark.pl +455 -0
- package/lib/swipl/library/theme/light.pl +45 -0
- package/lib/swipl/library/thread.pl +810 -0
- package/lib/swipl/library/thread_pool.pl +508 -0
- package/lib/swipl/library/threadutil.pl +574 -0
- package/lib/swipl/library/tty.pl +316 -0
- package/lib/swipl/library/ugraphs.pl +644 -0
- package/lib/swipl/library/unicode/INDEX.pl +6 -0
- package/lib/swipl/library/unicode/blocks.pl +414 -0
- package/lib/swipl/library/url.pl +1129 -0
- package/lib/swipl/library/utf8.pl +145 -0
- package/lib/swipl/library/varnumbers.pl +221 -0
- package/lib/swipl/library/vm.pl +251 -0
- package/lib/swipl/library/wfs.pl +205 -0
- package/lib/swipl/library/when.pl +263 -0
- package/lib/swipl/library/writef.pl +278 -0
- package/lib/swipl/library/www_browser.pl +251 -0
- package/lib/swipl/library/yall.pl +574 -0
- package/lib/swipl/library/zip.pl +211 -0
- package/lib/swipl/swipl.home +1 -0
- package/lib/vendor/libcrypto.so.3 +0 -0
- package/lib/vendor/libpcre2-8.so.0 +0 -0
- package/lib/vendor/libssl.so.3 +0 -0
- package/lib/vendor/libz.so.1 +0 -0
- package/licenses/OpenSSL-LICENSE.txt +177 -0
- package/licenses/PCRE2-COPYING +5 -0
- package/licenses/README.md +12 -0
- package/licenses/SWI-Prolog-LICENSE +41 -0
- package/licenses/zlib-LICENSE +22 -0
- package/package.json +27 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/* Part of SWISH
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@cs.vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (C): 2018, VU University Amsterdam
|
|
7
|
+
CWI Amsterdam
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
:- module(http_dyn_workers,
|
|
37
|
+
[
|
|
38
|
+
]).
|
|
39
|
+
:- use_module(library(http/thread_httpd)).
|
|
40
|
+
:- use_module(library(debug)).
|
|
41
|
+
:- use_module(library(settings)).
|
|
42
|
+
:- use_module(library(aggregate)).
|
|
43
|
+
|
|
44
|
+
:- setting(http:max_workers, integer, 100,
|
|
45
|
+
"Maximum number of workers to create").
|
|
46
|
+
:- setting(http:worker_idle_limit, number, 10,
|
|
47
|
+
"Terminate a dynamic worker when idle for this time").
|
|
48
|
+
:- setting(http:max_load, number, 10,
|
|
49
|
+
"Maximum load average caused by HTTP workers").
|
|
50
|
+
|
|
51
|
+
/** <module> Dynamically schedule HTTP workers.
|
|
52
|
+
|
|
53
|
+
Most code doesn't need to use this directly; instead use
|
|
54
|
+
library(http/http_server), which combines this library with the
|
|
55
|
+
typical HTTP libraries that most servers need.
|
|
56
|
+
|
|
57
|
+
This module defines hooks into the HTTP framework to dynamically
|
|
58
|
+
schedule worker threads. Dynamic scheduling relieves us from finding a
|
|
59
|
+
good value for the size of the HTTP worker pool.
|
|
60
|
+
|
|
61
|
+
The decision to add a worker follows these rules:
|
|
62
|
+
|
|
63
|
+
- If the load average caused by the worker threads exceeds
|
|
64
|
+
http:max_load, no worker is added.
|
|
65
|
+
- Wait for some time, depending on how close we are to the
|
|
66
|
+
http:max_workers limit.
|
|
67
|
+
- If the worker is still needed, add it.
|
|
68
|
+
|
|
69
|
+
The policy depends on three settings:
|
|
70
|
+
|
|
71
|
+
- http:max_workers
|
|
72
|
+
The maximum number of workers that will be created. Default is
|
|
73
|
+
100.
|
|
74
|
+
- http:worker_idle_limit
|
|
75
|
+
The number of seconds a dynamic worker waits for a new job. If
|
|
76
|
+
no job arrives in time it terminates. Default is 10 seconds.
|
|
77
|
+
- http:max_load
|
|
78
|
+
Max load average created by __the HTTP server__, i.e. the amount
|
|
79
|
+
of CPU time consumed per second. Default is 10.
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
%! http:schedule_workers(+Dict)
|
|
83
|
+
%
|
|
84
|
+
% Called if there is no immediately free worker to handle the
|
|
85
|
+
% incoming request. The request is forwarded to the thread
|
|
86
|
+
% =|__http_scheduler|= as the hook is called in time critical code.
|
|
87
|
+
|
|
88
|
+
:- multifile
|
|
89
|
+
http:schedule_workers/1.
|
|
90
|
+
|
|
91
|
+
http:schedule_workers(Dict) :-
|
|
92
|
+
get_time(Now),
|
|
93
|
+
catch(thread_send_message('__http_scheduler', no_workers(Now, Dict)),
|
|
94
|
+
error(existence_error(message_queue, _), _),
|
|
95
|
+
fail),
|
|
96
|
+
!.
|
|
97
|
+
http:schedule_workers(Dict) :-
|
|
98
|
+
create_scheduler,
|
|
99
|
+
http:schedule_workers(Dict).
|
|
100
|
+
|
|
101
|
+
create_scheduler :-
|
|
102
|
+
catch(thread_create(http_scheduler, _,
|
|
103
|
+
[ alias('__http_scheduler'),
|
|
104
|
+
inherit_from(main),
|
|
105
|
+
debug(false),
|
|
106
|
+
detached(true)
|
|
107
|
+
]),
|
|
108
|
+
error(_,_),
|
|
109
|
+
fail).
|
|
110
|
+
|
|
111
|
+
http_scheduler :-
|
|
112
|
+
get_time(Now),
|
|
113
|
+
http_scheduler(_{ waiting:0,
|
|
114
|
+
time:Now
|
|
115
|
+
}).
|
|
116
|
+
|
|
117
|
+
http_scheduler(State) :-
|
|
118
|
+
( thread_self(Me),
|
|
119
|
+
thread_get_message(Me, Task, [timeout(10)])
|
|
120
|
+
-> true
|
|
121
|
+
; Task = update_load_avg
|
|
122
|
+
),
|
|
123
|
+
( catch(reschedule(Task, State, State1),
|
|
124
|
+
Error,
|
|
125
|
+
( print_message(warning, Error),
|
|
126
|
+
fail))
|
|
127
|
+
-> !,
|
|
128
|
+
http_scheduler(State1)
|
|
129
|
+
; http_scheduler(State)
|
|
130
|
+
).
|
|
131
|
+
|
|
132
|
+
%! reschedule(+Message, +State0, -State) is semidet.
|
|
133
|
+
|
|
134
|
+
reschedule(no_workers(Reported, Dict), State0, State) :-
|
|
135
|
+
update_load_avg(Dict, State0, State, Load),
|
|
136
|
+
setting(http:max_load, MaxLoad),
|
|
137
|
+
( Load > MaxLoad
|
|
138
|
+
-> debug(http(scheduler), 'Load ~1f > ~1f; not adding workers',
|
|
139
|
+
[ Load, MaxLoad ])
|
|
140
|
+
; aggregate_all(count, http_current_worker(Dict.port, _), Workers),
|
|
141
|
+
setting(http:max_workers, MaxWorkers),
|
|
142
|
+
( Workers >= MaxWorkers
|
|
143
|
+
-> debug(http(scheduler),
|
|
144
|
+
'Reached max workers (~D); not adding workers',
|
|
145
|
+
[ MaxWorkers ])
|
|
146
|
+
; Wait is 0.001*(MaxWorkers/max(1, MaxWorkers-Workers)),
|
|
147
|
+
get_time(Now),
|
|
148
|
+
Sleep is max(0.001, Wait + Reported-Now),
|
|
149
|
+
debug(http(scheduler),
|
|
150
|
+
'Waiting: ~w; active: ~w; sleep: ~3f; load: ~1f',
|
|
151
|
+
[Dict.waiting, Workers, Sleep, Load]),
|
|
152
|
+
sleep(Sleep),
|
|
153
|
+
accept_queue(Dict, Queue),
|
|
154
|
+
message_queue_property(Queue, size(Newsize)),
|
|
155
|
+
( Newsize == 0
|
|
156
|
+
-> debug(http(scheduler), 'Drained', [])
|
|
157
|
+
; debug(http(scheduler), 'Size is ~w: adding worker', [Newsize]),
|
|
158
|
+
setting(http:worker_idle_limit, MaxIdle),
|
|
159
|
+
http_add_worker(Dict.port,
|
|
160
|
+
[ max_idle_time(MaxIdle)
|
|
161
|
+
])
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
).
|
|
165
|
+
reschedule(update_load_avg, State0, State) :-
|
|
166
|
+
update_load_avg(_{}, State0, State, _).
|
|
167
|
+
|
|
168
|
+
update_load_avg(_Dict, State, State, Load) :-
|
|
169
|
+
_{stamp:Last, load:Load} :< State.get(load),
|
|
170
|
+
get_time(Now),
|
|
171
|
+
Now - Last < 10.
|
|
172
|
+
update_load_avg(Dict, State0, State, Load) :-
|
|
173
|
+
server_port(Dict, State0, State1, Port),
|
|
174
|
+
!,
|
|
175
|
+
aggregate_all(sum(CPU), worker_cpu(Port, CPU), CPU1),
|
|
176
|
+
get_time(Now),
|
|
177
|
+
( LoadDict = State1.get(load),
|
|
178
|
+
_{stamp:Last, cpu:LastCPU} :< LoadDict
|
|
179
|
+
-> Load0 is (CPU1-LastCPU)/(Now-Last),
|
|
180
|
+
smooth_load(LoadDict, Load0, Load),
|
|
181
|
+
State = State1.put(load, _{stamp:Now, cpu:CPU1, load:Load})
|
|
182
|
+
; State = State1.put(load, _{stamp:Now, cpu:CPU1}),
|
|
183
|
+
Load = 0
|
|
184
|
+
).
|
|
185
|
+
update_load_avg(_, _, _, 0).
|
|
186
|
+
|
|
187
|
+
worker_cpu(Port, CPU) :-
|
|
188
|
+
http_current_worker(Port, Thread),
|
|
189
|
+
catch(thread_statistics(Thread, cputime, CPU), _, fail).
|
|
190
|
+
|
|
191
|
+
server_port(_Dict, State, State, Port) :-
|
|
192
|
+
Port = State.get(port),
|
|
193
|
+
!.
|
|
194
|
+
server_port(Dict, State0, State, Port) :-
|
|
195
|
+
Port = Dict.get(port),
|
|
196
|
+
State = State0.put(port, Port).
|
|
197
|
+
|
|
198
|
+
smooth_load(LoadDict, Load0, Load) :-
|
|
199
|
+
OldLoad = LoadDict.get(load),
|
|
200
|
+
!,
|
|
201
|
+
Load is (5*OldLoad+Load0)/6.
|
|
202
|
+
smooth_load(_, Load, Load).
|
|
203
|
+
|
|
204
|
+
%! accept_queue(+Dict, -Queue)
|
|
205
|
+
%
|
|
206
|
+
% As of 7.7.16, `queue` is a member of the provided dict. For older
|
|
207
|
+
% versions we need a hack.
|
|
208
|
+
|
|
209
|
+
accept_queue(Dict, Queue) :-
|
|
210
|
+
Queue = Dict.get(queue),
|
|
211
|
+
!.
|
|
212
|
+
accept_queue(Dict, Queue) :-
|
|
213
|
+
thread_httpd:current_server(Dict.port, _, _, Queue, _, _),
|
|
214
|
+
!.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2006-2023, University of Amsterdam
|
|
7
|
+
VU University Amsterdam
|
|
8
|
+
SWI-Prolog Solutions b.v.
|
|
9
|
+
All rights reserved.
|
|
10
|
+
|
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
|
12
|
+
modification, are permitted provided that the following conditions
|
|
13
|
+
are met:
|
|
14
|
+
|
|
15
|
+
1. Redistributions of source code must retain the above copyright
|
|
16
|
+
notice, this list of conditions and the following disclaimer.
|
|
17
|
+
|
|
18
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
19
|
+
notice, this list of conditions and the following disclaimer in
|
|
20
|
+
the documentation and/or other materials provided with the
|
|
21
|
+
distribution.
|
|
22
|
+
|
|
23
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
24
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
25
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
26
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
27
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
28
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
29
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
30
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
31
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
32
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
33
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
34
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
:- module(http_error,
|
|
38
|
+
[
|
|
39
|
+
]).
|
|
40
|
+
:- use_module(library(prolog_stack), []).
|
|
41
|
+
:- use_module(library(settings)).
|
|
42
|
+
:- use_module(library(broadcast)).
|
|
43
|
+
:- use_module(library(debug)).
|
|
44
|
+
|
|
45
|
+
/** <module> Decorate uncaught HTTP exceptions with stack-trace
|
|
46
|
+
|
|
47
|
+
This module decorates uncaught exceptions of the user code with a full
|
|
48
|
+
stack-trace and sends error reports to the Prolog console. The behaviour
|
|
49
|
+
can be controlled by
|
|
50
|
+
|
|
51
|
+
- nodebug(http(error))
|
|
52
|
+
After disabling the http(error) debug channel, errors are only sent
|
|
53
|
+
to the client. See nodebug/1 and debug/1.
|
|
54
|
+
- set_setting(http:client_backtrace, false)
|
|
55
|
+
Stop sending stack traces to the client. Note that sending the stack
|
|
56
|
+
trace to the client simplifies debugging, it also provides clues to
|
|
57
|
+
hackers on how to compromise your site. The more information you
|
|
58
|
+
give them, the easier it is to break into your server! See
|
|
59
|
+
set_setting/2 and set_setting_default/2.
|
|
60
|
+
- assert(http_error:suppress_code(Code)) makes this library become
|
|
61
|
+
silent for replies with a matching HTTP status code. This may be
|
|
62
|
+
used to suppress >400 replies that are "normal" in the application.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
:- setting(http:client_backtrace, boolean, true,
|
|
66
|
+
'Make backtrace visible to the client').
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/*******************************
|
|
70
|
+
* LOG ERRORS TO STDERR *
|
|
71
|
+
*******************************/
|
|
72
|
+
|
|
73
|
+
:- debug(http(error)).
|
|
74
|
+
|
|
75
|
+
:- listen(http(Message),
|
|
76
|
+
http_listen(Message)).
|
|
77
|
+
|
|
78
|
+
:- dynamic
|
|
79
|
+
saved_request/2,
|
|
80
|
+
suppress_code/1.
|
|
81
|
+
|
|
82
|
+
http_listen(_) :-
|
|
83
|
+
\+ debugging(http(error)),
|
|
84
|
+
!.
|
|
85
|
+
http_listen(request_start(Id, Request)) :-
|
|
86
|
+
!,
|
|
87
|
+
asserta(saved_request(Id, Request)).
|
|
88
|
+
http_listen(request_finished(Id, Code, Status, _CPU, _Bytes)) :-
|
|
89
|
+
retract(saved_request(Id, Request)),
|
|
90
|
+
!,
|
|
91
|
+
Code >= 400,
|
|
92
|
+
\+ suppress_code(Code),
|
|
93
|
+
memberchk(path(Path), Request),
|
|
94
|
+
memberchk(method(Method), Request),
|
|
95
|
+
upcase_atom(Method, UMethod),
|
|
96
|
+
reply_status(Status, Reply),
|
|
97
|
+
debug(http(error),
|
|
98
|
+
'~w ~w: [~w] ~w', [UMethod, Path, Code, Reply]).
|
|
99
|
+
|
|
100
|
+
reply_status(Status, Reply) :-
|
|
101
|
+
map_exception(Status, Reply),
|
|
102
|
+
!.
|
|
103
|
+
reply_status(Status, Message) :-
|
|
104
|
+
Status = error(_,_),
|
|
105
|
+
!,
|
|
106
|
+
message_to_string(Status, Message).
|
|
107
|
+
reply_status(Status, Status).
|
|
108
|
+
|
|
109
|
+
map_exception(http_reply(bytes(ContentType,Bytes),_), bytes(ContentType,L)) :-
|
|
110
|
+
string_length(Bytes, L). % also does lists
|
|
111
|
+
map_exception(http_reply(Reply), Reply).
|
|
112
|
+
map_exception(http_reply(Reply, _), Reply).
|
|
113
|
+
map_exception(error(existence_error(http_location, Location), _Stack),
|
|
114
|
+
error(404, Location)).
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
/*******************************
|
|
118
|
+
* DECORATE STACK TRACES *
|
|
119
|
+
*******************************/
|
|
120
|
+
|
|
121
|
+
:- dynamic prolog_stack:stack_guard/1.
|
|
122
|
+
:- multifile prolog_stack:stack_guard/1.
|
|
123
|
+
|
|
124
|
+
prolog_stack:stack_guard(httpd_wrapper:wrapper/5).
|
|
125
|
+
prolog_stack:stack_guard(httpd_wrapper:handler_with_output_to/5).
|
|
126
|
+
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2009-2017, University of Amsterdam
|
|
7
|
+
VU University Amsterdam
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
:- module(http_exception,
|
|
37
|
+
[ map_exception_to_http_status/4, % +Exception, -Reply,
|
|
38
|
+
% -HdrExtra, -Context
|
|
39
|
+
in_or_exclude_backtrace/2 % +Error, -CleanedError
|
|
40
|
+
]).
|
|
41
|
+
:- use_module(library(settings), [current_setting/1, setting/2]).
|
|
42
|
+
|
|
43
|
+
/** <module> Map Prolog exceptions to HTTP errors
|
|
44
|
+
|
|
45
|
+
This module maps exceptions from various parts of the HTTP libraries as
|
|
46
|
+
well as exceptions from user handler predicates into meaningful HTTP
|
|
47
|
+
error codes such as 4XX and 5XX codes. For example, existence errors on
|
|
48
|
+
http locations are mapped to 404 while out-of-stack is mapped to 503.
|
|
49
|
+
|
|
50
|
+
This library provides two hooks:
|
|
51
|
+
|
|
52
|
+
- http:map_exception_to_http_status_hook/4 can be used to map
|
|
53
|
+
additional exceptions to any HTTP status code.
|
|
54
|
+
- http:bad_request_error/2 can be extended to map exceptions into 400
|
|
55
|
+
bad request responses.
|
|
56
|
+
|
|
57
|
+
@see http_header.pl, http_wrapper.pl
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
:- multifile
|
|
61
|
+
http:bad_request_error/2, % Formal, Context
|
|
62
|
+
http:map_exception_to_http_status_hook/4. % Exception, Reply, HdrExtra, Ctx
|
|
63
|
+
|
|
64
|
+
%! map_exception_to_http_status(+Exception, -Reply, -HdrExtra, -Context)
|
|
65
|
+
%
|
|
66
|
+
% Map certain exceptions to HTTP status codes. The http(not_modified)
|
|
67
|
+
% provides backward compatibility to http_reply(not_modified).
|
|
68
|
+
|
|
69
|
+
map_exception_to_http_status(Exception, Reply, HdrExtra, Context) :-
|
|
70
|
+
http:map_exception_to_http_status_hook(Exception, Reply, HdrExtra, Context),
|
|
71
|
+
!.
|
|
72
|
+
map_exception_to_http_status(http(not_modified),
|
|
73
|
+
not_modified,
|
|
74
|
+
[connection('Keep-Alive')],
|
|
75
|
+
[]) :- !.
|
|
76
|
+
map_exception_to_http_status(http_reply(Reply),
|
|
77
|
+
Reply,
|
|
78
|
+
[connection(Close)],
|
|
79
|
+
[]) :-
|
|
80
|
+
!,
|
|
81
|
+
keep_alive(Reply, Close).
|
|
82
|
+
map_exception_to_http_status(http_reply(Reply, HdrExtra0),
|
|
83
|
+
Reply,
|
|
84
|
+
HdrExtra,
|
|
85
|
+
Context) :-
|
|
86
|
+
!,
|
|
87
|
+
map_exception_to_http_status(http_reply(Reply, HdrExtra0, []),
|
|
88
|
+
Reply,
|
|
89
|
+
HdrExtra,
|
|
90
|
+
Context).
|
|
91
|
+
|
|
92
|
+
map_exception_to_http_status(http_reply(Reply, HdrExtra0, Context),
|
|
93
|
+
Reply,
|
|
94
|
+
HdrExtra,
|
|
95
|
+
Context):-
|
|
96
|
+
!,
|
|
97
|
+
( memberchk(connection(_), HdrExtra0)
|
|
98
|
+
-> HdrExtra = HdrExtra0
|
|
99
|
+
; HdrExtra = [connection(Close)|HdrExtra0],
|
|
100
|
+
keep_alive(Reply, Close)
|
|
101
|
+
).
|
|
102
|
+
map_exception_to_http_status(error(existence_error(http_location, Location), _),
|
|
103
|
+
not_found(Location),
|
|
104
|
+
[connection(close)],
|
|
105
|
+
[]) :- !.
|
|
106
|
+
map_exception_to_http_status(error(permission_error(http_method, Method, Location), _),
|
|
107
|
+
method_not_allowed(Method, Location),
|
|
108
|
+
[connection(close)],
|
|
109
|
+
[]) :- !.
|
|
110
|
+
map_exception_to_http_status(error(permission_error(_, http_location, Location), _),
|
|
111
|
+
forbidden(Location),
|
|
112
|
+
[connection(close)],
|
|
113
|
+
[]) :- !.
|
|
114
|
+
map_exception_to_http_status(error(threads_in_pool(_Pool), _),
|
|
115
|
+
busy,
|
|
116
|
+
[connection(close)],
|
|
117
|
+
[]) :- !.
|
|
118
|
+
map_exception_to_http_status(E,
|
|
119
|
+
resource_error(E),
|
|
120
|
+
[connection(close)],
|
|
121
|
+
[]) :-
|
|
122
|
+
is_resource_error(E),
|
|
123
|
+
!.
|
|
124
|
+
map_exception_to_http_status(E,
|
|
125
|
+
bad_request(E2),
|
|
126
|
+
[connection(close)],
|
|
127
|
+
[]) :-
|
|
128
|
+
bad_request_exception(E),
|
|
129
|
+
!,
|
|
130
|
+
discard_stack_trace(E, E2).
|
|
131
|
+
map_exception_to_http_status(E,
|
|
132
|
+
server_error(E),
|
|
133
|
+
[connection(close)],
|
|
134
|
+
[]).
|
|
135
|
+
|
|
136
|
+
is_resource_error(error(resource_error(_), _)).
|
|
137
|
+
|
|
138
|
+
bad_request_exception(error(Error, Context)) :-
|
|
139
|
+
nonvar(Error),
|
|
140
|
+
bad_request_error(Error, ContextGeneral),
|
|
141
|
+
( var(ContextGeneral)
|
|
142
|
+
-> true
|
|
143
|
+
; Context = context(_Stack, ContextInstance)
|
|
144
|
+
-> subsumes_term(ContextGeneral, ContextInstance)
|
|
145
|
+
),
|
|
146
|
+
!.
|
|
147
|
+
|
|
148
|
+
bad_request_error(Error, Context) :-
|
|
149
|
+
http:bad_request_error(Error, Context).
|
|
150
|
+
bad_request_error(Error, Context) :-
|
|
151
|
+
default_bad_request_error(Error, Context).
|
|
152
|
+
|
|
153
|
+
default_bad_request_error(domain_error(http_request, _), _).
|
|
154
|
+
default_bad_request_error(existence_error(http_parameter, _), _).
|
|
155
|
+
default_bad_request_error(type_error(_, _), http_parameter(_)).
|
|
156
|
+
default_bad_request_error(syntax_error(http_request_line(_)), _).
|
|
157
|
+
default_bad_request_error(syntax_error(http_request(_)), _).
|
|
158
|
+
default_bad_request_error(syntax_error(_), in_http_request).
|
|
159
|
+
|
|
160
|
+
discard_stack_trace(error(Formal, context(_,Msg)),
|
|
161
|
+
error(Formal, context(_,Msg))).
|
|
162
|
+
|
|
163
|
+
%! in_or_exclude_backtrace(+ErrorIn, -ErrorOut)
|
|
164
|
+
%
|
|
165
|
+
% Remove the stacktrace from the exception, unless setting
|
|
166
|
+
% `http:client_backtrace` is `true`.
|
|
167
|
+
|
|
168
|
+
in_or_exclude_backtrace(Error, Error) :-
|
|
169
|
+
current_setting(http:client_backtrace),
|
|
170
|
+
setting(http:client_backtrace, true),
|
|
171
|
+
!.
|
|
172
|
+
in_or_exclude_backtrace(Error0, Error) :-
|
|
173
|
+
discard_stack_trace(Error0, Error),
|
|
174
|
+
!.
|
|
175
|
+
in_or_exclude_backtrace(Exception, Exception).
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
%! http:bad_request_error(+Formal, -ContextTemplate) is semidet.
|
|
179
|
+
%
|
|
180
|
+
% If an exception of the term error(Formal, context(Stack,
|
|
181
|
+
% Context)) is caught and subsumes_term(ContextTemplate, Context)
|
|
182
|
+
% is true, translate the exception into an HTTP 400 exception. If
|
|
183
|
+
% the exception contains a stack-trace, this is stripped from the
|
|
184
|
+
% response.
|
|
185
|
+
%
|
|
186
|
+
% The idea behind this hook is that applications can raise 400
|
|
187
|
+
% responses by
|
|
188
|
+
%
|
|
189
|
+
% - Throwing a specific (error) exception and adding a rule
|
|
190
|
+
% to this predicate to interpret this as 400.
|
|
191
|
+
% - Define rules for prolog:error_message//1 to formulate
|
|
192
|
+
% an appropriate message.
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
%! keep_alive(+Reply) is semidet.
|
|
196
|
+
%! keep_alive(+Reply, -Connection) is det.
|
|
197
|
+
%
|
|
198
|
+
% If true for Reply, the default is to keep the connection open.
|
|
199
|
+
|
|
200
|
+
keep_alive(Reply, Connection) :-
|
|
201
|
+
( keep_alive(Reply)
|
|
202
|
+
-> Connection = 'Keep-Alive'
|
|
203
|
+
; Connection = close
|
|
204
|
+
).
|
|
205
|
+
|
|
206
|
+
keep_alive(not_modified).
|
|
207
|
+
keep_alive(bytes(_Type, _Bytes)).
|
|
208
|
+
keep_alive(file(_Type, _File)).
|
|
209
|
+
keep_alive(tmp_file(_Type, _File)).
|
|
210
|
+
keep_alive(stream(_In, _Len)).
|
|
211
|
+
keep_alive(cgi_stream(_In, _Len)).
|
|
212
|
+
keep_alive(switching_protocols(_Goal, _)).
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
/*******************************
|
|
216
|
+
* IDE SUPPORT *
|
|
217
|
+
*******************************/
|
|
218
|
+
|
|
219
|
+
% See library('trace/exceptions')
|
|
220
|
+
|
|
221
|
+
:- multifile
|
|
222
|
+
prolog:general_exception/2.
|
|
223
|
+
|
|
224
|
+
prolog:general_exception(http_reply(_), http_reply(_)).
|
|
225
|
+
prolog:general_exception(http_reply(_,_), http_reply(_,_)).
|