Skip to main content
Glama
measurementsHandler.js3.51 kB
import { influxRequest } from "../utils/influxClient.js"; import { DEFAULT_ORG } from "../config/env.js"; // Resource: Get Measurements in a Bucket export async function bucketMeasurements(uri, { bucketName }) { console.log( `Processing measurements in bucket '${bucketName}' request - START`, ); if (!DEFAULT_ORG) { console.error("Error: INFLUXDB_ORG environment variable is not set"); return { contents: [{ uri: uri.href, text: JSON.stringify({ error: "INFLUXDB_ORG environment variable is not set", }), }], error: true, }; } try { // Use Flux query to get measurements console.log( `Creating Flux query for bucket '${bucketName}' measurements`, ); const queryBody = JSON.stringify({ query: `import "influxdata/influxdb/schema" schema.measurements(bucket: "${bucketName}")`, type: "flux", }); console.log(`Making InfluxDB API request for measurements...`); const response = await influxRequest( "/api/v2/query?org=" + encodeURIComponent(DEFAULT_ORG), { method: "POST", body: queryBody, }, 5000, // Explicit timeout ); console.log( "Measurements API response received, status:", response.status, ); console.log("Reading response text..."); const responseText = await response.text(); console.log("Parsing CSV response..."); const lines = responseText .split("\n") .map((line) => line.replace(/\r/g, "")) .filter((line) => line.trim() !== ""); console.log(`Found ${lines.length} lines in the response`); // Flux CSV responses include metadata rows that start with '#' const dataLines = lines.filter((line) => !line.startsWith("#")); console.log(`Found ${dataLines.length} data lines after removing metadata`); if (dataLines.length === 0) { console.log("No data rows found in the response"); return { contents: [{ uri: uri.href, text: JSON.stringify({ bucket: bucketName, measurements: [], }), }], }; } const headers = dataLines[0].split(",").map((header) => header.trim()); const valueIndex = headers.indexOf("_value"); console.log("Headers:", headers); console.log("Value index:", valueIndex); if (valueIndex === -1) { console.log("No _value column found in the response"); return { contents: [{ uri: uri.href, text: JSON.stringify({ bucket: bucketName, measurements: [], }), }], }; } console.log("Extracting measurement values..."); const measurements = dataLines.slice(1) .map((line) => line.split(",")[valueIndex] || "") .map((value) => value.trim()) .filter((m) => m !== ""); console.log(`Found ${measurements.length} measurements`); console.log("Successfully processed measurements request - END"); return { contents: [{ uri: uri.href, text: JSON.stringify({ bucket: bucketName, measurements, }), }], }; } catch (error) { console.error(`Error in bucket measurements resource: ${error.message}`); console.error(error.stack); return { contents: [{ uri: uri.href, text: JSON.stringify({ error: `Error retrieving measurements: ${error.message}`, }), }], error: true, }; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/idoru/influxdb-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server