97 lines
3.9 KiB
JavaScript
97 lines
3.9 KiB
JavaScript
import puppeteer from "puppeteer-core";
|
|
|
|
const url = process.argv[2] || "https://tile-server.ru/#14/55.7558/37.6173";
|
|
const browser = await puppeteer.launch({
|
|
executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
|
|
headless: "new",
|
|
args: ["--no-sandbox", "--use-gl=angle", "--enable-webgl"]
|
|
});
|
|
const page = await browser.newPage();
|
|
await page.setViewport({ width: 1400, height: 900 });
|
|
await page.evaluateOnNewDocument(() => {
|
|
const wrap = () => {
|
|
if (!window.maplibregl || window.__mapHooked) {
|
|
return;
|
|
}
|
|
window.__mapHooked = true;
|
|
const Orig = window.maplibregl.Map;
|
|
window.maplibregl.Map = function (options) {
|
|
const inner = options.transformRequest;
|
|
options.transformRequest = (reqUrl, resourceType) => {
|
|
console.log("TRANSFORM", resourceType, reqUrl);
|
|
return inner ? inner(reqUrl, resourceType) : { url: reqUrl };
|
|
};
|
|
const map = new Orig(options);
|
|
map.on("error", (e) => {
|
|
const err = e.error;
|
|
console.log("MAPERR", err && (err.message || String(err)), err && err.status, err && err.url);
|
|
});
|
|
window.__map = map;
|
|
return map;
|
|
};
|
|
};
|
|
setInterval(wrap, 5);
|
|
});
|
|
page.on("console", (msg) => console.log("CONSOLE", msg.type(), msg.text()));
|
|
page.on("pageerror", (err) => console.log("PAGEERROR", err.message));
|
|
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 45000 });
|
|
await new Promise((r) => setTimeout(r, 10000));
|
|
const info = await page.evaluate(async () => {
|
|
const map = window.__map;
|
|
const layers = ["water", "building", "transportation", "boundary", "place"];
|
|
const source = {};
|
|
const rendered = {};
|
|
if (map) {
|
|
for (const layer of layers) {
|
|
try {
|
|
source[layer] = map.querySourceFeatures("openmaptiles", { sourceLayer: layer }).length;
|
|
} catch (e) {
|
|
source[layer] = String(e);
|
|
}
|
|
}
|
|
const feats = map.queryRenderedFeatures();
|
|
for (const f of feats) {
|
|
rendered[f.layer.id] = (rendered[f.layer.id] || 0) + 1;
|
|
}
|
|
}
|
|
const cacheInfo = [];
|
|
try {
|
|
const caches = map.style.sourceCaches || map.style._sourceCaches;
|
|
const cache = caches.openmaptiles || caches["openmaptiles"];
|
|
const tiles = cache._tiles || cache.tiles || {};
|
|
for (const [id, tile] of Object.entries(tiles)) {
|
|
cacheInfo.push({
|
|
id,
|
|
state: tile.state,
|
|
keys: Object.keys(tile).sort(),
|
|
raw: tile.rawTileData ? tile.rawTileData.byteLength : null,
|
|
latest: tile.latestRawTileData ? tile.latestRawTileData.byteLength : null,
|
|
vt: tile.vtLayers ? Object.keys(tile.vtLayers) : null,
|
|
idx: Boolean(tile.latestFeatureIndex)
|
|
});
|
|
}
|
|
} catch (e) {
|
|
cacheInfo.push({ err: String(e) });
|
|
}
|
|
const probeFetch = await fetch("https://tile-server.ru/api/v1/tiles/central-fed-district/14/9904/5121.pbf?v=2");
|
|
const probeBuf = await probeFetch.arrayBuffer();
|
|
return {
|
|
hash: location.hash,
|
|
live: document.getElementById("live-coords")?.textContent,
|
|
areTilesLoaded: map.areTilesLoaded(),
|
|
source,
|
|
rendered,
|
|
renderedTotal: map ? map.queryRenderedFeatures().length : null,
|
|
cacheInfo,
|
|
mainFetch: {
|
|
status: probeFetch.status,
|
|
type: probeFetch.headers.get("content-type"),
|
|
encoding: probeFetch.headers.get("content-encoding"),
|
|
len: probeBuf.byteLength
|
|
}
|
|
};
|
|
});
|
|
console.log("INFO", JSON.stringify(info));
|
|
await page.screenshot({ path: "c:/Users/ggpo1/Desktop/tile-server/.tmp-tiles/shots/prod-hook.png" });
|
|
await browser.close();
|