diff --git a/tiles/package-lock.json b/tiles/package-lock.json index 6724eb5..ecdc93c 100644 --- a/tiles/package-lock.json +++ b/tiles/package-lock.json @@ -8,7 +8,7 @@ "name": "worker", "version": "0.0.0", "dependencies": { - "@influxdata/influxdb3-client": "^0.9.0" + "@influxdata/influxdb-client": "^1.34.0" }, "devDependencies": { "@cloudflare/vitest-pool-workers": "^0.4.5", @@ -612,35 +612,6 @@ "node": ">=14" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz", - "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==", - "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -676,18 +647,10 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "node_modules/@influxdata/influxdb3-client": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@influxdata/influxdb3-client/-/influxdb3-client-0.9.0.tgz", - "integrity": "sha512-F22OIhlXOgS5tNs8iUZblIFcKVe8UNAwJr8GL6PgqpgVEiuAKJnwXZCo6eFFVVVdiST6UqjKMhDxl/Vl5o7hAA==", - "dependencies": { - "@grpc/grpc-js": "^1.9.9", - "@protobuf-ts/grpc-transport": "^2.9.1", - "@protobuf-ts/grpcweb-transport": "^2.9.1", - "@protobuf-ts/runtime-rpc": "^2.9.1", - "apache-arrow": "^16.0.0", - "grpc-web": "^1.5.0" - } + "node_modules/@influxdata/influxdb-client": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/@influxdata/influxdb-client/-/influxdb-client-1.34.0.tgz", + "integrity": "sha512-pZ0YW593az8wtPbwEYzpDZrQ+He+UmcQb30VZOYWftHsAUXY19NbfHuIJgly/h/qPfiN9zeJp7NbKFEJKMt/Ww==" }, "node_modules/@jest/schemas": { "version": "29.6.3", @@ -727,15 +690,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -771,94 +725,6 @@ "node": ">= 8" } }, - "node_modules/@protobuf-ts/grpc-transport": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/grpc-transport/-/grpc-transport-2.9.4.tgz", - "integrity": "sha512-CgjTR3utmkMkkThpfgtOz9tNR9ZARbNoQYL7TCKqFU2sgAX0LgzAkwOx+sfgtUsZn9J08+yvn307nNJdYocLRA==", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.4", - "@protobuf-ts/runtime-rpc": "^2.9.4" - }, - "peerDependencies": { - "@grpc/grpc-js": "^1.6.0" - } - }, - "node_modules/@protobuf-ts/grpcweb-transport": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/grpcweb-transport/-/grpcweb-transport-2.9.4.tgz", - "integrity": "sha512-6aQgwPTgX6FkqWqmNts3uk8T/C5coJoH7U87zgaZY/Wo2EVa9SId5bXTM8uo4WR+CN8j9W4c9ij1yG13Hc3xUw==", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.4", - "@protobuf-ts/runtime-rpc": "^2.9.4" - } - }, - "node_modules/@protobuf-ts/runtime": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.4.tgz", - "integrity": "sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==" - }, - "node_modules/@protobuf-ts/runtime-rpc": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.4.tgz", - "integrity": "sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA==", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.4" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@rollup/plugin-inject": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", @@ -1130,14 +996,6 @@ "dev": true, "peer": true }, - "node_modules/@swc/helpers": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", - "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -1148,16 +1006,6 @@ "@types/node": "*" } }, - "node_modules/@types/command-line-args": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==" - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==" - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -1219,6 +1067,7 @@ "version": "22.1.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "dev": true, "dependencies": { "undici-types": "~6.13.0" } @@ -1636,6 +1485,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1666,52 +1516,12 @@ "node": ">= 8" } }, - "node_modules/apache-arrow": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-16.1.0.tgz", - "integrity": "sha512-G6GiM6tzPDdGnKUnVkvVr1Nt5+hUaCMBISiasMSiJwI5L5GKDv5Du7Avc2kxlFfB/LEK2LTqh2GKSxutMdf8vQ==", - "dependencies": { - "@swc/helpers": "^0.5.10", - "@types/command-line-args": "^5.2.3", - "@types/command-line-usage": "^5.0.4", - "@types/node": "^20.12.7", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.1", - "flatbuffers": "^24.3.25", - "json-bignum": "^0.0.3", - "tslib": "^2.6.2" - }, - "bin": { - "arrow2csv": "bin/arrow2csv.cjs" - } - }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/apache-arrow/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -2289,6 +2099,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2300,24 +2111,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, "node_modules/chalk/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2381,23 +2179,11 @@ "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2408,51 +2194,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", - "engines": { - "node": ">=12.17" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -2883,11 +2626,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -3067,14 +2805,6 @@ "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3615,17 +3345,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3656,11 +3375,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatbuffers": { - "version": "24.3.25", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-24.3.25.tgz", - "integrity": "sha512-3HDgPbgiwWMI9zVB7VYBHaMrbOO7Gm0v+yD2FV/sCKj+9NDeVL7BOBYUuhWAQGKWOzBo8S9WdMvV0eixO233XQ==" - }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", @@ -3750,14 +3464,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -3935,11 +3641,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/grpc-web": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.5.0.tgz", - "integrity": "sha512-y1tS3BBIoiVSzKTDF3Hm7E8hV2n7YY7pO0Uo7depfWJqKzWE+SKr0jvHNIJsJJYILQlpYShpi/DRJJMbosgDMQ==" - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -3953,6 +3654,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4330,14 +4032,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -4567,14 +4261,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4659,22 +4345,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -5552,29 +5228,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/protobufjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", - "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5755,14 +5408,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6325,19 +5970,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -6391,6 +6023,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6449,6 +6082,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6468,26 +6102,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table-layout": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", - "dependencies": { - "array-back": "^6.2.2", - "wordwrapjs": "^5.1.0" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "engines": { - "node": ">=12.17" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6581,7 +6195,8 @@ "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/tty-browserify": { "version": "0.0.1", @@ -6722,14 +6337,6 @@ "node": ">=14.17" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "engines": { - "node": ">=8" - } - }, "node_modules/ufo": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", @@ -6766,7 +6373,8 @@ "node_modules/undici-types": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "dev": true }, "node_modules/unenv": { "name": "unenv-nightly", @@ -7534,14 +7142,6 @@ "node": ">=0.10.0" } }, - "node_modules/wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", - "engines": { - "node": ">=12.17" - } - }, "node_modules/workerd": { "version": "1.20240725.0", "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240725.0.tgz", @@ -7605,36 +7205,6 @@ } } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7677,39 +7247,6 @@ "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", "dev": true }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", diff --git a/tiles/package.json b/tiles/package.json index c6ecdc2..54c6fd2 100644 --- a/tiles/package.json +++ b/tiles/package.json @@ -27,6 +27,6 @@ "wrangler": "^3.60.3" }, "dependencies": { - "@influxdata/influxdb3-client": "^0.9.0" + "@influxdata/influxdb-client": "^1.34.0" } } diff --git a/tiles/src/index.ts b/tiles/src/index.ts index 2c95867..dc0f111 100644 --- a/tiles/src/index.ts +++ b/tiles/src/index.ts @@ -1,4 +1,4 @@ -import { monitorAsyncFunction } from './monitor'; +import { Metrics } from './monitor'; import { PMTiles } from './pmtiles/pmtiles'; import { Header } from './pmtiles/types'; import { tileJSON } from './pmtiles/utils'; @@ -49,85 +49,91 @@ export function parseUrl(request: Request): PMTilesParams { return { requestType: undefined, url }; } -// export let context: ExecutionContext | undefined; -// export let defaultTags: { [key: string]: string }; +async function handleRequest(request: Request, env: Env, ctx: ExecutionContext) { + const metrics = Metrics.getMetrics(); + const cacheResponse = async (response: Response): Promise => { + if (!response.body) throw new Error('Response body is undefined'); + const responseBody = await response.arrayBuffer(); + ctx.waitUntil(cache.put(request.url, new Response(responseBody, response))); + return new Response(responseBody, response); + }; + + const handleTileRequest = async (z: string, x: string, y: string, pmTiles: PMTiles, respHeaders: Headers) => { + const tile = await pmTiles.getTile(+z, +x, +y); + if (!tile) return new Response('Tile not found', { status: 404 }); + respHeaders.set('Content-Type', 'application/x-protobuf'); + respHeaders.set('content-encoding', 'gzip'); + return cacheResponse(new Response(tile.data, { headers: respHeaders, status: 200, encodeBody: 'manual' })); + }; + + async function handleJsonRequest() { + const { version, url } = pmTilesParams as PMTilesJsonParams; + const header = pmTiles.getHeader(); + const metadata = await pmTiles.getMetadata(); + respHeaders.set('Content-Type', 'application/json'); + const tileJson = tileJSON({ header, metadata, hostname: url.hostname, version }); + return cacheResponse(new Response(JSON.stringify(tileJson), { headers: respHeaders, status: 200 })); + } -export default { - async fetch(request, env, ctx): Promise { - // defaultTags = { - // colo: request.cf?.colo ?? '', - // rayId: request.headers.get('cf-ray') ?? '', - // asOrg: request.cf?.asOrganization ?? '', - // }; - // context = ctx; - if (!globalThis.source) { - globalThis.source = new R2Source(env); - } + if (request.method.toUpperCase() !== 'GET') { + return new Response(undefined, { status: 405 }); + } - const cacheResponse = async (response: Response): Promise => { - if (!response.body) throw new Error('Response body is undefined'); - const responseBody = await response.arrayBuffer(); - ctx.waitUntil(cache.put(request.url, new Response(responseBody, response))); - return new Response(responseBody, response); - }; + const cache = caches.default; + const cached = await metrics.monitorAsyncFunction({ name: 'match_request_from_cdn' }, (url) => cache.match(url))( + request.url, + ); + if (cached) { + const cacheHeaders = new Headers(cached.headers); + const encodeBody = cacheHeaders.has('content-encoding') ? 'manual' : 'automatic'; + return new Response(cached.body, { + headers: cacheHeaders, + status: cached.status, + encodeBody, + }); + } - if (request.method.toUpperCase() !== 'GET') { - return new Response(undefined, { status: 405 }); + const pmTiles = await metrics.monitorAsyncFunction({ name: 'pmtiles_init' }, PMTiles.init)( + source, + globalThis.headerCache, + env.KV, + ctx, + ); + + const respHeaders = new Headers(); + respHeaders.set('Cache-Control', `public, max-age=${60 * 60 * 24 * 31}`); + respHeaders.set('Access-Control-Allow-Origin', '*'); + respHeaders.set('Vary', 'Origin'); + respHeaders.set('PMTiles-File-Identifier', env.PMTILES_FILE_HASH); + + const pmTilesParams = parseUrl(request); + + try { + if (pmTilesParams.requestType === 'tile') { + const { z, x, y, version } = pmTilesParams as PMTilesTileParams; + return await metrics.monitorAsyncFunction( + { name: 'tile_request', extraTags: { z, x, y, version } }, + handleTileRequest, + )(z, x, y, pmTiles, respHeaders); + } else if (pmTilesParams.requestType === 'json') { + const { version } = pmTilesParams as PMTilesJsonParams; + return await metrics.monitorAsyncFunction({ name: 'json_request', extraTags: { version } }, handleJsonRequest)(); } + } catch (e) { + console.error(e); + return new Response('Internal Server Error', { status: 500 }); + } - const cache = caches.default; - const cached = await monitorAsyncFunction('match-request-from-cdn', (url) => cache.match(url))(request.url); - if (cached) { - const cacheHeaders = new Headers(cached.headers); - for (const [key, value] of cacheHeaders.entries()) { - console.log(`${key}: ${value}`); - } - const encodeBody = cacheHeaders.has('content-encoding') ? 'manual' : 'automatic'; - console.log('encodeBody', encodeBody); - return new Response(cached.body, { - headers: cacheHeaders, - status: cached.status, - encodeBody, - }); - } + return cacheResponse(new Response('Invalid URL', { status: 404 })); +} - const pmTiles = await monitorAsyncFunction('pmtiles-init', PMTiles.init)( - source, - globalThis.headerCache, - env.KV, - ctx, - ); - - const respHeaders = new Headers(); - respHeaders.set('Cache-Control', `public, max-age=${60 * 60 * 24 * 31}`); - respHeaders.set('Access-Control-Allow-Origin', '*'); - respHeaders.set('Vary', 'Origin'); - respHeaders.set('PMTiles-File-Identifier', env.PMTILES_FILE_HASH); - - const pmTilesParams = parseUrl(request); - - try { - if (pmTilesParams.requestType === 'tile') { - const { z, x, y } = pmTilesParams as PMTilesTileParams; - console.log(z, x, y); - const tile = await pmTiles.getTile(+z, +x, +y); - if (!tile) return new Response('Tile not found', { status: 404 }); - respHeaders.set('Content-Type', 'application/x-protobuf'); - respHeaders.set('content-encoding', 'gzip'); - return cacheResponse(new Response(tile.data, { headers: respHeaders, status: 200, encodeBody: 'manual' })); - } else if (pmTilesParams.requestType === 'json') { - const { version, url } = pmTilesParams as PMTilesJsonParams; - const header = pmTiles.getHeader(); - const metadata = await pmTiles.getMetadata(); - respHeaders.set('Content-Type', 'application/json'); - const tileJson = tileJSON({ header, metadata, hostname: url.hostname, version }); - return cacheResponse(new Response(JSON.stringify(tileJson), { headers: respHeaders, status: 200 })); - } - } catch (e) { - console.error(e); - return new Response('Internal Server Error', { status: 500 }); +export default { + async fetch(request, env, ctx): Promise { + const metrics = Metrics.initialiseMetrics('tiles', request, ctx, env); + if (!globalThis.source) { + globalThis.source = new R2Source(env); } - return cacheResponse(new Response('Invalid URL', { status: 404 })); + return metrics.monitorAsyncFunction({ name: 'handle_request' }, handleRequest)(request, env, ctx); }, } satisfies ExportedHandler; diff --git a/tiles/src/monitor.ts b/tiles/src/monitor.ts index 4b467cc..dffe4d5 100644 --- a/tiles/src/monitor.ts +++ b/tiles/src/monitor.ts @@ -1,6 +1,6 @@ // eslint-disable-next-line @typescript-eslint/no-explicit-any -import { Point } from '@influxdata/influxdb3-client'; +import { Point } from '@influxdata/influxdb-client'; type AsyncFn = (...args: any[]) => Promise; @@ -10,7 +10,6 @@ type Class = { new (...args: any[]): any }; type Options = Partial<{ monitorInvocations?: boolean; acceptedErrors?: Class[]; - thisArg?: any; }>; const startTimer = () => { @@ -22,56 +21,87 @@ const startTimer = () => { }; }; -export function monitorAsyncFunction( - operationName: string, - call: T, - options: Options = { monitorInvocations: true, acceptedErrors: [], thisArg: undefined }, -): (...args: Parameters) => Promise>> { - const { monitorInvocations, acceptedErrors } = options; - const point = Point.measurement(operationName); - // for (const [key, value] of Object.entries(defaultTags)) { - // point.setTag(key, value); - // } - return async (...args: Parameters) => { - if (monitorInvocations) { - console.log(`${operationName}-invocation`); - point.setIntegerField('invocation', 1); +export class Metrics { + private static _instance: Metrics; + private readonly ctx: ExecutionContext; + private readonly request: Request; + private readonly env: Env; + private readonly defaultTags: { [key: string]: string }; + private readonly operationPrefix: string; + + private constructor( + operationPrefix: string, + request: Request, + ctx: ExecutionContext, + env: Env, + ) { + this.request = request; + this.ctx = ctx; + this.env = env; + this.defaultTags = { + colo: request.cf?.colo ?? '', + rayId: request.headers.get('cf-ray') ?? '', + asOrg: request.cf?.asOrganization ?? '', + scriptTag: env.CF_VERSION_METADATA.tag, + scriptId: env.CF_VERSION_METADATA.id, + }; + this.operationPrefix = operationPrefix; + } + + public static initialiseMetrics( + operationPrefix: string, + request: Request, + ctx: ExecutionContext, + env: Env, + ) { + this._instance = new Metrics(operationPrefix, request, ctx, env); + return this._instance; + } + + static getMetrics() { + return this._instance; + } + + monitorAsyncFunction( + operation: { name: string; extraTags?: { [key: string]: string } }, + call: T, + options: Options = {}, + ): (...args: Parameters) => Promise>> { + const { name: operationName, extraTags = {} } = operation; + const { monitorInvocations = true, acceptedErrors = [] } = options; + + const point = new Point(`${this.operationPrefix}_${operationName}`); + for (const [key, value] of Object.entries({ ...this.defaultTags, ...extraTags })) { + point.tag(key, value); } - const timer = startTimer(); - try { - return options.thisArg ? await call.bind(options.thisArg)(...args) : await call(...args); - } catch (e) { - if (!acceptedErrors || !acceptedErrors.some((acceptedError) => e instanceof acceptedError)) { - console.log(`${operationName}-errors`); - point.setIntegerField('errors', 1); + return async (...args: Parameters) => { + if (monitorInvocations) { + console.log(`${operationName}_invocation`); + point.intField('invocation', 1); } - throw e; - } finally { - console.log(`${operationName}-duration`, timer.elapsedMs()); - point.setIntegerField('duration', timer.elapsedMs()); - console.log(point.toLineProtocol()?.toString()); - await fetch('https://cf-workers.monitoring.immich.cloud/write', { - method: 'POST', - body: point.toLineProtocol()?.toString(), - headers: { - 'User-Agent': 'InfluxDBClient/1.0', - Authorization: `Token YvGUMEDeN5UFk3iJjvGsGMcZNQmNQzlVszYmJkJ2`, - Accept: '*/*', - 'Content-Type': 'application/x-www-form-urlencoded', - }, - redirect: 'follow', - }) - .then((response) => { - console.log('url', response.url); - console.log('status', response.status); - console.log('location header', response.headers.get('Location')); - for (const [key, value] of response.headers.entries()) { - console.log('fetch headers', `${key}: ${value}`); + const timer = startTimer(); + return call(...args) + .catch((e) => { + if (!acceptedErrors || !acceptedErrors.some((acceptedError) => e instanceof acceptedError)) { + console.log(`${operationName}_errors`); + point.intField('errors', 1); } + throw e; }) - .catch((error) => { - console.error('error', error); + .finally(() => { + console.log(`${operationName}_duration`, timer.elapsedMs()); + point.intField('duration', timer.elapsedMs()); + console.log(point.toLineProtocol()?.toString()); + this.ctx.waitUntil( + fetch('https://cf-workers.monitoring.immich.cloud/write', { + method: 'POST', + body: point.toLineProtocol()?.toString(), + headers: { + Authorization: `Token `, + }, + }), + ); }); - } - }; + }; + } } diff --git a/tiles/src/pmtiles/pmtiles.ts b/tiles/src/pmtiles/pmtiles.ts index 77631ac..60b5e4a 100644 --- a/tiles/src/pmtiles/pmtiles.ts +++ b/tiles/src/pmtiles/pmtiles.ts @@ -1,4 +1,4 @@ -import { monitorAsyncFunction } from '../monitor'; +import { Metrics } from '../monitor'; import { R2Source, RangeResponse } from '../r2'; import { Directory, Header, Metadata } from './types'; import { bytesToHeader, decompress, deserializeIndex, findTile, zxyToTileId } from './utils'; @@ -116,11 +116,10 @@ export class PMTiles { offset = entry.offset; length = entry.length; if (entry.runLength !== 0) break; // Run length of 0 is a directory, anything else is a tile - const leafDirectory = await monitorAsyncFunction('get-leaf-directory', this.getDirectory, { thisArg: this })( - header.leafDirectoryOffset + offset, - length, - header, - ); + const leafDirectory = await Metrics.getMetrics().monitorAsyncFunction( + { name: 'get_leaf_directory' }, + (offset, length, header) => this.getDirectory(offset, length, header), + )(header.leafDirectoryOffset + offset, length, header); entry = findTile(leafDirectory.entries, tileId); } const tile = await this.source.getBytesFromArchive({ @@ -131,7 +130,7 @@ export class PMTiles { } async getMetadata(): Promise { - const header = await this.getHeader(); + const header = this.getHeader(); const resp = await this.source.getBytesFromArchive({ offset: header.jsonMetadataOffset, diff --git a/tiles/worker-configuration.d.ts b/tiles/worker-configuration.d.ts index cd56b4d..5eacf1c 100644 --- a/tiles/worker-configuration.d.ts +++ b/tiles/worker-configuration.d.ts @@ -1,9 +1,10 @@ -// Generated by Wrangler on Tue Aug 06 2024 12:16:44 GMT+0100 (British Summer Time) +// Generated by Wrangler on Wed Aug 07 2024 15:42:16 GMT+0100 (British Summer Time) // by running `wrangler types` interface Env { - KV: KVNamespace; - PMTILES_FILE_NAME: 'v1.pmtiles'; - PMTILES_FILE_HASH: 'example-dev-hash'; - BUCKET: R2Bucket; + KV: KVNamespace; + PMTILES_FILE_NAME: "v1.pmtiles"; + PMTILES_FILE_HASH: "example-dev-hash"; + BUCKET: R2Bucket; + CF_VERSION_METADATA: { id: string; tag: string }; } diff --git a/tiles/wrangler.toml b/tiles/wrangler.toml index 7ec6487..6b340a3 100644 --- a/tiles/wrangler.toml +++ b/tiles/wrangler.toml @@ -17,6 +17,9 @@ binding = "BUCKET" bucket_name = "tiles" preview_bucket_name = "tiles" +[version_metadata] +binding = "CF_VERSION_METADATA" + # Define environment variables for your Workers script [vars] PMTILES_FILE_NAME = "v1.pmtiles"