/* * @Author: your name * @Date: 2025-04-14 11:15:35 * @LastEditTime: 2025-05-21 15:10:19 * @LastEditors: bogon * @Description: In User Settings Edit * @FilePath: /performance-test/downLoadServer/src/server/utils/chartsCom/HeatmapCharts.js */ import puppeteer from "puppeteer"; import fs from "fs-extra"; import path from "path"; import FormData from "form-data"; import { colorSchemes } from "../colors.js"; import axios from "axios"; export const generateHeatmapChart = async (data, bucketName, objectName) => { try { console.log("开始生成热力图..."); console.log("数据:", data); // 创建临时目录 const tempDir = path.join(process.cwd(), "images"); await fs.ensureDir(tempDir); const tempFilePath = path.join( tempDir, `temp_heatmap_chart_${Date.now()}.jpeg` ); // 获取 plotly.js 的绝对路径 const plotlyPath = path.join( process.cwd(), "src", "public", "js", "plotly-3.0.1.min.js" ); const plotlyContent = await fs.readFile(plotlyPath, "utf-8"); // 创建浏览器实例 const browser = await puppeteer.launch({ headless: "new", executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径 args: ["--no-sandbox", "--disable-setuid-sandbox"], }); try { const page = await browser.newPage(); // 准备图表数据 const chartDataset = data.data[0]; const trace = { type: "heatmap", x: chartDataset.xData, y: chartDataset.yData, z: chartDataset.ZData, zmin: 0, // 最小值 zmax: 100, // 最大值 colorscale: [ [0, "#E1ECC5"], // 0% - 50% [0.5, "#E1ECC5"], // 50% [0.5, "#9BC8C1"], // 50% - 85% [0.85, "#9BC8C1"], // 85% [0.85, "#5783B3"], // 85% - 100% [1, "#5783B3"], // 100% ], text: chartDataset.ZData.map((row) => row.map((value) => value.toString()) ), hoverinfo: "text", // Hover时显示文本 showscale: true, // 显示颜色条 texttemplate: "%{text}", // 在热图块上显示z值 xgap: 2, // 设置水平方向格子之间的间距 ygap: 2, // 设置垂直方向格子之间的间距 }; // 准备布局配置 const layout = { showlegend: false, autosize: true, title: { text: chartDataset.title, font: { size: 16, weight: "bold", }, }, xaxis: { title: data.xaixs || "X轴", tickvals: chartDataset.xData, ticktext: chartDataset.xData, tickmode: "array", tickfont: { size: 12, }, }, yaxis: { title: data.yaixs || "Y轴", tickvals: chartDataset.yData, ticktext: chartDataset.yData, tickmode: "array", tickfont: { size: 12, }, }, plot_bgcolor: "white", gridcolor: "#d3d3d3", // 设置网格线颜色 }; // 准备 HTML 内容 const htmlContent = `